]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
bcachefs: Fix BCH_ERR_data_read_csum_err_maybe_userspace in retry path
authorKent Overstreet <kent.overstreet@linux.dev>
Tue, 11 Mar 2025 13:04:09 +0000 (09:04 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 16 Mar 2025 17:47:55 +0000 (13:47 -0400)
When we do a read to a buffer that's mapped into userspace, it's
possible to get a spurious checksum error if userspace was modified the
buffer at the same time.

When we retry those, they have to be bounced before we know definitively
whether we're reading corrupt data.

But the retry path propagates read flags differently, so needs special
handling.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/io_read.c

index 797c29bde9b68ea0325ef37f9a85d059f5a486a5..17bc413c27ba82e326fdf6c0eeede6ed2bc46ae0 100644 (file)
@@ -1291,6 +1291,9 @@ void __bch2_read(struct bch_fs *c, struct bch_read_bio *rbio,
                swap(bvec_iter.bi_size, bytes);
                bio_advance_iter(&rbio->bio, &bvec_iter, bytes);
 err:
+               if (ret == -BCH_ERR_data_read_retry_csum_err_maybe_userspace)
+                       flags |= BCH_READ_must_bounce;
+
                if (ret &&
                    !bch2_err_matches(ret, BCH_ERR_transaction_restart) &&
                    !bch2_err_matches(ret, BCH_ERR_data_read_retry))