btrfs-progs: check: introduce traversal function for fsck
[platform/upstream/btrfs-progs.git] / btrfs-map-logical.c
index 152b141..f421a50 100644 (file)
@@ -81,7 +81,7 @@ again:
        }
        logical = key.objectid;
        if (key.type == BTRFS_METADATA_ITEM_KEY)
-               len = fs_info->tree_root->leafsize;
+               len = fs_info->tree_root->nodesize;
        else
                len = key.offset;
 
@@ -248,8 +248,7 @@ int main(int argc, char **argv)
                }
        }
        set_argv0(argv);
-       argc = argc - optind;
-       if (check_argc_min(argc, 1))
+       if (check_argc_min(argc - optind, 1))
                print_usage();
        if (logical == 0)
                print_usage();
@@ -330,6 +329,11 @@ int main(int argc, char **argv)
                        goto out_close_fd;
                if (ret > 0)
                        break;
+               /* check again if there is overlap. */
+               if (cur_logical + cur_len < logical ||
+                   cur_logical >= logical + bytes)
+                       break;
+
                real_logical = max(logical, cur_logical);
                real_len = min(logical + bytes, cur_logical + cur_len) -
                           real_logical;