Skip to content

Commit 39dec6c

Browse files
elfringsmfrench
authored andcommitted
smb: server: Use common error handling code in smb_direct_rdma_xmit()
Add two jump targets so that a bit of exception handling can be better reused at the end of this function implementation. Signed-off-by: Markus Elfring <elfring@users.sourceforge.net> Reviewed-by: Stefan Metzmacher <metze@samba.org> Acked-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Steve French <stfrench@microsoft.com>
1 parent 3a86608 commit 39dec6c

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

fs/smb/server/transport_rdma.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1574,18 +1574,14 @@ static int smb_direct_rdma_xmit(struct smb_direct_transport *t,
15741574
get_buf_page_count(desc_buf, desc_buf_len),
15751575
msg->sg_list, SG_CHUNK_SIZE);
15761576
if (ret) {
1577-
kfree(msg);
15781577
ret = -ENOMEM;
1579-
goto out;
1578+
goto free_msg;
15801579
}
15811580

15821581
ret = get_sg_list(desc_buf, desc_buf_len,
15831582
msg->sgt.sgl, msg->sgt.orig_nents);
1584-
if (ret < 0) {
1585-
sg_free_table_chained(&msg->sgt, SG_CHUNK_SIZE);
1586-
kfree(msg);
1587-
goto out;
1588-
}
1583+
if (ret < 0)
1584+
goto free_table;
15891585

15901586
ret = rdma_rw_ctx_init(&msg->rdma_ctx, sc->ib.qp, sc->ib.qp->port,
15911587
msg->sgt.sgl,
@@ -1596,9 +1592,7 @@ static int smb_direct_rdma_xmit(struct smb_direct_transport *t,
15961592
is_read ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
15971593
if (ret < 0) {
15981594
pr_err("failed to init rdma_rw_ctx: %d\n", ret);
1599-
sg_free_table_chained(&msg->sgt, SG_CHUNK_SIZE);
1600-
kfree(msg);
1601-
goto out;
1595+
goto free_table;
16021596
}
16031597

16041598
list_add_tail(&msg->list, &msg_list);
@@ -1630,6 +1624,12 @@ static int smb_direct_rdma_xmit(struct smb_direct_transport *t,
16301624
atomic_add(credits_needed, &sc->rw_io.credits.count);
16311625
wake_up(&sc->rw_io.credits.wait_queue);
16321626
return ret;
1627+
1628+
free_table:
1629+
sg_free_table_chained(&msg->sgt, SG_CHUNK_SIZE);
1630+
free_msg:
1631+
kfree(msg);
1632+
goto out;
16331633
}
16341634

16351635
static int smb_direct_rdma_write(struct ksmbd_transport *t,

0 commit comments

Comments
 (0)