net/smc: preallocated memory for rdma work requests
The work requests for rdma writes are built in local variables within function smc_tx_rdma_write(). This violates the rule that the work request storage has to stay till the work request is confirmed by a completion queue response. This patch introduces preallocated memory for these work requests. The storage is allocated, once a link (and thus a queue pair) is established. Signed-off-by: Ursula Braun <ubraun@linux.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
53bc8d2af0
commit
ad6f317f72
@@ -21,13 +21,6 @@
|
||||
|
||||
/********************************** send *************************************/
|
||||
|
||||
struct smc_cdc_tx_pend {
|
||||
struct smc_connection *conn; /* socket connection */
|
||||
union smc_host_cursor cursor; /* tx sndbuf cursor sent */
|
||||
union smc_host_cursor p_cursor; /* rx RMBE cursor produced */
|
||||
u16 ctrl_seq; /* conn. tx sequence # */
|
||||
};
|
||||
|
||||
/* handler for send/transmission completion of a CDC msg */
|
||||
static void smc_cdc_tx_handler(struct smc_wr_tx_pend_priv *pnd_snd,
|
||||
struct smc_link *link,
|
||||
@@ -61,12 +54,14 @@ static void smc_cdc_tx_handler(struct smc_wr_tx_pend_priv *pnd_snd,
|
||||
|
||||
int smc_cdc_get_free_slot(struct smc_connection *conn,
|
||||
struct smc_wr_buf **wr_buf,
|
||||
struct smc_rdma_wr **wr_rdma_buf,
|
||||
struct smc_cdc_tx_pend **pend)
|
||||
{
|
||||
struct smc_link *link = &conn->lgr->lnk[SMC_SINGLE_LINK];
|
||||
int rc;
|
||||
|
||||
rc = smc_wr_tx_get_free_slot(link, smc_cdc_tx_handler, wr_buf,
|
||||
wr_rdma_buf,
|
||||
(struct smc_wr_tx_pend_priv **)pend);
|
||||
if (!conn->alert_token_local)
|
||||
/* abnormal termination */
|
||||
@@ -121,7 +116,7 @@ static int smcr_cdc_get_slot_and_msg_send(struct smc_connection *conn)
|
||||
struct smc_wr_buf *wr_buf;
|
||||
int rc;
|
||||
|
||||
rc = smc_cdc_get_free_slot(conn, &wr_buf, &pend);
|
||||
rc = smc_cdc_get_free_slot(conn, &wr_buf, NULL, &pend);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user