diff options
author | Zhilong Liu <zlliu@suse.com> | 2017-08-28 11:24:27 +0200 |
---|---|---|
committer | Jes Sorensen <jsorensen@fb.com> | 2017-09-01 17:19:58 +0200 |
commit | 8cc56e8b3269305ec5483527d853464eac3bf690 (patch) | |
tree | 4f8ec71d25d40ca2478fb07e36016e3432e04074 | |
parent | mdadm: set journal_clean after scanning all disks (diff) | |
download | mdadm-8cc56e8b3269305ec5483527d853464eac3bf690.tar.xz mdadm-8cc56e8b3269305ec5483527d853464eac3bf690.zip |
mdadm/bitmap: examine-bitmap failed when bitmap is external mode
--examine-bitmap: the bitmap_file_open() shouldn't omit the
regular file descriptor when the bitmap is external mode.
Such as: ./mdadm -X /mnt/3
This commit is partial revert of commit 0a6bff09d416
(mdadm/util: unify fstat checking blkdev into function)
Signed-off-by: Zhilong Liu <zlliu@suse.com>
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
-rw-r--r-- | bitmap.c | 12 |
1 files changed, 7 insertions, 5 deletions
@@ -183,6 +183,7 @@ static int bitmap_file_open(char *filename, struct supertype **stp, int node_num) { int fd; + struct stat stb; struct supertype *st = *stp; fd = open(filename, O_RDONLY|O_DIRECT); @@ -192,7 +193,12 @@ bitmap_file_open(char *filename, struct supertype **stp, int node_num) return -1; } - if (fstat_is_blkdev(fd, filename, NULL)) { + if (fstat(fd, &stb) < 0) { + pr_err("fstat failed for %s: %s\n", filename, strerror(errno)); + close(fd); + return -1; + } + if ((stb.st_mode & S_IFMT) == S_IFBLK) { /* block device, so we are probably after an internal bitmap */ if (!st) st = guess_super(fd); @@ -211,11 +217,7 @@ bitmap_file_open(char *filename, struct supertype **stp, int node_num) fd = -1; } } - *stp = st; - } else { - close(fd); - return -1; } return fd; |