diff options
author | Song Liu <songliubraving@fb.com> | 2020-12-09 11:44:42 -0800 |
---|---|---|
committer | Song Liu <songliubraving@fb.com> | 2020-12-09 20:46:01 -0800 |
commit | 57a0f3a81ef21fe51d6223aa78a1a890098d4ada (patch) | |
tree | 50aa998b4c268af70691699bf8fed1c4e2168670 /drivers/md/raid0.c | |
parent | 17c28c2a068730e9d065a0e4ed03beed074d8997 (diff) | |
download | linux-stable-57a0f3a81ef21fe51d6223aa78a1a890098d4ada.tar.gz linux-stable-57a0f3a81ef21fe51d6223aa78a1a890098d4ada.tar.bz2 linux-stable-57a0f3a81ef21fe51d6223aa78a1a890098d4ada.zip |
Revert "md: add md_submit_discard_bio() for submitting discard bio"
This reverts commit 2628089b74d5a64bd0bcb5d247a18f78d7b6f4d0.
Matthew Ruffell reported data corruption in raid10 due to the changes
in discard handling [1]. Revert these changes before we find a proper fix.
[1] https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1907262/
Cc: Matthew Ruffell <matthew.ruffell@canonical.com>
Cc: Xiao Ni <xni@redhat.com>
Signed-off-by: Song Liu <songliubraving@fb.com>
Diffstat (limited to 'drivers/md/raid0.c')
-rw-r--r-- | drivers/md/raid0.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c index 6f44177593a5..35843df15b5e 100644 --- a/drivers/md/raid0.c +++ b/drivers/md/raid0.c @@ -477,6 +477,7 @@ static void raid0_handle_discard(struct mddev *mddev, struct bio *bio) for (disk = 0; disk < zone->nb_dev; disk++) { sector_t dev_start, dev_end; + struct bio *discard_bio = NULL; struct md_rdev *rdev; if (disk < start_disk_index) @@ -499,9 +500,18 @@ static void raid0_handle_discard(struct mddev *mddev, struct bio *bio) rdev = conf->devlist[(zone - conf->strip_zone) * conf->strip_zone[0].nb_dev + disk]; - md_submit_discard_bio(mddev, rdev, bio, + if (__blkdev_issue_discard(rdev->bdev, dev_start + zone->dev_start + rdev->data_offset, - dev_end - dev_start); + dev_end - dev_start, GFP_NOIO, 0, &discard_bio) || + !discard_bio) + continue; + bio_chain(discard_bio, bio); + bio_clone_blkg_association(discard_bio, bio); + if (mddev->gendisk) + trace_block_bio_remap(bdev_get_queue(rdev->bdev), + discard_bio, disk_devt(mddev->gendisk), + bio->bi_iter.bi_sector); + submit_bio_noacct(discard_bio); } bio_endio(bio); } |