On Fri, 24 Apr 2015 15:52:10 -0700 Ming Lin <mlin@xxxxxxxxxx> wrote: > From: Kent Overstreet <kent.overstreet@xxxxxxxxx> > > Refactor sync_request_write() of md/raid10 to use bio_copy_data() > instead of open coding bio_vec iterations. > > Reviewed-by: Christoph Hellwig <hch@xxxxxx> > Signed-off-by: Kent Overstreet <kent.overstreet@xxxxxxxxx> > [dpark: add more description in commit message] > Signed-off-by: Dongsu Park <dongsu.park@xxxxxxxxxxxxxxxx> > Signed-off-by: Ming Lin <mlin@xxxxxxxxxx> > --- > drivers/md/raid10.c | 20 +++++--------------- > 1 file changed, 5 insertions(+), 15 deletions(-) > > diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c > index a7196c4..02e33f1 100644 > --- a/drivers/md/raid10.c > +++ b/drivers/md/raid10.c > @@ -2097,18 +2097,11 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio) > tbio->bi_vcnt = vcnt; > tbio->bi_iter.bi_size = r10_bio->sectors << 9; > tbio->bi_rw = WRITE; > - tbio->bi_private = r10_bio; > tbio->bi_iter.bi_sector = r10_bio->devs[i].addr; > - > - for (j=0; j < vcnt ; j++) { > - tbio->bi_io_vec[j].bv_offset = 0; > - tbio->bi_io_vec[j].bv_len = PAGE_SIZE; > - > - memcpy(page_address(tbio->bi_io_vec[j].bv_page), > - page_address(fbio->bi_io_vec[j].bv_page), > - PAGE_SIZE); > - } You removed the resetting of bv_offset and bv_len. So I assume this is being applied in a context where these things are now immutable - is that correct? > tbio->bi_end_io = end_sync_write; > + tbio->bi_private = r10_bio; Any reason you are moving this assignment to bi_private? It doesn't hurt, but it doesn't seem to be necessary. > + > + bio_copy_data(tbio, fbio); > > d = r10_bio->devs[i].devnum; > atomic_inc(&conf->mirrors[d].rdev->nr_pending); > @@ -2124,17 +2117,14 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio) > * that are active > */ > for (i = 0; i < conf->copies; i++) { > - int j, d; > + int d; > > tbio = r10_bio->devs[i].repl_bio; > if (!tbio || !tbio->bi_end_io) > continue; > if (r10_bio->devs[i].bio->bi_end_io != end_sync_write > && r10_bio->devs[i].bio != fbio) > - for (j = 0; j < vcnt; j++) > - memcpy(page_address(tbio->bi_io_vec[j].bv_page), > - page_address(fbio->bi_io_vec[j].bv_page), > - PAGE_SIZE); > + bio_copy_data(tbio, fbio); > d = r10_bio->devs[i].devnum; > atomic_inc(&r10_bio->remaining); > md_sync_acct(conf->mirrors[d].replacement->bdev, Providing you are confident that bv_offset and bv_len don't need to be updated: Acked-by: NeilBrown <neilb@xxxxxxx> though I'd prefer the bi_private assignment was left where it was. Thanks, NeilBrown
Attachment:
pgprS40Z1GHEf.pgp
Description: OpenPGP digital signature