summaryrefslogtreecommitdiffstats
path: root/Manage.c
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2005-04-04 06:02:49 +0000
committerNeil Brown <neilb@suse.de>2005-04-04 06:02:49 +0000
commitd7eaf49f65ecb99e24255026331b0af7a9245cc2 (patch)
tree1a360f741fc0698f0d766a386eab68ee3b94ee65 /Manage.c
parentb568741513da4cc6284815345473f67f7cdee1df (diff)
downloadmdadm-d7eaf49f65ecb99e24255026331b0af7a9245cc2.tar.gz
mdadm-d7eaf49f65ecb99e24255026331b0af7a9245cc2.tar.xz
mdadm-d7eaf49f65ecb99e24255026331b0af7a9245cc2.zip
Use O_EXCL when opening component devices to be assembled into an array
In 2.6, this will fail if the device is already in use, so we can detect this error more easily. Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
Diffstat (limited to 'Manage.c')
-rw-r--r--Manage.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/Manage.c b/Manage.c
index 8835095..b323fd3 100644
--- a/Manage.c
+++ b/Manage.c
@@ -194,6 +194,14 @@ int Manage_subdevs(char *devname, int fd,
return 1;
case 'a':
/* add the device - hot or cold */
+ /* Make sure it isn' in use (in 2.6 or later) */
+ fd = open(dv->devname, O_RDONLY|O_EXCL);
+ if (fd < 0) {
+ fprintf(stderr, Name ": Cannot open %s: %s\n",
+ dv->devname, strerror(errno));
+ return 1;
+ }
+ close(fd);
if (ioctl(fd, HOT_ADD_DISK, (unsigned long)stb.st_rdev)==0) {
fprintf(stderr, Name ": hot added %s\n",
dv->devname);