From: Qu Wenruo <wqu@suse.com>
To: linux-btrfs@vger.kernel.org
Subject: [PATCH v5 0/3] btrfs: more explaination on extent_map members
Date: Tue, 16 Apr 2024 09:05:37 +0930 [thread overview]
Message-ID: <cover.1713224013.git.wqu@suse.com> (raw)
[REPO]
https://github.com/adam900710/linux.git/ em_cleanup
The first 3 patches only. As later patches are the huge rename part.
[CHANGELOG]
v5:
- Update the comment on extent map merging part
v4:
- Add extra comments for the extent map merging
Since extent maps can be merged, the members are only matching
on-disk file extent items before merging.
This also means users of extent_map should not rely on it for
a reliable file extent item member.
(That's also why we use ordered_extent not extent_maps, to update
file extent items)
v3:
- Rebased to latest for-next branch
- Further comments polishment
- Coding style update to follow the guideline
v2:
- Add Filipe's cleanup on mod_start/mod_len
These two members are no longer utilized, saving me quite some time on
digging into their usage.
- Update the comments of the extent_map structure
To make them more readable and less confusing.
- Further cleanup for inline extent_map reading
- A new patch to do extra sanity checks for create_io_em()
Firstly pure NOCOW writes should not call create_io_em(), secondly
with the new knowledge of extent_map, it's easier to do extra sanity
checks for the already pretty long parameter list.
Btrfs uses extent_map to represent a in-memory file extent.
There are severam members that are 1:1 mappe in on-disk file extent
items and extent maps:
- extent_map::start == key.offset
- extent_map::len == file_extent_num_bytes
- extent_map::ram_bytes == file_extent_ram_bytes
But that's all, the remaining are pretty different:
- Use block_start to indicate holes/inline extents
Meanwhile btrfs on-disk file extent items go with a dedicated type for
inline extents, and disk_bytenr 0 for holes.
- Weird block_start/orig_block_len/orig_start
In theory we can directly go with the same file_extent_disk_bytenr,
file_extent_disk_num_bytes and file_extent_offset to calculate the
remaining members (block_start/orig_start/orig_block_len/block_len).
But for whatever reason, we didn't go that path and have a hell of
weird and inconsistent calculation for them.
Qu Wenruo (3):
btrfs: add extra comments on extent_map members
btrfs: simplify the inline extent map creation
btrfs: add extra sanity checks for create_io_em()
fs/btrfs/extent_map.h | 56 ++++++++++++++++++++++++++++++++++++++++++-
fs/btrfs/file-item.c | 20 ++++++++--------
fs/btrfs/inode.c | 40 ++++++++++++++++++++++++++++++-
3 files changed, 104 insertions(+), 12 deletions(-)
--
2.44.0
next reply other threads:[~2024-04-15 23:36 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-15 23:35 Qu Wenruo [this message]
2024-04-15 23:35 ` [PATCH v5 1/3] btrfs: add extra comments on extent_map members Qu Wenruo
2024-04-15 23:35 ` [PATCH v5 2/3] btrfs: simplify the inline extent map creation Qu Wenruo
2024-04-15 23:35 ` [PATCH v5 3/3] btrfs: add extra sanity checks for create_io_em() Qu Wenruo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1713224013.git.wqu@suse.com \
--to=wqu@suse.com \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.