Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4223a5b

Browse files
committed
Merge branch 'md-fixes' ofhttps://git.kernel.org/pub/scm/linux/kernel/git/song/md into block-5.10
Pull MD fixes from Song:"This is to fix raid10 data corruption [1] in 5.10-rc7."* 'md-fixes' ofhttps://git.kernel.org/pub/scm/linux/kernel/git/song/md: Revert "md: add md_submit_discard_bio() for submitting discard bio" Revert "md/raid10: extend r10bio devs to raid disks" Revert "md/raid10: pull codes that wait for blocked dev into one function" Revert "md/raid10: improve raid10 discard request" Revert "md/raid10: improve discard request for far layout" Revert "dm raid: remove unnecessary discard limits for raid10"
2 parents7e7986f +57a0f3a commit4223a5b

File tree

6 files changed

+80
-391
lines changed

6 files changed

+80
-391
lines changed

‎drivers/md/dm-raid.c‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3728,6 +3728,17 @@ static void raid_io_hints(struct dm_target *ti, struct queue_limits *limits)
37283728

37293729
blk_limits_io_min(limits,chunk_size_bytes);
37303730
blk_limits_io_opt(limits,chunk_size_bytes*mddev_data_stripes(rs));
3731+
3732+
/*
3733+
* RAID10 personality requires bio splitting,
3734+
* RAID0/1/4/5/6 don't and process large discard bios properly.
3735+
*/
3736+
if (rs_is_raid10(rs)) {
3737+
limits->discard_granularity=max(chunk_size_bytes,
3738+
limits->discard_granularity);
3739+
limits->max_discard_sectors=min_not_zero(rs->md.chunk_sectors,
3740+
limits->max_discard_sectors);
3741+
}
37313742
}
37323743

37333744
staticvoidraid_postsuspend(structdm_target*ti)

‎drivers/md/md.c‎

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8582,26 +8582,6 @@ void md_write_end(struct mddev *mddev)
85828582

85838583
EXPORT_SYMBOL(md_write_end);
85848584

8585-
/* This is used by raid0 and raid10 */
8586-
voidmd_submit_discard_bio(structmddev*mddev,structmd_rdev*rdev,
8587-
structbio*bio,sector_tstart,sector_tsize)
8588-
{
8589-
structbio*discard_bio=NULL;
8590-
8591-
if (__blkdev_issue_discard(rdev->bdev,start,size,
8592-
GFP_NOIO,0,&discard_bio)|| !discard_bio)
8593-
return;
8594-
8595-
bio_chain(discard_bio,bio);
8596-
bio_clone_blkg_association(discard_bio,bio);
8597-
if (mddev->gendisk)
8598-
trace_block_bio_remap(bdev_get_queue(rdev->bdev),
8599-
discard_bio,disk_devt(mddev->gendisk),
8600-
bio->bi_iter.bi_sector);
8601-
submit_bio_noacct(discard_bio);
8602-
}
8603-
EXPORT_SYMBOL(md_submit_discard_bio);
8604-
86058585
/* md_allow_write(mddev)
86068586
* Calling this ensures that the array is marked 'active' so that writes
86078587
* may proceed without blocking. It is important to call this before

‎drivers/md/md.h‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -713,8 +713,6 @@ extern void md_write_end(struct mddev *mddev);
713713
externvoidmd_done_sync(structmddev*mddev,intblocks,intok);
714714
externvoidmd_error(structmddev*mddev,structmd_rdev*rdev);
715715
externvoidmd_finish_reshape(structmddev*mddev);
716-
externvoidmd_submit_discard_bio(structmddev*mddev,structmd_rdev*rdev,
717-
structbio*bio,sector_tstart,sector_tsize);
718716

719717
externbool__must_checkmd_flush_request(structmddev*mddev,structbio*bio);
720718
externvoidmd_super_write(structmddev*mddev,structmd_rdev*rdev,

‎drivers/md/raid0.c‎

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,7 @@ static void raid0_handle_discard(struct mddev *mddev, struct bio *bio)
477477

478478
for (disk=0;disk<zone->nb_dev;disk++) {
479479
sector_tdev_start,dev_end;
480+
structbio*discard_bio=NULL;
480481
structmd_rdev*rdev;
481482

482483
if (disk<start_disk_index)
@@ -499,9 +500,18 @@ static void raid0_handle_discard(struct mddev *mddev, struct bio *bio)
499500

500501
rdev=conf->devlist[(zone-conf->strip_zone)*
501502
conf->strip_zone[0].nb_dev+disk];
502-
md_submit_discard_bio(mddev,rdev,bio,
503+
if (__blkdev_issue_discard(rdev->bdev,
503504
dev_start+zone->dev_start+rdev->data_offset,
504-
dev_end-dev_start);
505+
dev_end-dev_start,GFP_NOIO,0,&discard_bio)||
506+
!discard_bio)
507+
continue;
508+
bio_chain(discard_bio,bio);
509+
bio_clone_blkg_association(discard_bio,bio);
510+
if (mddev->gendisk)
511+
trace_block_bio_remap(bdev_get_queue(rdev->bdev),
512+
discard_bio,disk_devt(mddev->gendisk),
513+
bio->bi_iter.bi_sector);
514+
submit_bio_noacct(discard_bio);
505515
}
506516
bio_endio(bio);
507517
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp