From 8cc56e8b3269305ec5483527d853464eac3bf690 Mon Sep 17 00:00:00 2001 From: Zhilong Liu Date: Mon, 28 Aug 2017 17:24:27 +0800 Subject: [PATCH] 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 Signed-off-by: Jes Sorensen --- bitmap.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/bitmap.c b/bitmap.c index 36536600..e38cb965 100644 --- a/bitmap.c +++ b/bitmap.c @@ -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; -- 2.39.2