summaryrefslogtreecommitdiffstats
path: root/Assemble.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 /Assemble.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 'Assemble.c')
-rw-r--r--Assemble.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/Assemble.c b/Assemble.c
index 4e4e123..ace5717 100644
--- a/Assemble.c
+++ b/Assemble.c
@@ -193,7 +193,7 @@ int Assemble(char *mddev, int mdfd,
continue;
}
- dfd = open(devname, O_RDONLY, 0);
+ dfd = open(devname, O_RDONLY|O_EXCL, 0);
if (dfd < 0) {
if (inargv || verbose)
fprintf(stderr, Name ": cannot open device %s: %s\n",
@@ -326,7 +326,7 @@ int Assemble(char *mddev, int mdfd,
super.recovery_cp = 0;
}
super.sb_csum = calc_sb_csum(&super);
- dfd = open(devname, O_RDWR, 0);
+ dfd = open(devname, O_RDWR|O_EXCL, 0);
if (dfd < 0)
fprintf(stderr, Name ": Cannot open %s for superblock update\n",
devname);
@@ -435,7 +435,7 @@ int Assemble(char *mddev, int mdfd,
devices[chosen_drive].devname, devices[chosen_drive].raid_disk,
(int)(devices[chosen_drive].events),
(int)(devices[most_recent].events));
- fd = open(devices[chosen_drive].devname, O_RDWR);
+ fd = open(devices[chosen_drive].devname, O_RDWR|O_EXCL);
if (fd < 0) {
fprintf(stderr, Name ": Couldn't open %s for write - not updating\n",
devices[chosen_drive].devname);
@@ -484,7 +484,7 @@ int Assemble(char *mddev, int mdfd,
if (!devices[j].uptodate)
continue;
chosen_drive = j;
- if ((fd=open(devices[j].devname, O_RDONLY))< 0) {
+ if ((fd=open(devices[j].devname, O_RDONLY|O_EXCL))< 0) {
fprintf(stderr, Name ": Cannot open %s: %s\n",
devices[j].devname, strerror(errno));
return 1;
@@ -556,7 +556,7 @@ This doesnt work yet
|| (old_linux && (change & 1))) {
int fd;
super.sb_csum = calc_sb_csum(&super);
- fd = open(devices[chosen_drive].devname, O_RDWR);
+ fd = open(devices[chosen_drive].devname, O_RDWR|O_EXCL);
if (fd < 0) {
fprintf(stderr, Name ": Could open %s for write - cannot Assemble array.\n",
devices[chosen_drive].devname);