lkml.org 
[lkml]   [2019]   [Feb]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.19 03/83] pvcalls-front: read all data before closing the connection
    Date
    From: Stefano Stabellini <sstabellini@kernel.org>

    [ Upstream commit b79470b64fa9266948d1ce8d825ced94c4f63293 ]

    When a connection is closing in_error is set to ENOTCONN. There could
    still be outstanding data on the ring left by the backend. Before
    closing the connection on the frontend side, drain the ring.

    Signed-off-by: Stefano Stabellini <stefanos@xilinx.com>
    Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/xen/pvcalls-front.c | 4 +---
    1 file changed, 1 insertion(+), 3 deletions(-)

    diff --git a/drivers/xen/pvcalls-front.c b/drivers/xen/pvcalls-front.c
    index 77224d8f3e6f..e5d95aab2cb8 100644
    --- a/drivers/xen/pvcalls-front.c
    +++ b/drivers/xen/pvcalls-front.c
    @@ -560,15 +560,13 @@ static int __read_ring(struct pvcalls_data_intf *intf,
    error = intf->in_error;
    /* get pointers before reading from the ring */
    virt_rmb();
    - if (error < 0)
    - return error;

    size = pvcalls_queued(prod, cons, array_size);
    masked_prod = pvcalls_mask(prod, array_size);
    masked_cons = pvcalls_mask(cons, array_size);

    if (size == 0)
    - return 0;
    + return error ?: size;

    if (len > size)
    len = size;
    --
    2.19.1
    \
     
     \ /
      Last update: 2019-02-13 03:58    [W:5.927 / U:0.108 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site