[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [PATCH] virtio-blk: trivial code optimization
From: |
Gonglei |
Subject: |
Re: [Qemu-block] [PATCH] virtio-blk: trivial code optimization |
Date: |
Mon, 9 Nov 2015 10:08:02 +0800 |
User-agent: |
Mozilla/5.0 (Windows NT 6.1; rv:31.0) Gecko/20100101 Thunderbird/31.4.0 |
On 2015/11/6 20:54, Paolo Bonzini wrote:
>
>
> On 06/11/2015 11:35, Stefan Hajnoczi wrote:
>>>> if (niov + req->qiov.niov > IOV_MAX) {
>>>> merge = false;
>>>> + goto unmerge;
>>>> }
>>>>
>>>> /* merge would exceed maximum transfer length of backend
>>>> device */
>>>> if (req->qiov.size / BDRV_SECTOR_SIZE + nb_sectors >
>>>> max_xfer_len) {
>>>> merge = false;
>>>> + goto unmerge;
>>>> }
>>>>
>>>> /* requests are not sequential */
>>>> if (sector_num + nb_sectors != req->sector_num) {
>>>> merge = false;
>>>> }
>>>> -
>>>> +unmerge:
>> C has a way of expressing this without gotos. Please use else if:
>>
>> if (a) {
>> ...
>> } else if (b) {
>> ...
>> } else if (c) {
>> ...
>> }
>
> Another way is
>
> if (niov + req->qiov.niov > IOV_MAX ||
> req->qiov.size / BDRV_SECTOR_SIZE + nb_sectors > max_xfer_len ||
> sector_num + nb_sectors != req->sector_num) {
> submit_requests(...)
> ...
> }
>
> While at it, we could reorder the conditions so that the most common
> ("requests are not sequential") comes first.
>
> I'm not sure about handling of overflow. It's probably better to
> write conditions as "new > max - old" (e.g. "niov > IOV_MAX -
> req->qiov.niov") rather than "old + new > max". The former is always
> safe, because we know that old <= max and there can be no integer
> overflow.
>
Nice points. Thanks, both of you.
Regards,
-Gonglei