mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
smb: client: don't wait for info->send_pending == 0 on error
commit 8c48e1c7520321cc87ff651e96093e2f412785fb upstream. We already called ib_drain_qp() before and that makes sure send_done() was called with IB_WC_WR_FLUSH_ERR, but didn't called atomic_dec_and_test(&sc->send_io.pending.count) So we may never reach the info->send_pending == 0 condition. Cc: Steve French <smfrench@gmail.com> Cc: Tom Talpey <tom@talpey.com> Cc: Long Li <longli@microsoft.com> Cc: linux-cifs@vger.kernel.org Cc: samba-technical@lists.samba.org Fixes: 5349ae5e05fa ("smb: client: let send_done() cleanup before calling smbd_disconnect_rdma_connection()") Signed-off-by: Stefan Metzmacher <metze@samba.org> Signed-off-by: Steve French <stfrench@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
429112e970
commit
edc450030b
@@ -1338,10 +1338,6 @@ void smbd_destroy(struct TCP_Server_Info *server)
|
||||
log_rdma_event(INFO, "cancelling idle timer\n");
|
||||
cancel_delayed_work_sync(&info->idle_timer_work);
|
||||
|
||||
log_rdma_event(INFO, "wait for all send posted to IB to finish\n");
|
||||
wait_event(info->wait_send_pending,
|
||||
atomic_read(&info->send_pending) == 0);
|
||||
|
||||
/* It's not possible for upper layer to get to reassembly */
|
||||
log_rdma_event(INFO, "drain the reassembly queue\n");
|
||||
do {
|
||||
@@ -2053,7 +2049,11 @@ int smbd_send(struct TCP_Server_Info *server,
|
||||
*/
|
||||
|
||||
wait_event(info->wait_send_pending,
|
||||
atomic_read(&info->send_pending) == 0);
|
||||
atomic_read(&info->send_pending) == 0 ||
|
||||
sc->status != SMBDIRECT_SOCKET_CONNECTED);
|
||||
|
||||
if (sc->status != SMBDIRECT_SOCKET_CONNECTED && rc == 0)
|
||||
rc = -EAGAIN;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user