summaryrefslogtreecommitdiffstats
path: root/mdopen.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* mdopen: Prevent overrunning the devname buffer when copying devnm into it ↵Robert LeBlanc2016-08-251-1/+1
| | | | | | | | | | | | for long md names. Linux allows for 32 character device names. When using the maximum size device name and also storing "/dev/", devname needs to be 37 character long to store the complete device name. i.e. "/dev/md_abcdefghijklmnopqrstuvwxyz12\0" Signed-off-by: Robert LeBlanc<robert@leblancnet.us> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
* Change behavior in find_free_devnm when wrapping around.Mike Lovell2016-06-031-1/+1
| | | | | | | | Newer kernels don't allow for specifying an array larger than 511. This makes it so find_free_devnm wraps to 511 instead of 2^20 - 1. Signed-off-by: Mike Lovell <mlovell@bluehost.com> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
* Use dev_t for devnm2devid and devid2devnmMike Lovell2016-06-031-2/+2
| | | | | | | | | | | | | | | | | | | Commit 4dd2df0966ec added a trip through makedev(), major(), and minor() for device major and minor numbers. This would cause mdadm to fail in operating on a device with a minor number bigger than (2^19)-1 due to it changing from dev_t to a signed int and back. Where this was found as a problem was when a array was created with a device specified as a name like /dev/md/raidname and there were already 128 arrays on the system. In this case, mdadm would chose 1048575 ((2^20)-1) for the array and minor number. This would cause the major and minor number to become negative when generated from devnm2devid() and passed to major() and minor() in open_dev_excl(). open_dev_excl() would then call dev_open() which would detect the negative minor number and call open() on the *char containing the major:minor pair which isn't a valid file. Signed-off-by: Mike Lovell <mlovell@bluehost.com> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
* Don't break long strings onto multiple lines.NeilBrown2015-02-121-10/+5
| | | | | | | | | | | | | | | | | It is best to keep strings all together so that they are easier to search for in the source code. If a string is so long that it looks ugly one line, them maybe it should be broken into multiple lines for display too. Only strings which contain a newline can be broken into multiple lines: "It is OK to\n" "break this string\n" Signed-off-by: NeilBrown <neilb@suse.de>
* Release mdadm-3.3mdadm-3.3NeilBrown2013-09-031-1/+1
| | | | | | (and various cosmetic fixes) Signed-off-by: NeilBrown <neilb@suse.de>
* Move find_free_devnum to mdopen.cNeilBrown2013-07-021-0/+33
| | | | | | | | | There is only one called to find_free_devnum and it is in mdopen.c The removes a dependency between util.c and config.c which allows us to now drop config.o from mdmon. Signed-off-by: NeilBrown <neilb@suse.de>
* create_mddev: add support for /dev/md_XXX non-numeric names.NeilBrown2013-05-151-20/+35
| | | | | | | | | | With the 'devnm' infrastructure fixed, it is quite easy to support names like "md_home" for md arrays. The currently defaults to "off" and can be enabled in mdadm.conf with CREATE names=yes This is incase other tools get confused by the new names. Signed-off-by: NeilBrown <neilb@suse.de>
* Discard devnum in favour of devnmNeilBrown2013-02-211-13/+15
| | | | | | | | | | | | | | 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>
* conditionally remove map_dev from find_free_devnumNeilBrown2013-01-071-2/+1
| | | | | | | | | map_dev can be slow so it is best to not call it when not necessary. The final test in "find_free_devnum" is not relevant when udev is being used, so remove the test in that case. Signed-off-by: NeilBrown <neilb@suse.de>
* Create new md devices consistentlyJustin Maggard2012-10-241-1/+4
| | | | | | | | | | | | | Creating a new MD device with the name 'd-0' results in some unexpected behavior, since mdadm sees that '-0' is a non-negative integer and therefore makes a "partitionable" device (/dev/md_d0). This is not the expected behavior, since the documentation mentions 'dN' several places, and a reboot brings it up as /dev/md/d-0. Make this consistent by ensuring that the character immediately following 'd' is a digit during creation. Signed-off-by: NeilBrown <neilb@suse.de>
* Handles spaces in array names better.NeilBrown2012-10-041-2/+11
| | | | | | | | | | | | 1/ When printing the "name=" entry for --brief output, enclose name in quotes if it contains spaces etc. Quotes are already supported for reading mdadm.conf 2/ When a name is used as a device name, translate spaces and tabs to '_', as well as the current translation of '/' to '-'. Signed-off-by: NeilBrown <neilb@suse.de>
* Minor cosmetic fixes in various files.NeilBrown2012-08-131-14/+10
| | | | Signed-off-by: NeilBrown <neilb@suse.de>
* Remove scattered checks for malloc success.NeilBrown2012-07-091-1/+1
| | | | | | | | | | | | | | 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>
* Introduce pr_err for printing error messages.NeilBrown2012-07-091-13/+13
| | | | | | | 'pr_err("' is a lot shorter than 'fprintf(stderr, Name ": ' cont_err() is also available. Signed-off-by: NeilBrown <neilb@suse.de>
* Update test for "is udev active".NeilBrown2012-05-031-1/+1
| | | | | | | | Newer udev doesn't use /dev/.udev any more. it used /run/udev instead. So test for that as well. Signed-off-by: NeilBrown <neilb@suse.de>
* make_parts(): Fix case of comparing against uninitialized variablesJes Sorensen2011-11-021-9/+12
| | | | | | | | | | | | | | | Silencing gcc's warning of uninitialized variables was hiding a bug where if we have /dev/md64 as a symlink, and /dev/md64p1 was a real device node. In this case major_num and minor_num would not get populated, but we end up comparing against them because the stat for md64p1 succeeds. Instead of using the int foo = foo trick, change the code to set set the variables to invalid values so comparisons will fail. Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com> Signed-off-by: NeilBrown <neilb@suse.de>
* Fix unterminated buffer after readlink() callThomas Jarosch2011-10-171-1/+5
| | | | | Signed-off-by: Thomas Jarosch <thomas.jarosch@intra2net.com> Signed-off-by: NeilBrown <neilb@suse.de>
* open_mddev: open RDONLY if RDWR doesn't work.NeilBrown2011-01-311-0/+2
| | | | | | | If an array is read-only then "mdadm -S" cannot open it to stop it without this fix. Signed-off-by: NeilBrown <neilb@suse.de>
* Free some malloced memory that wasn't being freed.NeilBrown2009-10-221-1/+4
| | | | | | | | | | As mdadm is normally a short-lived program it isn't always necessary to free memory that was allocated, as the 'exit()' call will automatically free everything. But it is more obviously correct if the 'free' is there. So this patch add a few calls to 'free' Signed-off-by: NeilBrown <neilb@suse.de>
* mdopen: only use 'dev' as chosen name if it is a full path.NeilBrown2009-10-191-2/+1
| | | | | | | Otherwise using names like "r0" causes problem. They are handled sufficiently by other paths in the code. Signed-off-by: NeilBrown <neilb@suse.de>
* Update copyright dates and remove references to @cse.unsw.edu.auNeilBrown2009-06-021-7/+2
| | | | | | Also removed 'paper' addresses. Signed-off-by: NeilBrown <neilb@suse.de>
* create_mddev: don't replace /dev/mdX with /dev/md/XNeilBrown2009-05-111-1/+4
| | | | | | | | If someone creates/assemble an array called "/dev/md0", don't force it to be "/dev/md/0". Doing so isn't really necessary and it likely to confuse people. Signed-off-by: NeilBrown <neilb@suse.de>
* create_dev - allow array names like mdX and /dev/mdX to appear 'numeric'NeilBrown2009-05-111-3/+11
| | | | | | | | | | | | | | When choosing the minor number to use with an array, we currently base the number of the 'name' stored in the metadata if that name is numeric. Extend that so that if it looks like a number md device name (/dev/md0 or just md0 or even /dev/md/0), then we use the number at the end to suggest a minor number. The means that if someone creates and array with "--name md0" or even "--name /dev/md0" it will continue to do what they expect. Signed-off-by: NeilBrown <neilb@suse.de>
* mdopen: be more careful when adding digit to names.NeilBrown2009-03-101-1/+1
| | | | | | | | If we need to add digits to a name to make it unique, but don't have to add '_', we need to avoid adding a digit immediately after a digit. So if the last character of the name is a digit, add the '_' anyway. Signed-off-by: NeilBrown <neilb@suse.de>
* some warn_unused_result fixupsDan Williams2008-11-271-5/+9
| | | | Signed-off-by: Dan Williams <dan.j.williams@intel.com>
* mdopen: typo in buffer-length for a sprintf.NeilBrown2008-11-071-1/+1
| | | | | | | That '10000' should have been '1000'. Make it a 'sizeof' to avoid such carelessness. Signed-off-by: NeilBrown <neilb@suse.de>
* mdopen: only let numeric name set minor number if it doesn't cause a conflict.NeilBrown2008-11-041-1/+4
| | | | | | | So if the array with minor number matching the name of a new array already exists, just assemble with a different minor number. Signed-off-by: NeilBrown <neilb@suse.de>
* mdopen: use small sequence number for uniquifying array names.NeilBrown2008-11-041-9/+23
| | | | | | | | | Rather than appending the md minor number, we now append a small sequence number to make sure name in /dev/md/ that aren't LOCAL are unique. As the map file is locked while we do this, we are sure of no losing any races. Signed-off-by: NeilBrown <neilb@suse.de>
* Quiet unitialized variable warningsDan Williams2008-11-041-2/+3
| | | | | Signed-off-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
* mdopen: fix up name parsing.NeilBrown2008-11-041-9/+24
| | | | I think this is closer to what I want. Fewer surprises anyway.
* Incremental: adjust to the new naming scheme.NeilBrown2008-11-041-80/+0
| | | | | --incremental now uses exactly the same create_mddev that other code uses.
* mdopen: Restore creation of partition devices and symlink.NeilBrown2008-11-041-33/+36
| | | | | Using the 'new' name scheme we restore the creation of partition links (in the case the udev isn't used).
* mdopen: Introduce new rules for creating device name.NeilBrown2008-11-041-129/+205
| | | | MORE CONTENT HERE
* Introduce new open_mddev which just does an open.NeilBrown2008-11-041-8/+23
| | | | | | | Some cases we aren't interested in creating the mddev, just opening it. Make those more explicit. Signed-off-by: NeilBrown <neilb@suse.de>
* Rename open_mddev to create_mddevNeilBrown2008-11-041-2/+2
| | | | | | | This reflect that fact that more often than not it is creating things in /dev, and allows for a new open_mddev which does just that. Signed-off-by: NeilBrown <neilb@suse.de>
* Merge branch 'master' into devel-3.0NeilBrown2008-10-301-1/+1
|\ | | | | | | | | | | | | | | Conflicts: Incremental.c super0.c super1.c
| * Incremental: allow assembly of foreign array.NeilBrown2008-10-291-1/+1
| | | | | | | | | | | | | | | | | | | | | | If a foreign (i.e. not known to be local) array is discovered by --incremental assembly, we now assemble it. However we ignore any name information in the array so as not to potentially create a name that conflict with a 'local' array. Also, foreign arrays are always assembled 'read-auto' to avoid writing anything until the array is actually used. Signed-off-by: NeilBrown <neilb@suse.de>
* | Lots of fixes to make incremental assembly of containers work.NeilBrown2008-09-181-1/+1
|/ | | | | | | | So: mdadm -I /dev/whatever will (if appropriate) add whatever to a container, then start any arrays inside the container.
* Clean up usage of open()Doug Ledford2008-07-251-2/+2
| | | | | | | | Fix on call that passed an invalid mode to open Don't pass a third arg unless we also pass O_CREAT Use symbolic args for 2nd and 3rd args Signed-off-by: Doug Ledford <dledford@redhat.com>
* Make device-special files for partitions when using --incrementalNeil Brown2008-05-051-3/+7
|
* Unify code into find_free_devnum.Neil Brown2008-05-051-31/+5
| | | | | Two places have code to find a free md device number. Make this a subroutine.
* Simplistig locking for --incremental.Bill Nottingham2008-05-051-1/+14
| | | | | | | | | | | | | | | | | | From: Bill Nottingham <notting@redhat.com> mdadm --incremental doesn't really do any locking. If you get multiple events in parallel for the same device (that has not yet started), they will all go down the path to create the array. One will succeed, the rest will have SET_ARRAY_INFO die with -EBUSY (md: array mdX already has disks!) and will exit without adding the disk. Original bug report is: https://bugzilla.redhat.com/show_bug.cgi?id=433932 This is solved by adding very very rudimentary locking. Incremental() now opens the device with O_EXCL to ensure only one invocation is frobbing the array at once. A simple loop just tries to open 5 times a second for 5 seconds. If the array stays locked that long, you probably have bigger issues.
* Create /dev/md if needed and it doesn't exist.Bill Nottingham2008-05-051-0/+14
| | | | From: Bill Nottingham <notting@redhat.com>
* Remove spaces/tabs from ends of lines.Neil Brown2007-12-141-1/+1
|
* Make sure --auto=mdp is honoured properlyNeil Brown2007-10-171-0/+1
| | | | | This would only create partitioned devices if the device name was a 'standard' name. This this patch, any name will work.
* mdopen.c don't shadow major() and minor()maximilian attems2007-09-271-32/+32
| | | | | | | s/(major|minor)/\1_num/ Signed-off-by: maximilian attems <max@stro.at> Signed-off-by: Neil Brown <neilb@suse.de>
* Add new mode: --incrementalNeil Brown2006-12-211-0/+48
| | | | | --incremental allows arrays to be assembled one device at a time. This is expected to be used with udev.
* Default to --auto=yesNeil Brown2006-12-141-7/+7
| | | | | so the array devices with 'standard' names get created automatically, as this is almost always what is wanted.
* Check error return on a couple of syscalls.Michael Labuschke2006-10-231-3/+6
| | | | From: "Michael Labuschke" <michael@labuschke.de>
* Don't fail md_open if array already active.Luca Berra2006-10-161-12/+3
| | | | | | From: Luca Berra <bluca@comedia.it> There is no need and it causes occasional problems.