summaryrefslogtreecommitdiffstats
path: root/Manage.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2009-05-12 09:49:45 +1000
committerNeilBrown <neilb@suse.de>2009-05-12 09:49:45 +1000
commitc7b474474c793e9a82bd0d84868fdf7367c89696 (patch)
treec622523a1beaccd8a5db9c1685ea9874b24b5d99 /Manage.c
parent6957819fe61c0366565bfb2588982773ed010dfa (diff)
downloadmdadm-c7b474474c793e9a82bd0d84868fdf7367c89696.tar.gz
mdadm-c7b474474c793e9a82bd0d84868fdf7367c89696.tar.xz
mdadm-c7b474474c793e9a82bd0d84868fdf7367c89696.zip
Monitor: support spare-group manipulation for 1.x metadata.
The code for moving spares around a spare-group currently only works for 0.90 metadata. Generalise it for 1.x metadata as well. Reported-by: "Garth Snyder" <garth@grsweb.us> Signed-off-by NeilBrown <neilb@suse.de>
Diffstat (limited to 'Manage.c')
-rw-r--r--Manage.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/Manage.c b/Manage.c
index 33a0bc7..fa4bb60 100644
--- a/Manage.c
+++ b/Manage.c
@@ -292,11 +292,15 @@ int Manage_subdevs(char *devname, int fd,
} else {
j = 0;
- if (stat(dv->devname, &stb)) {
+ tfd = dev_open(dv->devname, O_RDONLY);
+ if (tfd < 0 || fstat(tfd, &stb) != 0) {
fprintf(stderr, Name ": cannot find %s: %s\n",
dv->devname, strerror(errno));
+ if (tfd >= 0)
+ close(tfd);
return 1;
}
+ close(tfd);
if ((stb.st_mode & S_IFMT) != S_IFBLK) {
fprintf(stderr, Name ": %s is not a "
"block device.\n",
@@ -313,7 +317,7 @@ int Manage_subdevs(char *devname, int fd,
/* add the device */
/* Make sure it isn't in use (in 2.6 or later) */
- tfd = open(dv->devname, O_RDONLY|O_EXCL);
+ tfd = dev_open(dv->devname, O_RDONLY|O_EXCL);
if (tfd < 0) {
fprintf(stderr, Name ": Cannot open %s: %s\n",
dv->devname, strerror(errno));