btrfs: improve comments around nocow path
run_delalloc_nocow contains numerous, somewhat subtle, checks when figuring out whether a particular extent should be CoW'ed or not. This patch explicitly states the assumptions those checks verify. As a result also document 2 of the more subtle checks in check_committed_ref as well. Signed-off-by: Nikolay Borisov <nborisov@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:

committed by
David Sterba

parent
3e024846d2
commit
a6bd9cd155
@@ -2357,16 +2357,19 @@ static noinline int check_committed_ref(struct btrfs_root *root,
|
||||
item_size = btrfs_item_size_nr(leaf, path->slots[0]);
|
||||
ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
|
||||
|
||||
/* If extent item has more than 1 inline ref then it's shared */
|
||||
if (item_size != sizeof(*ei) +
|
||||
btrfs_extent_inline_ref_size(BTRFS_EXTENT_DATA_REF_KEY))
|
||||
goto out;
|
||||
|
||||
/* If extent created before last snapshot => it's definitely shared */
|
||||
if (btrfs_extent_generation(leaf, ei) <=
|
||||
btrfs_root_last_snapshot(&root->root_item))
|
||||
goto out;
|
||||
|
||||
iref = (struct btrfs_extent_inline_ref *)(ei + 1);
|
||||
|
||||
/* If this extent has SHARED_DATA_REF then it's shared */
|
||||
type = btrfs_get_extent_inline_ref_type(leaf, iref, BTRFS_REF_TYPE_DATA);
|
||||
if (type != BTRFS_EXTENT_DATA_REF_KEY)
|
||||
goto out;
|
||||
|
Reference in New Issue
Block a user