diff options
author | Neil Brown <neilb@suse.de> | 2005-04-04 06:02:49 +0000 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2005-04-04 06:02:49 +0000 |
commit | d7eaf49f65ecb99e24255026331b0af7a9245cc2 (patch) | |
tree | 1a360f741fc0698f0d766a386eab68ee3b94ee65 /Manage.c | |
parent | b568741513da4cc6284815345473f67f7cdee1df (diff) | |
download | mdadm-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.c | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -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); |