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)
commitb528f467132713a03984b0f9592073d75677c501
treed72e78acac82d542aa1de05db6a36f9b5181ec00
parent3ddebf27fcd3a910989c85a3bfc9085225038c5b
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