On Mon, May 29, 2023 at 9:14 PM Yu Kuai <yukuai1@xxxxxxxxxxxxxxx> wrote: > > From: Yu Kuai <yukuai3@xxxxxxxxxx> > > There are multiple places to do the same thing, factor out a helper to > prevent redundant code, and the helper will be used in following patch > as well. > > Signed-off-by: Yu Kuai <yukuai3@xxxxxxxxxx> > --- > drivers/md/raid1-10.c | 17 +++++++++++++++++ > drivers/md/raid1.c | 13 ++----------- > drivers/md/raid10.c | 26 ++++---------------------- > 3 files changed, 23 insertions(+), 33 deletions(-) > > diff --git a/drivers/md/raid1-10.c b/drivers/md/raid1-10.c > index 9bf19a3409ce..506299bd55cb 100644 > --- a/drivers/md/raid1-10.c > +++ b/drivers/md/raid1-10.c > @@ -110,6 +110,23 @@ static void md_bio_reset_resync_pages(struct bio *bio, struct resync_pages *rp, > } while (idx++ < RESYNC_PAGES && size > 0); > } > > + > +static inline void raid1_submit_write(struct bio *bio) Hi Kuai Is it better to change the name to rdev_submit_write? It's just a suggestion. The patch looks good to me. Regards Xiao > +{ > + struct md_rdev *rdev = (struct md_rdev *)bio->bi_bdev; > + > + bio->bi_next = NULL; > + bio_set_dev(bio, rdev->bdev); > + if (test_bit(Faulty, &rdev->flags)) > + bio_io_error(bio); > + else if (unlikely(bio_op(bio) == REQ_OP_DISCARD && > + !bdev_max_discard_sectors(bio->bi_bdev))) > + /* Just ignore it */ > + bio_endio(bio); > + else > + submit_bio_noacct(bio); > +} > + > static inline bool raid1_add_bio_to_plug(struct mddev *mddev, struct bio *bio, > blk_plug_cb_fn unplug) > { > diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c > index e86c5e71c604..0778e398584c 100644 > --- a/drivers/md/raid1.c > +++ b/drivers/md/raid1.c > @@ -799,17 +799,8 @@ static void flush_bio_list(struct r1conf *conf, struct bio *bio) > > while (bio) { /* submit pending writes */ > struct bio *next = bio->bi_next; > - struct md_rdev *rdev = (void *)bio->bi_bdev; > - bio->bi_next = NULL; > - bio_set_dev(bio, rdev->bdev); > - if (test_bit(Faulty, &rdev->flags)) { > - bio_io_error(bio); > - } else if (unlikely((bio_op(bio) == REQ_OP_DISCARD) && > - !bdev_max_discard_sectors(bio->bi_bdev))) > - /* Just ignore it */ > - bio_endio(bio); > - else > - submit_bio_noacct(bio); > + > + raid1_submit_write(bio); > bio = next; > cond_resched(); > } > diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c > index 18702051ebd1..6640507ecb0d 100644 > --- a/drivers/md/raid10.c > +++ b/drivers/md/raid10.c > @@ -909,17 +909,8 @@ static void flush_pending_writes(struct r10conf *conf) > > while (bio) { /* submit pending writes */ > struct bio *next = bio->bi_next; > - struct md_rdev *rdev = (void*)bio->bi_bdev; > - bio->bi_next = NULL; > - bio_set_dev(bio, rdev->bdev); > - if (test_bit(Faulty, &rdev->flags)) { > - bio_io_error(bio); > - } else if (unlikely((bio_op(bio) == REQ_OP_DISCARD) && > - !bdev_max_discard_sectors(bio->bi_bdev))) > - /* Just ignore it */ > - bio_endio(bio); > - else > - submit_bio_noacct(bio); > + > + raid1_submit_write(bio); > bio = next; > cond_resched(); > } > @@ -1134,17 +1125,8 @@ static void raid10_unplug(struct blk_plug_cb *cb, bool from_schedule) > > while (bio) { /* submit pending writes */ > struct bio *next = bio->bi_next; > - struct md_rdev *rdev = (void*)bio->bi_bdev; > - bio->bi_next = NULL; > - bio_set_dev(bio, rdev->bdev); > - if (test_bit(Faulty, &rdev->flags)) { > - bio_io_error(bio); > - } else if (unlikely((bio_op(bio) == REQ_OP_DISCARD) && > - !bdev_max_discard_sectors(bio->bi_bdev))) > - /* Just ignore it */ > - bio_endio(bio); > - else > - submit_bio_noacct(bio); > + > + raid1_submit_write(bio); > bio = next; > cond_resched(); > } > -- > 2.39.2 >