wake_up(&sc->status_wait);
}
-static int smb_direct_post_recv(struct smbdirect_socket *sc,
- struct smbdirect_recv_io *recvmsg)
-{
- struct smbdirect_socket_parameters *sp = &sc->parameters;
- struct ib_recv_wr wr;
- int ret;
-
- recvmsg->sge.addr = ib_dma_map_single(sc->ib.dev,
- recvmsg->packet,
- sp->max_recv_size,
- DMA_FROM_DEVICE);
- ret = ib_dma_mapping_error(sc->ib.dev, recvmsg->sge.addr);
- if (ret)
- return ret;
- recvmsg->sge.length = sp->max_recv_size;
- recvmsg->sge.lkey = sc->ib.pd->local_dma_lkey;
-
- wr.wr_cqe = &recvmsg->cqe;
- wr.next = NULL;
- wr.sg_list = &recvmsg->sge;
- wr.num_sge = 1;
-
- ret = ib_post_recv(sc->ib.qp, &wr, NULL);
- if (ret) {
- pr_err("Can't post recv: %d\n", ret);
- ib_dma_unmap_single(sc->ib.dev,
- recvmsg->sge.addr, recvmsg->sge.length,
- DMA_FROM_DEVICE);
- recvmsg->sge.length = 0;
- smbdirect_socket_schedule_cleanup(sc, ret);
- return ret;
- }
- return ret;
-}
-
static int smb_direct_read(struct ksmbd_transport *t, char *buf,
unsigned int size, int unused)
{
recvmsg->first_segment = false;
- ret = smb_direct_post_recv(sc, recvmsg);
+ ret = smbdirect_connection_post_recv_io(recvmsg);
if (ret) {
pr_err("Can't post recv: %d\n", ret);
smbdirect_connection_put_recv_io(recvmsg);
return -ENOMEM;
recvmsg->cqe.done = smb_direct_negotiate_recv_done;
- ret = smb_direct_post_recv(sc, recvmsg);
+ ret = smbdirect_connection_post_recv_io(recvmsg);
if (ret) {
pr_err("Can't post recv: %d\n", ret);
goto out_err;