35 lines
1.1 KiB
Diff
35 lines
1.1 KiB
Diff
From: Chengyu Song <csong84@gatech.edu>
|
|
Date: Tue, 24 Mar 2015 18:12:56 -0400
|
|
Subject: [PATCH] btrfs: incorrect handling for fiemap_fill_next_extent return
|
|
|
|
fiemap_fill_next_extent returns 0 on success, -errno on error, 1 if this was
|
|
the last extent that will fit in user array. If 1 is returned, the return
|
|
value may eventually returned to user space, which should not happen, according
|
|
to manpage of ioctl.
|
|
|
|
Signed-off-by: Chengyu Song <csong84@gatech.edu>
|
|
Reviewed-by: David Sterba <dsterba@suse.cz>
|
|
Reviewed-by: Liu Bo <bo.li.liu@oracle.com>
|
|
Signed-off-by: Chris Mason <clm@fb.com>
|
|
---
|
|
fs/btrfs/extent_io.c | 5 ++++-
|
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
|
|
index d688cfe5d496..782f3bc4651d 100644
|
|
--- a/fs/btrfs/extent_io.c
|
|
+++ b/fs/btrfs/extent_io.c
|
|
@@ -4514,8 +4514,11 @@ int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
|
|
}
|
|
ret = fiemap_fill_next_extent(fieinfo, em_start, disko,
|
|
em_len, flags);
|
|
- if (ret)
|
|
+ if (ret) {
|
|
+ if (ret == 1)
|
|
+ ret = 0;
|
|
goto out_free;
|
|
+ }
|
|
}
|
|
out_free:
|
|
free_extent_map(em);
|