Introduce new open_mddev which just does an open.
Some cases we aren't interested in creating the mddev, just opening it. Make those more explicit. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
2399204ddd
commit
6be1d39d1d
9
mdadm.c
9
mdadm.c
|
@ -943,8 +943,9 @@ int main(int argc, char *argv[])
|
|||
exit(2);
|
||||
}
|
||||
if (mode == MANAGE || mode == GROW)
|
||||
autof=1; /* Don't create */
|
||||
mdfd = create_mddev(devlist->devname, autof);
|
||||
mdfd = open_mddev(devlist->devname, 1);
|
||||
else
|
||||
mdfd = create_mddev(devlist->devname, autof);
|
||||
if (mdfd < 0)
|
||||
exit(1);
|
||||
if ((int)ident.super_minor == -2) {
|
||||
|
@ -1242,7 +1243,7 @@ int main(int argc, char *argv[])
|
|||
e->dev);
|
||||
continue;
|
||||
}
|
||||
mdfd = create_mddev(name, 1);
|
||||
mdfd = open_mddev(name, 1);
|
||||
if (mdfd >= 0) {
|
||||
if (Manage_runstop(name, mdfd, -1, quiet?1:last?0:-1))
|
||||
err = 1;
|
||||
|
@ -1279,7 +1280,7 @@ int main(int argc, char *argv[])
|
|||
case Waitclean:
|
||||
rv |= WaitClean(dv->devname, verbose-quiet); continue;
|
||||
}
|
||||
mdfd = create_mddev(dv->devname, 1);
|
||||
mdfd = open_mddev(dv->devname, 1);
|
||||
if (mdfd>=0) {
|
||||
switch(dv->disposition) {
|
||||
case 'R':
|
||||
|
|
1
mdadm.h
1
mdadm.h
|
@ -802,6 +802,7 @@ extern char *get_md_name(int dev);
|
|||
extern char DefaultConfFile[];
|
||||
|
||||
extern int create_mddev(char *dev, int autof);
|
||||
extern int open_mddev(char *dev, int report_errors);
|
||||
extern int create_mddev_devnum(char *devname, int devnum, char *name,
|
||||
char *chosen_name, int parts);
|
||||
extern int open_container(int fd);
|
||||
|
|
31
mdopen.c
31
mdopen.c
|
@ -254,15 +254,30 @@ int create_mddev(char *dev, int autof)
|
|||
make_parts(dev,parts, ci->symlinks);
|
||||
}
|
||||
}
|
||||
mdfd = open(dev, O_RDWR);
|
||||
if (mdfd < 0)
|
||||
fprintf(stderr, Name ": error opening %s: %s\n",
|
||||
dev, strerror(errno));
|
||||
else if (md_get_version(mdfd) <= 0) {
|
||||
fprintf(stderr, Name ": %s does not appear to be an md device\n",
|
||||
dev);
|
||||
mdfd = open_mddev(dev, 1);
|
||||
return mdfd;
|
||||
}
|
||||
|
||||
/* Open this and check that it is an md device.
|
||||
* On success, return filedescriptor.
|
||||
* On failure, return -1 if it doesn't exist,
|
||||
* or -2 if it exists but is not an md device.
|
||||
*/
|
||||
int open_mddev(char *dev, int report_errors)
|
||||
{
|
||||
int mdfd = open(dev, O_RDWR);
|
||||
if (mdfd < 0) {
|
||||
if (report_errors)
|
||||
fprintf(stderr, Name ": error opening %s: %s\n",
|
||||
dev, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
if (md_get_version(mdfd) <= 0) {
|
||||
close(mdfd);
|
||||
mdfd = -1;
|
||||
if (report_errors)
|
||||
fprintf(stderr, Name ": %s does not appear to be "
|
||||
"an md device\n", dev);
|
||||
return -2;
|
||||
}
|
||||
return mdfd;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue