Manage: fix regression on removing detached devices.
If /dev is static, a name may remain there after the device has been detached from the system. Using 'mdadm' to remove such a device from the array should still work (even though "mdadm --remove detached" might be preferred). So when processing a device for '-r', don't insist on being able to open the device. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
c132678b18
commit
5a9de8db04
22
Manage.c
22
Manage.c
|
@ -425,14 +425,22 @@ int Manage_subdevs(char *devname, int fd,
|
||||||
j = 0;
|
j = 0;
|
||||||
|
|
||||||
tfd = dev_open(dv->devname, O_RDONLY);
|
tfd = dev_open(dv->devname, O_RDONLY);
|
||||||
if (tfd < 0 || fstat(tfd, &stb) != 0) {
|
if (tfd < 0 && dv->disposition == 'r' &&
|
||||||
fprintf(stderr, Name ": cannot find %s: %s\n",
|
lstat(dv->devname, &stb) == 0)
|
||||||
dv->devname, strerror(errno));
|
/* Be happy, the lstat worked, that is
|
||||||
if (tfd >= 0)
|
* enough for --remove
|
||||||
close(tfd);
|
*/
|
||||||
return 1;
|
;
|
||||||
|
else {
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
close(tfd);
|
|
||||||
if ((stb.st_mode & S_IFMT) != S_IFBLK) {
|
if ((stb.st_mode & S_IFMT) != S_IFBLK) {
|
||||||
fprintf(stderr, Name ": %s is not a "
|
fprintf(stderr, Name ": %s is not a "
|
||||||
"block device.\n",
|
"block device.\n",
|
||||||
|
|
Loading…
Reference in New Issue