diff options
author | Qu Wenruo <wqu@suse.com> | 2023-11-16 15:49:06 +1030 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2023-12-15 20:27:03 +0100 |
commit | 397239ed6a6c88b002fbba0b25ed5a719c578c2f (patch) | |
tree | ac99eeb41e8b9cc942a88720bb35b69dd3f8806f /fs/btrfs/extent_io.h | |
parent | 3ba2d3648f9dcd6af6326352bb2775e8b31372e0 (diff) |
btrfs: allow extent buffer helpers to skip cross-page handling
Currently btrfs extent buffer helpers are doing all the cross-page
handling, as there is no guarantee that all those eb pages are
contiguous.
However on systems with enough memory, there is a very high chance the
page cache for btree_inode are allocated with physically contiguous
pages.
In that case, we can skip all the complex cross-page handling, thus
speeding up the code.
This patch adds a new member, extent_buffer::addr, which is only set to
non-NULL if all the extent buffer pages are physically contiguous.
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/extent_io.h')
-rw-r--r-- | fs/btrfs/extent_io.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h index 021040b3117e..c2c6bfba63c0 100644 --- a/fs/btrfs/extent_io.h +++ b/fs/btrfs/extent_io.h @@ -78,6 +78,13 @@ struct extent_buffer { unsigned long len; unsigned long bflags; struct btrfs_fs_info *fs_info; + + /* + * The address where the eb can be accessed without any cross-page handling. + * This can be NULL if not possible. + */ + void *addr; + spinlock_t refs_lock; atomic_t refs; int read_mirror; |