lkml.org 
[lkml]   [2019]   [Feb]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 021/152] pvcalls-back: set -ENOTCONN in pvcalls_conn_back_read
    Date
    4.19-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    [ Upstream commit e6587cdbd732eacb4c7ce592ed46f7bbcefb655f ]

    When a connection is closing we receive on pvcalls_sk_state_change
    notification. Instead of setting the connection as closed immediately
    (-ENOTCONN), let's read one more time from it: pvcalls_conn_back_read
    will set the connection as closed when necessary.

    That way, we avoid races between pvcalls_sk_state_change and
    pvcalls_back_ioworker.

    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-back.c | 7 ++++---
    1 file changed, 4 insertions(+), 3 deletions(-)

    diff --git a/drivers/xen/pvcalls-back.c b/drivers/xen/pvcalls-back.c
    index b1092fbefa630..e8b3ff8e7868b 100644
    --- a/drivers/xen/pvcalls-back.c
    +++ b/drivers/xen/pvcalls-back.c
    @@ -160,9 +160,10 @@ static void pvcalls_conn_back_read(void *opaque)

    /* write the data, then modify the indexes */
    virt_wmb();
    - if (ret < 0)
    + if (ret < 0) {
    + atomic_set(&map->read, 0);
    intf->in_error = ret;
    - else
    + } else
    intf->in_prod = prod + ret;
    /* update the indexes, then notify the other end */
    virt_wmb();
    @@ -288,7 +289,7 @@ static void pvcalls_sk_state_change(struct sock *sock)
    return;

    intf = map->ring;
    - intf->in_error = -ENOTCONN;
    + atomic_inc(&map->read);
    notify_remote_via_irq(map->irq);
    }

    --
    2.19.1


    \
     
     \ /
      Last update: 2019-02-25 22:57    [W:4.037 / U:0.176 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site