Re: [PATCH] md/raid10: make sync_request_write() call bio_copy_data()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Apr 26, 2015 at 4:49 PM, NeilBrown <neilb@xxxxxxx> wrote:
> 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?

Correct. The full patchset is here:
https://git.kernel.org/cgit/linux/kernel/git/mlin/linux.git/log/?h=block-generic-req

I'll rebase it on top of 4.1-rc1, then post it.

>
>>               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.

I'll update it to where it was.

>
>
>> +
>> +             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.

Will update it.

Thanks.

>
> Thanks,
> NeilBrown
>
--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux