Given extents:
[21057146519552,21057146535936)
[21057146552320,21057146568704)

and trying to map 21057146535936 we would find 21057146519552
which would give us extent with length of 0 because

> real_logical = max(logical, cur_logical); // logical (21057146535936)
> real_len = min(logical + bytes, cur_logical + cur_len) -
> real_logical;
// cur_logical (21057146519552) + cur_len (16384) -
// real_logical (21057146535936) = 0

So we need to break before this

Signed-off-by: Dāvis Mosāns <davis...@gmail.com>
---
 btrfs-map-logical.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/btrfs-map-logical.c b/btrfs-map-logical.c
index 24c81b8d..a2030f96 100644
--- a/btrfs-map-logical.c
+++ b/btrfs-map-logical.c
@@ -327,17 +327,18 @@ int main(int argc, char **argv)
                u64 real_logical;
                u64 real_len;
 
-               found = 1;
                ret = map_one_extent(root->fs_info, &cur_logical, &cur_len, 1);
                if (ret < 0)
                        goto out_close_fd;
                if (ret > 0)
                        break;
                /* check again if there is overlap. */
-               if (cur_logical + cur_len < logical ||
+               if (cur_logical + cur_len <= logical ||
                    cur_logical >= logical + bytes)
                        break;
 
+               found = 1;
+
                real_logical = max(logical, cur_logical);
                real_len = min(logical + bytes, cur_logical + cur_len) -
                           real_logical;
-- 
2.30.2

Reply via email to