net/smc: move wake up of close waiter
Move the call to smc_close_wake_tx_prepared() (which wakes up a possibly waiting close processing that might wait for 'all data sent') to smc_tx_sndbuf_nonempty() (which is the main function to send data). Signed-off-by: Karsten Graul <kgraul@linux.ibm.com> Signed-off-by: Ursula Braun <ubraun@linux.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
4dff63c25e
Коммит
5bc056d8d0
|
@ -290,8 +290,6 @@ static void smc_cdc_msg_recv_action(struct smc_sock *smc,
|
|||
/* trigger sndbuf consumer: RDMA write into peer RMBE and CDC */
|
||||
if (diff_cons && smc_tx_prepared_sends(conn)) {
|
||||
smc_tx_sndbuf_nonempty(conn);
|
||||
/* trigger socket release if connection closed */
|
||||
smc_close_wake_tx_prepared(smc);
|
||||
}
|
||||
if (diff_cons && conn->urg_tx_pend &&
|
||||
atomic_read(&conn->peer_rmbe_space) == conn->peer_rmbe_size) {
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "smc.h"
|
||||
#include "smc_wr.h"
|
||||
#include "smc_cdc.h"
|
||||
#include "smc_close.h"
|
||||
#include "smc_ism.h"
|
||||
#include "smc_tx.h"
|
||||
|
||||
|
@ -554,6 +555,12 @@ int smc_tx_sndbuf_nonempty(struct smc_connection *conn)
|
|||
else
|
||||
rc = smcr_tx_sndbuf_nonempty(conn);
|
||||
|
||||
if (!rc) {
|
||||
/* trigger socket release if connection is closing */
|
||||
struct smc_sock *smc = container_of(conn, struct smc_sock,
|
||||
conn);
|
||||
smc_close_wake_tx_prepared(smc);
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче