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);
}
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':

View File

@ -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);

View File

@ -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;
}