summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDoug Ledford <dledford@redhat.com>2010-04-16 15:39:55 -0400
committerDoug Ledford <dledford@redhat.com>2010-04-16 15:39:55 -0400
commit9db26c40123bbdeabac7ec39b327cd09d7770e9a (patch)
treecf43fe8927f336dd3d2cc5bc0d3362d24e11d56c
parentf907ef185bc01d277086aeab2c10c4f2c818815e (diff)
downloadmdadm-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.c6
-rw-r--r--mdadm.h2
-rw-r--r--util.c7
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) {
diff --git a/mdadm.h b/mdadm.h
index a11cfa8..30449e1 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -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);
diff --git a/util.c b/util.c
index dedb9db..02535d2 100644
--- a/util.c
+++ b/util.c
@@ -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;