bcachefs: Make sure bch2_read_extent obeys BCH_READ_MUST_CLONE
authorKent Overstreet <kent.overstreet@gmail.com>
Fri, 3 Jan 2020 21:03:10 +0000 (16:03 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:34 +0000 (17:08 -0400)
This fixes the bch2_read_retry_nodecode() path, we were resubmitting a
bio without properly reinitializing it.

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

index 1fab0bdcf9ae64ec5d1fb4a8d9d6a57d21479518..a419024ce039c004bfee73dd82154cf00e7fe167 100644 (file)
@@ -1981,7 +1981,7 @@ int __bch2_read_extent(struct bch_fs *c, struct bch_read_bio *orig,
                        goto hole;
 
                iter.bi_size    = pick.crc.compressed_size << 9;
-               goto noclone;
+               goto get_bio;
        }
 
        if (!(flags & BCH_READ_LAST_FRAGMENT) ||
@@ -2028,7 +2028,7 @@ int __bch2_read_extent(struct bch_fs *c, struct bch_read_bio *orig,
                pick.crc.live_size              = bvec_iter_sectors(iter);
                offset_into_extent              = 0;
        }
-
+get_bio:
        if (rbio) {
                /*
                 * promote already allocated bounce rbio:
@@ -2068,7 +2068,6 @@ int __bch2_read_extent(struct bch_fs *c, struct bch_read_bio *orig,
                rbio->bio.bi_iter = iter;
                rbio->split     = true;
        } else {
-noclone:
                rbio = orig;
                rbio->bio.bi_iter = iter;
                EBUG_ON(bio_flagged(&rbio->bio, BIO_CHAIN));