dm raid: fix false positive for requeue needed during reshape
authorMing Lei <ming.lei@redhat.com>
Mon, 11 Mar 2024 17:42:55 +0000 (13:42 -0400)
committerMike Snitzer <snitzer@kernel.org>
Tue, 12 Mar 2024 13:27:42 +0000 (09:27 -0400)
An empty flush doesn't have a payload, so it should never be looked at
when considering to possibly requeue a bio for the case when a reshape
is in progress.

Fixes: 9dbd1aa3a81c ("dm raid: add reshaping support to the target")
Reported-by: Patrick Plenefisch <simonpatp@gmail.com>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
drivers/md/dm-raid.c

index 6bb1765be1e55a6725c8e23c0051a980dd2b0c0e..b3c8920fe723134824393c90a3a7840fca83dc2d 100644 (file)
@@ -3329,14 +3329,14 @@ static int raid_map(struct dm_target *ti, struct bio *bio)
        struct mddev *mddev = &rs->md;
 
        /*
-        * If we're reshaping to add disk(s)), ti->len and
+        * If we're reshaping to add disk(s), ti->len and
         * mddev->array_sectors will differ during the process
         * (ti->len > mddev->array_sectors), so we have to requeue
         * bios with addresses > mddev->array_sectors here or
         * there will occur accesses past EOD of the component
         * data images thus erroring the raid set.
         */
-       if (unlikely(bio_end_sector(bio) > mddev->array_sectors))
+       if (unlikely(bio_has_data(bio) && bio_end_sector(bio) > mddev->array_sectors))
                return DM_MAPIO_REQUEUE;
 
        md_handle_request(mddev, bio);