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:
NeilBrown 2008-11-04 10:35:31 +11:00
parent 2399204ddd
commit 6be1d39d1d
3 changed files with 29 additions and 12 deletions

View File

@ -943,8 +943,9 @@ int main(int argc, char *argv[])
exit(2); exit(2);
} }
if (mode == MANAGE || mode == GROW) if (mode == MANAGE || mode == GROW)
autof=1; /* Don't create */ mdfd = open_mddev(devlist->devname, 1);
mdfd = create_mddev(devlist->devname, autof); else
mdfd = create_mddev(devlist->devname, autof);
if (mdfd < 0) if (mdfd < 0)
exit(1); exit(1);
if ((int)ident.super_minor == -2) { if ((int)ident.super_minor == -2) {
@ -1242,7 +1243,7 @@ int main(int argc, char *argv[])
e->dev); e->dev);
continue; continue;
} }
mdfd = create_mddev(name, 1); mdfd = open_mddev(name, 1);
if (mdfd >= 0) { if (mdfd >= 0) {
if (Manage_runstop(name, mdfd, -1, quiet?1:last?0:-1)) if (Manage_runstop(name, mdfd, -1, quiet?1:last?0:-1))
err = 1; err = 1;
@ -1279,7 +1280,7 @@ int main(int argc, char *argv[])
case Waitclean: case Waitclean:
rv |= WaitClean(dv->devname, verbose-quiet); continue; rv |= WaitClean(dv->devname, verbose-quiet); continue;
} }
mdfd = create_mddev(dv->devname, 1); mdfd = open_mddev(dv->devname, 1);
if (mdfd>=0) { if (mdfd>=0) {
switch(dv->disposition) { switch(dv->disposition) {
case 'R': case 'R':

View File

@ -802,6 +802,7 @@ extern char *get_md_name(int dev);
extern char DefaultConfFile[]; extern char DefaultConfFile[];
extern int create_mddev(char *dev, int autof); 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, extern int create_mddev_devnum(char *devname, int devnum, char *name,
char *chosen_name, int parts); char *chosen_name, int parts);
extern int open_container(int fd); extern int open_container(int fd);

View File

@ -254,15 +254,30 @@ int create_mddev(char *dev, int autof)
make_parts(dev,parts, ci->symlinks); make_parts(dev,parts, ci->symlinks);
} }
} }
mdfd = open(dev, O_RDWR); mdfd = open_mddev(dev, 1);
if (mdfd < 0) return mdfd;
fprintf(stderr, Name ": error opening %s: %s\n", }
dev, strerror(errno));
else if (md_get_version(mdfd) <= 0) { /* Open this and check that it is an md device.
fprintf(stderr, Name ": %s does not appear to be an md device\n", * On success, return filedescriptor.
dev); * 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); 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; return mdfd;
} }