For subpage metadata, we don't use page locking at all.
So just skip the page locking part for subpage.

All the remaining routine can be reused.

Signed-off-by: Qu Wenruo <w...@suse.com>
---
 fs/btrfs/extent_io.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index 9567e7b2b6cf..db40bc701a03 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -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.
+        * 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);
-- 
2.31.1

Reply via email to