btrfs: sink iterator parameter to btrfs_ioctl_logical_to_ino
[sfrench/cifs-2.6.git] / fs / btrfs / backref.c
index e62f142fd3e5702ca6096f9a7ea160c450a76c54..d385357e19b6136772117b5a987f55fe89e71eb3 100644 (file)
@@ -2028,10 +2028,29 @@ out:
        return ret;
 }
 
+static int build_ino_list(u64 inum, u64 offset, u64 root, void *ctx)
+{
+       struct btrfs_data_container *inodes = ctx;
+       const size_t c = 3 * sizeof(u64);
+
+       if (inodes->bytes_left >= c) {
+               inodes->bytes_left -= c;
+               inodes->val[inodes->elem_cnt] = inum;
+               inodes->val[inodes->elem_cnt + 1] = offset;
+               inodes->val[inodes->elem_cnt + 2] = root;
+               inodes->elem_cnt += 3;
+       } else {
+               inodes->bytes_missing += c - inodes->bytes_left;
+               inodes->bytes_left = 0;
+               inodes->elem_missed += 3;
+       }
+
+       return 0;
+}
+
 int iterate_inodes_from_logical(u64 logical, struct btrfs_fs_info *fs_info,
                                struct btrfs_path *path,
-                               iterate_extent_inodes_t *iterate, void *ctx,
-                               bool ignore_offset)
+                               void *ctx, bool ignore_offset)
 {
        int ret;
        u64 extent_item_pos;
@@ -2049,7 +2068,7 @@ int iterate_inodes_from_logical(u64 logical, struct btrfs_fs_info *fs_info,
        extent_item_pos = logical - found_key.objectid;
        ret = iterate_extent_inodes(fs_info, found_key.objectid,
                                        extent_item_pos, search_commit_root,
-                                       iterate, ctx, ignore_offset);
+                                       build_ino_list, ctx, ignore_offset);
 
        return ret;
 }