]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
btrfs: update num_extent_pages to support subpage sized extent buffer
authorQu Wenruo <wqu@suse.com>
Wed, 2 Dec 2020 06:48:03 +0000 (14:48 +0800)
committerDavid Sterba <dsterba@suse.com>
Wed, 9 Dec 2020 18:16:10 +0000 (19:16 +0100)
For subpage sized extent buffer, we have ensured no extent buffer will
cross page boundary, thus we would only need one page for any extent
buffer.

Update function num_extent_pages to handle such case.  Now
num_extent_pages() returns 1 for subpage sized extent buffer.

Reviewed-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent_io.h

index 77f2211550e3b7136768c739795a8cf021e700dc..19221095c63588c2c20a4620ea57a12b23a2179b 100644 (file)
@@ -203,8 +203,14 @@ void btrfs_readahead_node_child(struct extent_buffer *node, int slot);
 
 static inline int num_extent_pages(const struct extent_buffer *eb)
 {
-       return (round_up(eb->start + eb->len, PAGE_SIZE) >> PAGE_SHIFT) -
-              (eb->start >> PAGE_SHIFT);
+       /*
+        * For sectorsize == PAGE_SIZE case, since nodesize is always aligned to
+        * sectorsize, it's just eb->len >> PAGE_SHIFT.
+        *
+        * For sectorsize < PAGE_SIZE case, we could have nodesize < PAGE_SIZE,
+        * thus have to ensure we get at least one page.
+        */
+       return (eb->len >> PAGE_SHIFT) ?: 1;
 }
 
 static inline int extent_buffer_uptodate(const struct extent_buffer *eb)