mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 02:24:24 +02:00
smb: client: let smbd_post_send_negotiate_req() use smbd_post_send()
The server has similar logic and it makes sure that request->wr is used instead of a stack struct ib_send_wr send_wr. This makes sure send_done can see request->wr.send_flags as the next commit will check for IB_SEND_SIGNALED Cc: <stable@vger.kernel.org> # 6.18.x Cc: Steve French <smfrench@gmail.com> Cc: Tom Talpey <tom@talpey.com> Cc: Long Li <longli@microsoft.com> Cc: Namjae Jeon <linkinjeon@kernel.org> Cc: linux-cifs@vger.kernel.org Cc: samba-technical@lists.samba.org Signed-off-by: Stefan Metzmacher <metze@samba.org> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
93ac432274
commit
5b1c614965
|
|
@ -35,6 +35,10 @@ static void enqueue_reassembly(
|
|||
static struct smbdirect_recv_io *_get_first_reassembly(
|
||||
struct smbdirect_socket *sc);
|
||||
|
||||
static int smbd_post_send(struct smbdirect_socket *sc,
|
||||
struct smbdirect_send_batch *batch,
|
||||
struct smbdirect_send_io *request);
|
||||
|
||||
static int smbd_post_recv(
|
||||
struct smbdirect_socket *sc,
|
||||
struct smbdirect_recv_io *response);
|
||||
|
|
@ -1021,7 +1025,6 @@ static int smbd_ia_open(
|
|||
static int smbd_post_send_negotiate_req(struct smbdirect_socket *sc)
|
||||
{
|
||||
struct smbdirect_socket_parameters *sp = &sc->parameters;
|
||||
struct ib_send_wr send_wr;
|
||||
int rc;
|
||||
struct smbdirect_send_io *request;
|
||||
struct smbdirect_negotiate_req *packet;
|
||||
|
|
@ -1052,33 +1055,12 @@ static int smbd_post_send_negotiate_req(struct smbdirect_socket *sc)
|
|||
request->sge[0].length = sizeof(*packet);
|
||||
request->sge[0].lkey = sc->ib.pd->local_dma_lkey;
|
||||
|
||||
ib_dma_sync_single_for_device(
|
||||
sc->ib.dev, request->sge[0].addr,
|
||||
request->sge[0].length, DMA_TO_DEVICE);
|
||||
|
||||
request->cqe.done = send_done;
|
||||
|
||||
send_wr.next = NULL;
|
||||
send_wr.wr_cqe = &request->cqe;
|
||||
send_wr.sg_list = request->sge;
|
||||
send_wr.num_sge = request->num_sge;
|
||||
send_wr.opcode = IB_WR_SEND;
|
||||
send_wr.send_flags = IB_SEND_SIGNALED;
|
||||
|
||||
log_rdma_send(INFO, "sge addr=0x%llx length=%u lkey=0x%x\n",
|
||||
request->sge[0].addr,
|
||||
request->sge[0].length, request->sge[0].lkey);
|
||||
|
||||
atomic_inc(&sc->send_io.pending.count);
|
||||
rc = ib_post_send(sc->ib.qp, &send_wr, NULL);
|
||||
rc = smbd_post_send(sc, NULL, request);
|
||||
if (!rc)
|
||||
return 0;
|
||||
|
||||
/* if we reach here, post send failed */
|
||||
log_rdma_send(ERR, "ib_post_send failed rc=%d\n", rc);
|
||||
atomic_dec(&sc->send_io.pending.count);
|
||||
|
||||
smbd_disconnect_rdma_connection(sc);
|
||||
if (rc == -EAGAIN)
|
||||
rc = -EIO;
|
||||
|
||||
dma_mapping_failed:
|
||||
smbd_free_send_io(request);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user