diff options
author | Doug Ledford <dledford@redhat.com> | 2010-04-16 15:39:55 -0400 |
---|---|---|
committer | Doug Ledford <dledford@redhat.com> | 2010-04-16 15:39:55 -0400 |
commit | 9db26c40123bbdeabac7ec39b327cd09d7770e9a (patch) | |
tree | cf43fe8927f336dd3d2cc5bc0d3362d24e11d56c | |
parent | f907ef185bc01d277086aeab2c10c4f2c818815e (diff) | |
download | mdadm-9db26c40123bbdeabac7ec39b327cd09d7770e9a.tar.gz mdadm-9db26c40123bbdeabac7ec39b327cd09d7770e9a.tar.xz mdadm-9db26c40123bbdeabac7ec39b327cd09d7770e9a.zip |
The new dev_open_check() will be more useable if we pass back the
stat buffer instead of making callers do a second stat if they need
something from the stat buffer
Signed-off-by: Doug Ledford <dledford@redhat.com>
-rw-r--r-- | Incremental.c | 6 | ||||
-rw-r--r-- | mdadm.h | 2 | ||||
-rw-r--r-- | util.c | 7 |
3 files changed, 8 insertions, 7 deletions
diff --git a/Incremental.c b/Incremental.c index ad6be86..134c4a0 100644 --- a/Incremental.c +++ b/Incremental.c @@ -897,6 +897,7 @@ static int IncrementalNewPart(char *devname, int verbose, int export, { struct mdstat_ent *mdstat, *md; struct domain_ent *domain; + struct stat stb; int dfd; mdstat = arrays_in_domain(devname, domain); @@ -906,7 +907,7 @@ static int IncrementalNewPart(char *devname, int verbose, int export, * out without touching actual physical media, now we need to start * the slower checks. */ - dfd = dev_open_check(devname, O_RDONLY|O_EXCL); + dfd = dev_open_check(devname, O_RDONLY|O_EXCL, &stb); if (dfd < 0) return 1; if (guess_super(dfd) != NULL) { @@ -942,9 +943,10 @@ static int IncrementalNewDisk(char *devname, int verbose, int export, { struct mdstat_ent *mdstat, *md; struct domain_ent *domain; + struct stat stb; int dfd; - dfd = dev_open_check(devname, O_RDONLY|O_EXCL); + dfd = dev_open_check(devname, O_RDONLY|O_EXCL, &stb); if (dfd < 0) return 1; if (guess_super(dfd) != NULL) { @@ -897,7 +897,7 @@ extern int check_partitions(int fd, char *dname, unsigned long long freesize); extern int get_mdp_major(void); extern int dev_open(char *dev, int flags); -extern int dev_open_check(char *dev, int flags); +extern int dev_open_check(char *dev, int flags, struct stat *stb); extern int open_dev(int devnum); extern int open_dev_excl(int devnum); extern int is_standard(char *dev, int *nump); @@ -950,10 +950,9 @@ int dev_open(char *dev, int flags) return fd; } -int dev_open_check(char *devname, int flags) +int dev_open_check(char *devname, int flags, struct stat *stb) { int dfd; - struct stat stb; dfd = dev_open(devname, flags); if (dfd < 0) { @@ -961,13 +960,13 @@ int dev_open_check(char *devname, int flags) devname, strerror(errno)); return -1; } - if (fstat(dfd, &stb) < 0) { + if (fstat(dfd, stb) < 0) { fprintf(stderr, Name ": fstat failed on %s: %s.\n", devname, strerror(errno)); close(dfd); return -1; } - if ((stb.st_mode & S_IFMT) != S_IFBLK) { + if ((stb->st_mode & S_IFMT) != S_IFBLK) { fprintf(stderr, Name ": %s is not a block device.\n", devname); close(dfd); return -1; |