aboutsummaryrefslogtreecommitdiff
path: root/fs/btrfs/backref.c
diff options
context:
space:
mode:
authorGravatar Boris Burkov <boris@bur.io> 2023-01-30 14:45:55 -0800
committerGravatar David Sterba <dsterba@suse.com> 2023-10-12 16:44:11 +0200
commitd9a620f77e33f2b0e9a5f131f3ee3c66d3285c57 (patch)
tree58c86124cd45a5777de063a8efa5b5cd08454302 /fs/btrfs/backref.c
parentbtrfs: track original extent owner in head_ref (diff)
downloadlinux-d9a620f77e33f2b0e9a5f131f3ee3c66d3285c57.tar.gz
linux-d9a620f77e33f2b0e9a5f131f3ee3c66d3285c57.tar.bz2
linux-d9a620f77e33f2b0e9a5f131f3ee3c66d3285c57.zip
btrfs: new inline ref storing owning subvol of data extents
In order to implement simple quota groups, we need to be able to associate a data extent with the subvolume that created it. Once you account for reflink, this information cannot be recovered without explicitly storing it. Options for storing it are: - a new key/item - a new extent inline ref item The former is backwards compatible, but wastes space, the latter is incompat, but is efficient in space and reuses the existing inline ref machinery, while only abusing it a tiny amount -- specifically, the new item is not a ref, per-se. Signed-off-by: Boris Burkov <boris@bur.io> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/backref.c')
-rw-r--r--fs/btrfs/backref.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c
index b7d54efb4728..0cde873bdee2 100644
--- a/fs/btrfs/backref.c
+++ b/fs/btrfs/backref.c
@@ -1129,6 +1129,9 @@ static int add_inline_refs(struct btrfs_backref_walk_ctx *ctx,
count, sc, GFP_NOFS);
break;
}
+ case BTRFS_EXTENT_OWNER_REF_KEY:
+ ASSERT(btrfs_fs_incompat(ctx->fs_info, SIMPLE_QUOTA));
+ break;
default:
WARN_ON(1);
}