btrfs: make lock_extent_buffer_for_io() to be subpage compatible
authorQu Wenruo <wqu@suse.com>
Tue, 6 Apr 2021 00:36:02 +0000 (08:36 +0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 19 Apr 2021 15:25:22 +0000 (17:25 +0200)
For subpage metadata, we don't use page locking at all.  So just skip
the page locking part for subpage.  The rest of the function can be
reused.

Signed-off-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent_io.c

index e0713b0..396ba23 100644 (file)
@@ -3967,7 +3967,13 @@ static noinline_for_stack int lock_extent_buffer_for_io(struct extent_buffer *eb
 
        btrfs_tree_unlock(eb);
 
-       if (!ret)
+       /*
+        * Either we don't need to submit any tree block, or we're submitting
+        * subpage eb.
+        * Subpage metadata doesn't use page locking at all, so we can skip
+        * the page locking.
+        */
+       if (!ret || fs_info->sectorsize < PAGE_SIZE)
                return ret;
 
        num_pages = num_extent_pages(eb);