summaryrefslogtreecommitdiff
path: root/mdmon.c
Commit message (Collapse)AuthorAge
* mdmon: don't include super0 and super1 in mdmonNeilBrown2014-08-07
| | | | | | | They are no needed, and future patch will add a dependency yo super1 which mdmon doesn't have. Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: ensure Unix domain socket is created with safe permissions.NeilBrown2014-07-03
| | | | | | | | | | | | In the unlikely case that mdmon is started with an overly permissive umask, we don't want to risk giving away world acccess. All other "mkdir" and "O_CREAT" calls in mdmon and mdadm set a suitably restrictive permission mask. 'bind' don't take an explicit mask so it needs an implicit one. Reported-by: Vincent Berg <vberg@ioactive.com> Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: don't complain about notifying parent when there is no needNeilBrown2014-01-21
| | | | | | | | | When run with --foreground mdmon has no need to notify any parent, so it shouldn't even try, let alone complain when it fails. Also close an end of a pipe which is no longer used. Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: honour --offroot, againmwilck@arcor.de2013-09-12
| | | | | | | | | | | | | | | | | | commit 3e32ba9d removed support for --offroot, and a9c15847 made mdmon use @ in argv[0] only when started from initrd. This breaks mdadm in OpenSUSE 12.3, which starts mdmon from the root file system and relies on --offroot to work as documented earlier. Reintroducing --offroot as an undocumented option, as its use is going to go away soon anyway. If this can't be applied, it should probably be included as distro-specific patch if mdadm 3.3 is built for OpenSUSE 12.3. I haven't checked if the patch is necesary for OpenSUSE Factory, too. Signed-off-by: Martin Wilck <mwilck@arcor.de> Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: don't lie to systemd.NeilBrown2013-08-01
| | | | | | | | | | | | | | Now that mdmon responds fairly well to SIGTERM, stop lying to systemd about being started on the initrd. Note that if mdmon is rerun (--takeover) for some reason, and systemd chooses to kill processes before remounting / readonly, then the unmount will hang. If systemd ever lets us tell it that we don't want to be killed until root is readonly, then we should do that. Signed-off-by: NeilBrown <neilb@suse.de>
* Remove lots of unnecessary white space.NeilBrown2013-06-19
| | | | | | | Now that I am using white-space mode in Emacs I can see all of this, and I don't like it :-) Signed-off-by: NeilBrown <neilb@suse.de>
* pr_err for mdmon.NeilBrown2013-05-21
| | | | Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: Add missing option documentation to --help outputJes Sorensen2013-04-26
| | | | | | | Document that -a is equivalent to --all, as well as --foreground / -F Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com> Signed-off-by: NeilBrown <neilb@suse.de>
* Discard devnum in favour of devnmNeilBrown2013-02-21
| | | | | | | | | | | | | | We widely use a "devnum" which is 0 or +ve for md%d devices and -ve for md_d%d devices. But I want to be able to use md_%s device names. So get rid of devnum (a number) and use devnm (a 32char string). eg. md0 md_d2 md_home Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: add --foreground optionNeilBrown2013-02-05
| | | | | | | | While not strictly necessary for systemd, it is cleaner to avoid forking when running from a management daemon. So add a --foreground option to mdmon. Signed-off-by: NeilBrown <neilb@suse.de>
* Remove --offroot argument and default to always setting argv[0] to @Jes Sorensen2013-02-05
| | | | | | | | | | | We still allow --offroot to be given - for compatibility with scripts - but ignore it. The whole point of --offroot is to get systemd to not auto-kill mdmon, and we always want that. Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com> Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: allow --takeover when original was started with --offrootNeilBrown2012-08-20
| | | | | | | | As --offroot causes ARGV[0] to be changed, we need to be more lenient when checking that the mdmon we are about to kill really is mdmon. i.e. allow name to be "@dmon" instead. Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: fix arg processing for -aNeilBrown2012-08-20
| | | | | | '-a' was not being recognised as an abbreviation for '--all'. Signed-off-by: NeilBrown <neilb@suse.de>
* Remove scattered checks for malloc success.NeilBrown2012-07-09
| | | | | | | | | | | | | | malloc should never fail, and if it does it is unlikely that anything else useful can be done. Best approach is to abort and let some super-daemon restart. So define xmalloc, xcalloc, xrealloc, xstrdup which don't fail but just print a message and exit. Then use those removing all the tests for failure. Also replace all "malloc;memset" sequences with 'xcalloc'. Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: fix arg parsing.NeilBrown2012-07-09
| | | | | | | | -t aka --takeover should not be setting container_name. It sets it to NULL which causes failure when you try mdmon --all --takeover Signed-off-by: NeilBrown <neilb@suse.de>
* Add --offroot argument to mdmonJes Sorensen2012-01-30
| | | | | | Acked-by: Doug Ledford <dledford@redhat.com> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com> Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: Use getopt_long() to parse command line optionsJes Sorensen2012-01-30
| | | | | | | | | | This changes mdmon over to use getopt_long() for option parsing, making it easier to add new options. In addition this patch introduces a short version -t for --takeover and adds -h/--help. Acked-by: Doug Ledford <dledford@redhat.com> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com> Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: avoid using victim_sock when it is -1.NeilBrown2011-11-07
| | | | | | | | It possible that we try to use victim_sock even when we couldn't open it. This is never actually harmful but it looks wrong and it is best to fix it. Signed-off-by: NeilBrown <neilb@suse.de>
* Revert "mdmon(): Error out if failing to connect to victim monitor"NeilBrown2011-11-07
| | | | | | | | | | | | | | | | | | | | | | This reverts commit 819c158866f466075a1c719f0dc496deb2fb3814. Adam Kwolek reports that with this patch, mdmon sometimes doesn't start: When array is not clean dismounted directory /dev/.mdadm is not cleaned up. On array re-assembly read pid is not valid and it is not possible to connect to monitor. This causes mdmon to exit and array remains not monitored. Problem is introduced by fix: mdmon(): Error out if failing to connect to victim monitor 819c158866f466075a1c719f0dc496deb2fb3814 This is critical for container reshape when mdmon is should finish reshape. when reshape is not finished, array is reshaped again by mdadm. As victim_sock is subsequently tested, we don't really need to test-and-fail here. Reported-by: Adam Kwolek <adam.kwolek@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon(): Error out if failing to connect to victim monitorJes Sorensen2011-11-01
| | | | | Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com> Signed-off-by: NeilBrown <neilb@suse.de>
* Fix some compiler warnings.Luca Berra2011-06-17
| | | | | | Original by Luca, with various changes by Neil Signed-off-by: NeilBrown <neilb@suse.de>
* Define dummy functions to mdmon.cAdam Kwolek2011-06-08
| | | | | | | | | | | | | | | Definitions are necessary to compile mdmon. Metadata specific source code is compiled to mdmon. Functions used for reshape check pointing: - restore_stripes() - save_stripes - abort_reshape are not used in mdmon, but they are compiled in it. To enable mdmon compilation, dummy functions are used. Signed-off-by: Adam Kwolek <adam.kwolek@intel.com> Signed-off-by: Krzysztof Wojcik <krzysztof.wojcik@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: Fix crash if /proc/mdstat lists 0.9 superblocksMichal Marek2011-05-17
| | | | Signed-off-by: Michal Marek <mmarek@suse.cz>
* Make child_monitor a candidate for ->manage_reshapeNeilBrown2011-01-12
| | | | | | | | | | | | Child_monitor was design to perform 'manage_reshape' for native arrays. So change the signature for ->manage_reshape to match child_monitor and move the all to the same place that child_monitor is called from. Also give super-intel a manage_reshape handler which simple calls child_monitor. Signed-off-by: NeilBrown <neilb@suse.de>
* Replace various load_super calls with load_containerNeilBrown2010-11-22
| | | | | | | When we call load_super expecting to find a container, we now just call load_container directly. Signed-off-by: NeilBrown <neilb@suse.de>
* Remove subarray field in supertype.NeilBrown2010-11-22
| | | | | | | This is now only ever set, never used. So remove it. Signed-off-by: NeilBrown <neilb@suse.de>
* Compile with -Wextra by defaultNeilBrown2010-08-05
| | | | | | This produced lots of warning, some of which pointed to actual bugs. Signed-off-by: NeilBrown <neilb@suse.de>
* Fix all the confusion over directories once and for all.Doug Ledford2010-07-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | We now have 3 directory definitions: mdmon directory for its pid and sock files (compile time define, not changable at run time), mdmonitor directory which is for the mdadm monitor mode pid file (can only be passed in via command line at the time mdadm is invoked in monitor mode), and the directory for the mdadm incremental assembly map file (compile time define, not changable at run time). Only the mdadm map file still hunts multiple locations, and the number of locations has been reduced to /var/run and the compile time specified location. Re-use of similar sounding defines that actually didn't denote their actual usage at compile time made it more difficult for a person to know what affect changing the compile time defines would have on the resulting programs. This patch renames the various defines to clearly identify which item the define affects. It also reduces the number of various directories which will be searched for these files as this has lead to confusion in mdadm and mdmon in terms of which files should take precedence when files exist in multiple locations, etc. It's best if the person compiling the program intentionally and with planning selects the right directories to be used for the various purposes. Which directory is right depends on which items you are talking about and what boot loader your system uses and what initramfs generation program your system uses. Because of the inter-dependency of all these items it would typically be up to the distribution that mdadm is being integrated into to select the correct values for these defines. Signed-off-by: Doug Ledford <dledford@redhat.com>
* mdmon: satisfy glibc tls abi requirements with pthreadsDan Williams2010-07-06
| | | | | | | | | | | | | Setting up a proper tls descriptor is required to conform to the abi [1]. Until it can be implemented in mdmon use pthreads instead of clone(2) to let glibc handle the details. The old behaviour can be had by un-defining USE_PTHREADS. Note, the "O2" builds need LDFLAGS now to pick up the '-pthread' option. [1]: http://people.redhat.com/drepper/tls.pdf Signed-off-by: Dan Williams <dan.j.williams@intel.com>
* Merge branch 'fixes' into for-neilDan Williams2010-07-01
|\
| * Always assume SKIP_GONE_DEVS behaviour and kill the flagDan Williams2010-06-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ...i.e. GET_DEVS == (GET_DEVS|SKIP_GONE_DEVS) A null pointer dereference in Incremental.c can be triggered by replugging a disk while the old name is in use. When mdadm -I is called on the new disk we fail the call to sysfs_read(). I audited all the locations that use GET_DEVS and it appears they can tolerate missing a drive. So just make SKIP_GONE_DEVS the default behaviour. Also fix up remaining unchecked usages of the sysfs_read() return value. Reported-by: Dave Jiang <dave.jiang@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
* | Kill subarray v2Dan Williams2010-06-15
|/ | | | | | | | | | | | | | | | | | | | | | | | | Support for deleting a subarray out of a container. When all subarrays are deleted the component devices are converted back into spares, a --zero-superblock is still needed to kill the remaining metadata at this point. This operation is blocked when the subarray is active and may also be blocked by the metadata handler when deleting the subarray might change the uuid of other active subarrays. For example, with imsm, deleting subarray 'n' may change the uuid of subarrays with indexes > n. Deleting a subarray needs to be a container wide event to ensure disks that record the modified subarray list perceive other disks that did not receive this change as out of date. Notes: The st->subarray parsing in super-intel.c and super-ddf.c is updated to be more strict now that we are reading user supplied subarray values. Offline container modification shares actions that mdmon typically handles so promote is_container_member() and version_to_superswitch() (formerly find_metadata_methods()) to generic utility functions for the cases where mdadm performs the operation. Signed-off-by: Dan Williams <dan.j.williams@intel.com>
* Create directory to contain mapfile (Assuming parent exists andDoug Ledford2010-03-24
| | | | | | | | filesystem is writable). This particularly keeps udev happy if VAR_RUN is set to /dev/md. Signed-off-by: Doug Ledford <dledford@redhat.com> Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: Check both RUN directories to find running mdmonNeilBrown2010-03-03
| | | | | | | | | | If mdmon is run without "--takeover", it should still check both *_RUN directories for a valid 'pid' file to guard against having two mdmons running at the same time. Suggested-by: Luca Berra <bluca@comedia.it> Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: check select a writable pid_dirLuca Berra2010-03-03
| | | | | | | | Check that either VAR_DIR or ALT_DIR is actually writable before selecting it. Signed-off-by: Luca Berra <bluca@comedia.it> Signed-off-by: NeilBrown <neilb@suse.de>
* fix mdmon option parsingLuca Berra2010-03-03
| | | | | | | | | | | running mdmon --takeover --all resulted in a segfault. Also allow "--all" to be longer so that e.g. md_d127 can successfully over-write it in the argument list visible to 'ps'. Signed-off-by: Luca Berra <bluca@comedia.it> Signed-off-by: NeilBrown <neilb@suse.de>
* Add _FORTIFY_SOURCE to mdadm.O2 build.NeilBrown2010-03-03
| | | | | | | | | | When building mdadm.O2, set _FORTIFY_SOURCE to get more warnings, and also build mdmon.O2 to find warnings in that code too. Then fix the warnings. Suggested-by: Luca Berra <bluca@comedia.it> Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: insist on creating .pid file at startup.NeilBrown2010-02-08
| | | | | | | | | | | | | | | | Now that we don't "mdadm --takeover" until /var/run is writable there is no need to continually try to create files in there. So only create these files at startup and fail if they cannot be made. This means that to start an array with externally managed metadata, either /var/run or ALT_RUN (e.g. /lib/init/rw) must be writable. To 'takeover' from a previous mdmon instance, /var/run must be writable. This means we don't need to worry about SIGHUP (which was once used to tell us it was time to create .pid) and SIGALRM. Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: remove switch-root functionality.NeilBrown2010-02-08
| | | | | | | | | | | | | | | | | Using switch-root and then creating files in /var/run once that location is writable is racing as most distro clean out /var/run shortly after it is mounted. This can cause the .pid and .sock files to be deleted shortly after they are created. This option doesn't seem to be used at all any, and the alternative of communicating the pid etc in some preserved directory and then restarting mdmon once all is settled seems simpler. So remove the code for supporting switchroot and update man page accordingly. Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: recognise --all in place of /proc/mdstatNeilBrown2010-02-04
| | | | | | | It seems more meaningful. Keep the old option as well for back compatibility. Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: allow pid to be stored in different directory.NeilBrown2010-02-04
| | | | | | | | /var/run probably doesn't persist from early boot. So if necessary, store in in /lib/init/rw or somewhere else that does persist. Signed-off-by: NeilBrown <neilb@suse.de>
* Having single function to read mdmon pid file.NeilBrown2010-02-04
| | | | | | | We don't need three. One (signal_mdmon) wasn't even being used. Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: discard test_pidfile()NeilBrown2010-02-04
| | | | | | | | devname2mdmon() can be used just as easily and doing so saves us from some duplicate code. Also tidy up some related logic. Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: improve switchroot handling.NeilBrown2010-02-04
| | | | | | | | | | | | | The change to get mdmon to re-exec itself from the switchroot filesystem broken switchroot in various ways. This fixes it. If the switchroot path is not '/', mdmon will find the pid and socket for the monitor, chroot to the new root, and exec mdmon passing the pid in argv[2] and the socket in stdin. If the switchroot path is actually a number, mdmon will not chroot, but will kill that pid before taking over the array. Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: simplify try_kill_monitorNeilBrown2010-02-04
| | | | | | | | After we SIGTERM the monitor we need to wait for it to finish up. Rather than the complexity of waiting for every md array to be clean, we can simply read from the sock connected to the monitor. When the monitor dies, we will get EOF. Before then we will block. Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: remove scan variable from mdmon()NeilBrown2010-02-04
| | | | | | | | | It is redundant as each place that it is used, it can only have one possible value. Also change the related arg to mdmon() to have a more meaningful name. And make mdmon() static. Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: fix fd leak and possible buffer overrun.NeilBrown2010-01-29
| | | | | | | We normally wouldn't close 'fd', and as 'buf' might not have had a nul, strstr could have overrun it. Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: lock current memory as well as future memory.NeilBrown2009-10-19
| | | | | | | | mlockall(MCL_FUTURE) only locks mappings that have not yet been created. To lock all memory used by the process, we need MCL_CURRENT | MCL_FUTURE Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: preserve socket over chrootDan Williams2009-10-13
| | | | | | | | | | Connect to the monitor in the old namespace and use that connection for WaitClean requests when stopping the victim mdmon instance. This allows ping_monitor() to work post chroot(). Cc: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
* mdmon: exec(2) when the switchroot argument is not "/"Dan Williams2009-10-13
| | | | | | | | | | Try to execute mdmon from the target namespace. When used for initramfs handovers we need to drop all references to the initramfs filesystem for that memory to be freed. Cc: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>