summaryrefslogtreecommitdiff
path: root/lib/extent-map.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/extent-map.c')
-rw-r--r--lib/extent-map.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/extent-map.c b/lib/extent-map.c
index ab9cfb0..42071c6 100644
--- a/lib/extent-map.c
+++ b/lib/extent-map.c
@@ -25,7 +25,13 @@ int fiemap(int fd, uint32_t flags, int (*handle_extent)(struct fiemap_extent)) {
if (ioctl(fd, FS_IOC_FIEMAP, fm) < 0)
return -errno;
- for (size_t i = 0; i < fm->fm_extent_count; i++) {
+ if (fm->fm_mapped_extents == 0) {
+ if (bytes_mapped != 0)
+ error(EXIT_FAILURE, 0, "FS_IOC_FIEMAP is misbehaving");
+ return EXIT_SUCCESS;
+ }
+
+ for (size_t i = 0; i < fm->fm_mapped_extents; i++) {
int r = handle_extent(fm->fm_extents[i]);
if (r) {
free(fm);