]> git.baikalelectronics.ru Git - kernel.git/commit
btrfs: zoned: deal with holes writing out tree-log pages
authorNaohiro Aota <naohiro.aota@wdc.com>
Fri, 5 Feb 2021 14:58:36 +0000 (23:58 +0900)
committerDavid Sterba <dsterba@suse.com>
Tue, 9 Feb 2021 01:52:24 +0000 (02:52 +0100)
commit4fb7ecfee5bcbc833d905434c8cf2fa353710e5a
treed72e78acac82d542aa1de05db6a36f9b5181ec00
parentfa7461fdaa6d81ecd0e4052ed5dd58c9dacf65bf
btrfs: zoned: deal with holes writing out tree-log pages

Since the zoned filesystem requires sequential write out of metadata, we
cannot proceed with a hole in tree-log pages. When such a hole exists,
btree_write_cache_pages() will return -EAGAIN. This happens when someone,
e.g., a concurrent transaction commit, writes a dirty extent in this
tree-log commit.

If we are not going to wait for the extents, we can hope the concurrent
writing fills the hole for us. So, we can ignore the error in this case and
hope the next write will succeed.

If we want to wait for them and got the error, we cannot wait for them
because it will cause a deadlock. So, let's bail out to a full commit in
this case.

Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/tree-log.c