X-Git-Url: http://git.samba.org/samba.git/?a=blobdiff_plain;f=fs%2Fbtrfs%2Fbackref.c;fp=fs%2Fbtrfs%2Fbackref.c;h=d385357e19b6136772117b5a987f55fe89e71eb3;hb=e3059ec06b9f1a96826cc2bb6ed131aac0942446;hp=e62f142fd3e5702ca6096f9a7ea160c450a76c54;hpb=875d1daa7bc683821a4209e1c6aab24909e95217;p=sfrench%2Fcifs-2.6.git diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index e62f142fd3e5..d385357e19b6 100644 --- a/fs/btrfs/backref.c +++ b/fs/btrfs/backref.c @@ -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; }