From 6be1d39d1dafce71c9c7f5bc74ef3fbd30e3765e Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Tue, 4 Nov 2008 10:35:31 +1100 Subject: [PATCH] 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 --- mdadm.c | 9 +++++---- mdadm.h | 1 + mdopen.c | 31 +++++++++++++++++++++++-------- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/mdadm.c b/mdadm.c index fb52b14..b33f605 100644 --- a/mdadm.c +++ b/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': diff --git a/mdadm.h b/mdadm.h index 8527bbb..7b7e233 100644 --- a/mdadm.h +++ b/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); diff --git a/mdopen.c b/mdopen.c index 5156835..285d811 100644 --- a/mdopen.c +++ b/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; }