Skip to content
  • Simon Gaiser's avatar
    xen: xenbus_dev_frontend: Fix XS_TRANSACTION_END handling · 2a22ee6c
    Simon Gaiser authored
    Commit fd8aa909 ("xen: optimize xenbus driver for multiple
    concurrent xenstore accesses") made a subtle change to the semantic of
    xenbus_dev_request_and_reply() and xenbus_transaction_end().
    
    Before on an error response to XS_TRANSACTION_END
    xenbus_dev_request_and_reply() would not decrement the active
    transaction counter. But xenbus_transaction_end() has always counted the
    transaction as finished regardless of the response.
    
    The new behavior is that xenbus_dev_request_and_reply() and
    xenbus_transaction_end() will always count the transaction as finished
    regardless the response code (handled in xs_request_exit()).
    
    But xenbus_dev_frontend tries to end a transaction on closing of the
    device if the XS_TRANSACTION_END failed before. Trying to close the
    transaction twice corrupts the reference count. So fix this by also
    considering a transaction closed if we have sent XS_TRANSACTION_END once
    regardless of the return code.
    
    Cc: <stable@vger.kernel.org> # 4.11
    Fixes: fd8aa909
    
     ("xen: optimize xenbus driver for multiple concurrent xenstore accesses")
    Signed-off-by: default avatarSimon Gaiser <simon@invisiblethingslab.com>
    Reviewed-by: default avatarJuergen Gross <jgross@suse.com>
    Signed-off-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
    2a22ee6c