You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.7 KiB
73 lines
1.7 KiB
6 years ago
|
From 8d0cd09d73a9a9d57ee73b7a79114e881dad1507 Mon Sep 17 00:00:00 2001
|
||
|
From: Jes Sorensen <jsorensen@fb.com>
|
||
|
Date: Thu, 13 Apr 2017 11:53:21 -0400
|
||
|
Subject: [RHEL7.5 PATCH 079/169] 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>
|
||
|
---
|
||
|
Query.c | 19 ++++++++++++-------
|
||
|
1 file changed, 12 insertions(+), 7 deletions(-)
|
||
|
|
||
|
diff --git a/Query.c b/Query.c
|
||
|
index bea273f..0d18da4 100644
|
||
|
--- a/Query.c
|
||
|
+++ b/Query.c
|
||
|
@@ -32,22 +32,21 @@ int Query(char *dev)
|
||
|
* whether it is an md device and whether it has
|
||
|
* a superblock
|
||
|
*/
|
||
|
- int fd = open(dev, O_RDONLY);
|
||
|
- int ioctlerr;
|
||
|
+ int fd;
|
||
|
+ int ioctlerr, staterr;
|
||
|
int superror;
|
||
|
struct mdinfo info;
|
||
|
mdu_array_info_t array;
|
||
|
struct supertype *st = NULL;
|
||
|
-
|
||
|
unsigned long long larray_size;
|
||
|
struct stat stb;
|
||
|
char *mddev;
|
||
|
mdu_disk_info_t disc;
|
||
|
char *activity;
|
||
|
|
||
|
+ fd = open(dev, O_RDONLY);
|
||
|
if (fd < 0){
|
||
|
- pr_err("cannot open %s: %s\n",
|
||
|
- dev, strerror(errno));
|
||
|
+ pr_err("cannot open %s: %s\n", dev, strerror(errno));
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
@@ -56,9 +55,12 @@ int Query(char *dev)
|
||
|
else
|
||
|
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))
|
||
|
larray_size = 0;
|
||
|
}
|
||
|
@@ -68,6 +70,9 @@ int Query(char *dev)
|
||
|
else if (ioctlerr)
|
||
|
printf("%s: is an md device, but gives \"%s\" when queried\n",
|
||
|
dev, strerror(ioctlerr));
|
||
|
+ else if (staterr)
|
||
|
+ printf("%s: is not a valid md device, returning %s\n",
|
||
|
+ dev, strerror(ioctlerr));
|
||
|
else {
|
||
|
printf("%s: %s %s %d devices, %d spare%s. Use mdadm --detail for more detail.\n",
|
||
|
dev,
|
||
|
--
|
||
|
2.7.4
|
||
|
|