From: Daniel Vacek <neelx@suse.com>
To: Chris Mason <clm@fb.com>, Josef Bacik <josef@toxicpanda.com>,
David Sterba <dsterba@suse.com>
Cc: Daniel Vacek <neelx@suse.com>,
linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH v7 3/6] btrfs: add orig_logical to btrfs_bio
Date: Tue, 18 Nov 2025 17:08:40 +0100 [thread overview]
Message-ID: <20251118160845.3006733-4-neelx@suse.com> (raw)
In-Reply-To: <20251118160845.3006733-1-neelx@suse.com>
From: Josef Bacik <josef@toxicpanda.com>
When checksumming the encrypted bio on writes we need to know which
logical address this checksum is for. At the point where we get the
encrypted bio the bi_sector is the physical location on the target disk,
so we need to save the original logical offset in the btrfs_bio. Then
we can use this when csum'ing the bio instead of the
bio->iter.bi_sector.
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
---
fs/btrfs/bio.c | 10 ++++++++++
fs/btrfs/bio.h | 2 ++
fs/btrfs/file-item.c | 2 +-
3 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/fs/btrfs/bio.c b/fs/btrfs/bio.c
index 1b38e3ee0a33..4a7bef895b97 100644
--- a/fs/btrfs/bio.c
+++ b/fs/btrfs/bio.c
@@ -94,6 +94,8 @@ static struct btrfs_bio *btrfs_split_bio(struct btrfs_fs_info *fs_info,
if (bbio_has_ordered_extent(bbio)) {
refcount_inc(&orig_bbio->ordered->refs);
bbio->ordered = orig_bbio->ordered;
+ bbio->orig_logical = orig_bbio->orig_logical;
+ orig_bbio->orig_logical += map_length;
}
bbio->csum_search_commit_root = orig_bbio->csum_search_commit_root;
atomic_inc(&orig_bbio->pending_ios);
@@ -765,6 +767,14 @@ static bool btrfs_submit_chunk(struct btrfs_bio *bbio, int mirror_num)
goto end_bbio;
}
+ /*
+ * For fscrypt writes we will get the encrypted bio after we've
+ * remapped our bio to the physical disk location, so we need to
+ * save the original bytenr so we know what we're checksumming.
+ */
+ if (bio_op(bio) == REQ_OP_WRITE && is_data_bbio(bbio))
+ bbio->orig_logical = logical;
+
map_length = min(map_length, length);
if (use_append)
map_length = btrfs_append_map_length(bbio, map_length);
diff --git a/fs/btrfs/bio.h b/fs/btrfs/bio.h
index 035145909b00..56279b7f3b2a 100644
--- a/fs/btrfs/bio.h
+++ b/fs/btrfs/bio.h
@@ -52,6 +52,7 @@ struct btrfs_bio {
* - pointer to the checksums for this bio
* - original physical address from the allocator
* (for zone append only)
+ * - original logical address, used for checksumming fscrypt bios.
*/
struct {
struct btrfs_ordered_extent *ordered;
@@ -60,6 +61,7 @@ struct btrfs_bio {
struct completion csum_done;
struct bvec_iter csum_saved_iter;
u64 orig_physical;
+ u64 orig_logical;
};
/* For metadata reads: parentness verification. */
diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c
index b17632ea085f..14e5257f0f04 100644
--- a/fs/btrfs/file-item.c
+++ b/fs/btrfs/file-item.c
@@ -824,7 +824,7 @@ int btrfs_csum_one_bio(struct btrfs_bio *bbio, bool async)
if (!sums)
return -ENOMEM;
- sums->logical = bio->bi_iter.bi_sector << SECTOR_SHIFT;
+ sums->logical = bbio->orig_logical;
sums->len = bio->bi_iter.bi_size;
INIT_LIST_HEAD(&sums->list);
bbio->sums = sums;
--
2.51.0
next prev parent reply other threads:[~2025-11-18 16:09 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-18 16:08 [PATCH v8 0/6] btrfs: add fscrypt support, PART 1 Daniel Vacek
2025-11-18 16:08 ` [PATCH v7 1/6] btrfs: disable various operations on encrypted inodes Daniel Vacek
2025-11-18 16:08 ` [PATCH v7 2/6] btrfs: disable verity " Daniel Vacek
2025-11-18 16:08 ` Daniel Vacek [this message]
2025-11-18 16:08 ` [PATCH v7 4/6] btrfs: don't rewrite ret from inode_permission Daniel Vacek
2025-11-19 10:07 ` Johannes Thumshirn
2025-11-19 10:13 ` Johannes Thumshirn
2025-11-19 12:08 ` David Sterba
2025-11-18 16:08 ` [PATCH v7 5/6] btrfs: move inode_to_path higher in backref.c Daniel Vacek
2025-11-19 10:10 ` Johannes Thumshirn
2025-11-19 12:21 ` Filipe Manana
2025-11-19 12:49 ` David Sterba
2025-11-18 16:08 ` [PATCH v7 6/6] btrfs: don't search back for dir inode item in INO_LOOKUP_USER Daniel Vacek
2025-11-19 10:16 ` Johannes Thumshirn
2025-11-19 8:23 ` [PATCH v8 0/6] btrfs: add fscrypt support, PART 1 Christoph Hellwig
2025-11-19 8:59 ` David Sterba
2025-11-19 9:06 ` Christoph Hellwig
2025-11-19 11:16 ` David Sterba
2025-11-19 12:16 ` David Sterba
2025-11-19 14:09 ` Daniel Vacek
-- strict thread matches above, loose matches on Subject: below --
2025-11-18 16:00 [PATCH v7 0/7] " Daniel Vacek
2025-11-18 16:00 ` [PATCH v7 3/6] btrfs: add orig_logical to btrfs_bio Daniel Vacek
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=20251118160845.3006733-4-neelx@suse.com \
--to=neelx@suse.com \
--cc=clm@fb.com \
--cc=dsterba@suse.com \
--cc=josef@toxicpanda.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-kernel@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox