Query: Handle error returned by fstat()
We shouldn't ignore any error returned by fstat() even if open() didn't fail. Signed-off-by: Jes Sorensen <jsorensen@fb.com>
This commit is contained in:
parent
776b199e41
commit
8d0cd09d73
19
Query.c
19
Query.c
|
@ -32,22 +32,21 @@ int Query(char *dev)
|
||||||
* whether it is an md device and whether it has
|
* whether it is an md device and whether it has
|
||||||
* a superblock
|
* a superblock
|
||||||
*/
|
*/
|
||||||
int fd = open(dev, O_RDONLY);
|
int fd;
|
||||||
int ioctlerr;
|
int ioctlerr, staterr;
|
||||||
int superror;
|
int superror;
|
||||||
struct mdinfo info;
|
struct mdinfo info;
|
||||||
mdu_array_info_t array;
|
mdu_array_info_t array;
|
||||||
struct supertype *st = NULL;
|
struct supertype *st = NULL;
|
||||||
|
|
||||||
unsigned long long larray_size;
|
unsigned long long larray_size;
|
||||||
struct stat stb;
|
struct stat stb;
|
||||||
char *mddev;
|
char *mddev;
|
||||||
mdu_disk_info_t disc;
|
mdu_disk_info_t disc;
|
||||||
char *activity;
|
char *activity;
|
||||||
|
|
||||||
|
fd = open(dev, O_RDONLY);
|
||||||
if (fd < 0){
|
if (fd < 0){
|
||||||
pr_err("cannot open %s: %s\n",
|
pr_err("cannot open %s: %s\n", dev, strerror(errno));
|
||||||
dev, strerror(errno));
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,9 +55,12 @@ int Query(char *dev)
|
||||||
else
|
else
|
||||||
ioctlerr = 0;
|
ioctlerr = 0;
|
||||||
|
|
||||||
fstat(fd, &stb);
|
if (fstat(fd, &stb) < 0)
|
||||||
|
staterr = errno;
|
||||||
|
else
|
||||||
|
staterr = 0;
|
||||||
|
|
||||||
if (!ioctlerr) {
|
if (!ioctlerr && !staterr) {
|
||||||
if (!get_dev_size(fd, NULL, &larray_size))
|
if (!get_dev_size(fd, NULL, &larray_size))
|
||||||
larray_size = 0;
|
larray_size = 0;
|
||||||
}
|
}
|
||||||
|
@ -68,6 +70,9 @@ int Query(char *dev)
|
||||||
else if (ioctlerr)
|
else if (ioctlerr)
|
||||||
printf("%s: is an md device, but gives \"%s\" when queried\n",
|
printf("%s: is an md device, but gives \"%s\" when queried\n",
|
||||||
dev, strerror(ioctlerr));
|
dev, strerror(ioctlerr));
|
||||||
|
else if (staterr)
|
||||||
|
printf("%s: is not a valid md device, returning %s\n",
|
||||||
|
dev, strerror(ioctlerr));
|
||||||
else {
|
else {
|
||||||
printf("%s: %s %s %d devices, %d spare%s. Use mdadm --detail for more detail.\n",
|
printf("%s: %s %s %d devices, %d spare%s. Use mdadm --detail for more detail.\n",
|
||||||
dev,
|
dev,
|
||||||
|
|
Loading…
Reference in New Issue