> On Jul 31, 2023, at 7:38 AM, Li Feng <fen...@smartx.com> wrote:
> 
> 
> 
>> 2023年7月31日 06:13,Raphael Norwitz <raphael.norw...@nutanix.com> 写道:
>> 
>>> 
>>> On Jul 28, 2023, at 3:49 AM, Li Feng <fen...@smartx.com> wrote:
>>> 
>>> 
>>> 
>>>> 2023年7月28日 下午2:04,Michael S. Tsirkin <m...@redhat.com> 写道:
>>>> 
>>>> On Tue, Jul 25, 2023 at 06:42:45PM +0800, Li Feng wrote:
>>>>> Get_inflight_fd is sent only once. When reconnecting to the backend,
>>>>> qemu sent set_inflight_fd to the backend.
>>>> 
>>>> I don't understand what you are trying to say here.
>>>> Should be:
>>>> Currently ABCD. This is wrong/unnecessary because EFG. This patch HIJ.
>>> 
>>> Thanks, I will reorganize the commit message in v3.
>>>> 
>>>>> Signed-off-by: Li Feng <fen...@smartx.com>
>>>>> ---
>>>>> hw/scsi/vhost-scsi-common.c | 37 ++++++++++++++++++-------------------
>>>>> 1 file changed, 18 insertions(+), 19 deletions(-)
>>>>> 
>>>>> diff --git a/hw/scsi/vhost-scsi-common.c b/hw/scsi/vhost-scsi-common.c
>>>>> index a06f01af26..664adb15b4 100644
>>>>> --- a/hw/scsi/vhost-scsi-common.c
>>>>> +++ b/hw/scsi/vhost-scsi-common.c
>>>>> @@ -52,20 +52,28 @@ int vhost_scsi_common_start(VHostSCSICommon *vsc)
>>>>> 
>>>>>    vsc->dev.acked_features = vdev->guest_features;
>>>>> 
>>>>> -    assert(vsc->inflight == NULL);
>>>>> -    vsc->inflight = g_new0(struct vhost_inflight, 1);
>>>>> -    ret = vhost_dev_get_inflight(&vsc->dev,
>>>>> -                                 vs->conf.virtqueue_size,
>>>>> -                                 vsc->inflight);
>>>>> +    ret = vhost_dev_prepare_inflight(&vsc->dev, vdev);
>>>>>    if (ret < 0) {
>>>>> -        error_report("Error get inflight: %d", -ret);
>>>>> +        error_report("Error setting inflight format: %d", -ret);
>>>>>        goto err_guest_notifiers;
>>>>>    }
>>>>> 
>>>>> -    ret = vhost_dev_set_inflight(&vsc->dev, vsc->inflight);
>>>>> -    if (ret < 0) {
>>>>> -        error_report("Error set inflight: %d", -ret);
>>>>> -        goto err_guest_notifiers;
>>>>> +    if (vsc->inflight) {
>>>>> +        if (!vsc->inflight->addr) {
>>>>> +            ret = vhost_dev_get_inflight(&vsc->dev,
>>>>> +                                        vs->conf.virtqueue_size,
>>>>> +                                        vsc->inflight);
>>>>> +            if (ret < 0) {
>>>>> +                error_report("Error get inflight: %d", -ret);
>>>> 
>>>> As long as you are fixing this - should be "getting inflight”.
>>> I will fix it in v3.
>>>> 
>>>>> +                goto err_guest_notifiers;
>>>>> +            }
>>>>> +        }
>>>>> +
>> 
>> Looks like you reworked this a bit so to avoid a potential crash if 
>> vsc->inflight is NULL
>> 
>> Should we fix it for vhost-user-blk too?
>> 
> This check is mainly for the vhost-scsi code, that doesn’t need allocate the 
> inflight memory.
> 
> The vhost-user-blk doesn’t need this check, because there isn't a vhost-blk 
> device that reuse the code.
> 

Makes sense.

>>>>> +        ret = vhost_dev_set_inflight(&vsc->dev, vsc->inflight);
>>>>> +        if (ret < 0) {
>>>>> +            error_report("Error set inflight: %d", -ret);
>>>>> +            goto err_guest_notifiers;
>>>>> +        }
>>>>>    }
>>>>> 
>>>>>    ret = vhost_dev_start(&vsc->dev, vdev, true);
>>>>> @@ -85,9 +93,6 @@ int vhost_scsi_common_start(VHostSCSICommon *vsc)
>>>>>    return ret;
>>>>> 
>>>>> err_guest_notifiers:
>>>>> -    g_free(vsc->inflight);
>>>>> -    vsc->inflight = NULL;
>>>>> -
>>>>>    k->set_guest_notifiers(qbus->parent, vsc->dev.nvqs, false);
>>>>> err_host_notifiers:
>>>>>    vhost_dev_disable_notifiers(&vsc->dev, vdev);
>>>>> @@ -111,12 +116,6 @@ void vhost_scsi_common_stop(VHostSCSICommon *vsc)
>>>>>    }
>>>>>    assert(ret >= 0);
>>>>> 
>> 
>> As I said before, I think this introduces a leak.
> I have answered in the previous mail.
> 

On re-review I agree it’s fine since vac-inflight isn’t set.

>> 
>>>>> -    if (vsc->inflight) {
>>>>> -        vhost_dev_free_inflight(vsc->inflight);
>>>>> -        g_free(vsc->inflight);
>>>>> -        vsc->inflight = NULL;
>>>>> -    }
>>>>> -
>>>>>    vhost_dev_disable_notifiers(&vsc->dev, vdev);
>>>>> }
>>>>> 
>>>>> -- 
>>>>> 2.41.0

Reply via email to