diff --git a/bitmap.c b/bitmap.c index 3653660..e38cb96 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;