Am 23.10.2014 um 13:23 schrieb Max Reitz:
> On 2014-10-16 at 09:54, Peter Lieven wrote:
>> Signed-off-by: Peter Lieven <p...@kamp.de>
>> Reviewed-by: Ronnie Sahlberg <ronniesahlb...@gmail.com>
>> ---
>>   block.c |    5 +++++
>>   1 file changed, 5 insertions(+)
>>
>> diff --git a/block.c b/block.c
>> index 0fbf916..9ad2287 100644
>> --- a/block.c
>> +++ b/block.c
>> @@ -4554,6 +4554,11 @@ static int multiwrite_merge(BlockDriverState *bs, 
>> BlockRequest *reqs,
>>               merge = 0;
>>           }
>>   +        if (bs->bl.max_transfer_length && reqs[outidx].nb_sectors +
>> +            reqs[i].nb_sectors > bs->bl.max_transfer_length) {
>> +            merge = 0;
>> +        }
>> +
>>           if (merge) {
>>               size_t size;
>>               QEMUIOVector *qiov = g_malloc0(sizeof(*qiov));
>
> Reviewed-by: Max Reitz <mre...@redhat.com>
>
> I feel like we should respect max_transfer_length in more than just this 
> function, though. Every block device (or block driver) that sets a maximum 
> transfer length should check requests against it as well, so we don't need to 
> duplicate the same tests in the block layer functions, but maybe if at some 
> point there are no things left to be done on the block layer, we could do 
> that.

I have on my todo to add a splitting logic to block.c to 

bdrv_co_do_preadv() and bdrv_co_do_pwritev(), but I agreed with Kevin to 
introduce this
*after* 2.2.

Peter



Reply via email to