From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
patches@lists.linux.dev, Steve French <smfrench@gmail.com>,
Tom Talpey <tom@talpey.com>, Long Li <longli@microsoft.com>,
Namjae Jeon <linkinjeon@kernel.org>,
Hyunchul Lee <hyc.lee@gmail.com>,
Meetakshi Setiya <meetakshisetiyaoss@gmail.com>,
linux-cifs@vger.kernel.org, samba-technical@lists.samba.org,
Stefan Metzmacher <metze@samba.org>,
Steve French <stfrench@microsoft.com>
Subject: [PATCH 6.15 178/187] smb: client: make use of common smbdirect_socket
Date: Tue, 22 Jul 2025 15:45:48 +0200 [thread overview]
Message-ID: <20250722134352.399521719@linuxfoundation.org> (raw)
In-Reply-To: <20250722134345.761035548@linuxfoundation.org>
6.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stefan Metzmacher <metze@samba.org>
commit c3011b9a7deaaaabdf955815d29eac39c8b75e67 upstream.
This is the next step in the direction of a common smbdirect layer.
Currently only structures are shared, but that will change
over time until everything is shared.
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: Hyunchul Lee <hyc.lee@gmail.com>
Cc: Meetakshi Setiya <meetakshisetiyaoss@gmail.com>
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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/smb/client/cifs_debug.c | 2
fs/smb/client/smbdirect.c | 258 ++++++++++++++++++++++++---------------------
fs/smb/client/smbdirect.h | 10 -
3 files changed, 145 insertions(+), 125 deletions(-)
--- a/fs/smb/client/cifs_debug.c
+++ b/fs/smb/client/cifs_debug.c
@@ -387,7 +387,7 @@ static int cifs_debug_data_proc_show(str
seq_printf(m, "\nSMBDirect (in hex) protocol version: %x "
"transport status: %x",
server->smbd_conn->protocol,
- server->smbd_conn->transport_status);
+ server->smbd_conn->socket.status);
seq_printf(m, "\nConn receive_credit_max: %x "
"send_credit_target: %x max_send_size: %x",
server->smbd_conn->receive_credit_max,
--- a/fs/smb/client/smbdirect.c
+++ b/fs/smb/client/smbdirect.c
@@ -163,10 +163,11 @@ static void smbd_disconnect_rdma_work(st
{
struct smbd_connection *info =
container_of(work, struct smbd_connection, disconnect_work);
+ struct smbdirect_socket *sc = &info->socket;
- if (info->transport_status == SMBD_CONNECTED) {
- info->transport_status = SMBD_DISCONNECTING;
- rdma_disconnect(info->id);
+ if (sc->status == SMBDIRECT_SOCKET_CONNECTED) {
+ sc->status = SMBDIRECT_SOCKET_DISCONNECTING;
+ rdma_disconnect(sc->rdma.cm_id);
}
}
@@ -180,6 +181,7 @@ static int smbd_conn_upcall(
struct rdma_cm_id *id, struct rdma_cm_event *event)
{
struct smbd_connection *info = id->context;
+ struct smbdirect_socket *sc = &info->socket;
log_rdma_event(INFO, "event=%d status=%d\n",
event->event, event->status);
@@ -203,7 +205,7 @@ static int smbd_conn_upcall(
case RDMA_CM_EVENT_ESTABLISHED:
log_rdma_event(INFO, "connected event=%d\n", event->event);
- info->transport_status = SMBD_CONNECTED;
+ sc->status = SMBDIRECT_SOCKET_CONNECTED;
wake_up_interruptible(&info->conn_wait);
break;
@@ -211,20 +213,20 @@ static int smbd_conn_upcall(
case RDMA_CM_EVENT_UNREACHABLE:
case RDMA_CM_EVENT_REJECTED:
log_rdma_event(INFO, "connecting failed event=%d\n", event->event);
- info->transport_status = SMBD_DISCONNECTED;
+ sc->status = SMBDIRECT_SOCKET_DISCONNECTED;
wake_up_interruptible(&info->conn_wait);
break;
case RDMA_CM_EVENT_DEVICE_REMOVAL:
case RDMA_CM_EVENT_DISCONNECTED:
/* This happens when we fail the negotiation */
- if (info->transport_status == SMBD_NEGOTIATE_FAILED) {
- info->transport_status = SMBD_DISCONNECTED;
+ if (sc->status == SMBDIRECT_SOCKET_NEGOTIATE_FAILED) {
+ sc->status = SMBDIRECT_SOCKET_DISCONNECTED;
wake_up(&info->conn_wait);
break;
}
- info->transport_status = SMBD_DISCONNECTED;
+ sc->status = SMBDIRECT_SOCKET_DISCONNECTED;
wake_up_interruptible(&info->disconn_wait);
wake_up_interruptible(&info->wait_reassembly_queue);
wake_up_interruptible_all(&info->wait_send_queue);
@@ -273,6 +275,8 @@ static void send_done(struct ib_cq *cq,
int i;
struct smbd_request *request =
container_of(wc->wr_cqe, struct smbd_request, cqe);
+ struct smbd_connection *info = request->info;
+ struct smbdirect_socket *sc = &info->socket;
log_rdma_send(INFO, "smbd_request 0x%p completed wc->status=%d\n",
request, wc->status);
@@ -284,7 +288,7 @@ static void send_done(struct ib_cq *cq,
}
for (i = 0; i < request->num_sge; i++)
- ib_dma_unmap_single(request->info->id->device,
+ ib_dma_unmap_single(sc->ib.dev,
request->sge[i].addr,
request->sge[i].length,
DMA_TO_DEVICE);
@@ -391,8 +395,9 @@ static void smbd_post_send_credits(struc
struct smbd_connection *info =
container_of(work, struct smbd_connection,
post_send_credits_work);
+ struct smbdirect_socket *sc = &info->socket;
- if (info->transport_status != SMBD_CONNECTED) {
+ if (sc->status != SMBDIRECT_SOCKET_CONNECTED) {
wake_up(&info->wait_receive_queues);
return;
}
@@ -633,32 +638,34 @@ static int smbd_ia_open(
struct smbd_connection *info,
struct sockaddr *dstaddr, int port)
{
+ struct smbdirect_socket *sc = &info->socket;
int rc;
- info->id = smbd_create_id(info, dstaddr, port);
- if (IS_ERR(info->id)) {
- rc = PTR_ERR(info->id);
+ sc->rdma.cm_id = smbd_create_id(info, dstaddr, port);
+ if (IS_ERR(sc->rdma.cm_id)) {
+ rc = PTR_ERR(sc->rdma.cm_id);
goto out1;
}
+ sc->ib.dev = sc->rdma.cm_id->device;
- if (!frwr_is_supported(&info->id->device->attrs)) {
+ if (!frwr_is_supported(&sc->ib.dev->attrs)) {
log_rdma_event(ERR, "Fast Registration Work Requests (FRWR) is not supported\n");
log_rdma_event(ERR, "Device capability flags = %llx max_fast_reg_page_list_len = %u\n",
- info->id->device->attrs.device_cap_flags,
- info->id->device->attrs.max_fast_reg_page_list_len);
+ sc->ib.dev->attrs.device_cap_flags,
+ sc->ib.dev->attrs.max_fast_reg_page_list_len);
rc = -EPROTONOSUPPORT;
goto out2;
}
info->max_frmr_depth = min_t(int,
smbd_max_frmr_depth,
- info->id->device->attrs.max_fast_reg_page_list_len);
+ sc->ib.dev->attrs.max_fast_reg_page_list_len);
info->mr_type = IB_MR_TYPE_MEM_REG;
- if (info->id->device->attrs.kernel_cap_flags & IBK_SG_GAPS_REG)
+ if (sc->ib.dev->attrs.kernel_cap_flags & IBK_SG_GAPS_REG)
info->mr_type = IB_MR_TYPE_SG_GAPS;
- info->pd = ib_alloc_pd(info->id->device, 0);
- if (IS_ERR(info->pd)) {
- rc = PTR_ERR(info->pd);
+ sc->ib.pd = ib_alloc_pd(sc->ib.dev, 0);
+ if (IS_ERR(sc->ib.pd)) {
+ rc = PTR_ERR(sc->ib.pd);
log_rdma_event(ERR, "ib_alloc_pd() returned %d\n", rc);
goto out2;
}
@@ -666,8 +673,8 @@ static int smbd_ia_open(
return 0;
out2:
- rdma_destroy_id(info->id);
- info->id = NULL;
+ rdma_destroy_id(sc->rdma.cm_id);
+ sc->rdma.cm_id = NULL;
out1:
return rc;
@@ -681,6 +688,7 @@ out1:
*/
static int smbd_post_send_negotiate_req(struct smbd_connection *info)
{
+ struct smbdirect_socket *sc = &info->socket;
struct ib_send_wr send_wr;
int rc = -ENOMEM;
struct smbd_request *request;
@@ -704,18 +712,18 @@ static int smbd_post_send_negotiate_req(
request->num_sge = 1;
request->sge[0].addr = ib_dma_map_single(
- info->id->device, (void *)packet,
+ sc->ib.dev, (void *)packet,
sizeof(*packet), DMA_TO_DEVICE);
- if (ib_dma_mapping_error(info->id->device, request->sge[0].addr)) {
+ if (ib_dma_mapping_error(sc->ib.dev, request->sge[0].addr)) {
rc = -EIO;
goto dma_mapping_failed;
}
request->sge[0].length = sizeof(*packet);
- request->sge[0].lkey = info->pd->local_dma_lkey;
+ request->sge[0].lkey = sc->ib.pd->local_dma_lkey;
ib_dma_sync_single_for_device(
- info->id->device, request->sge[0].addr,
+ sc->ib.dev, request->sge[0].addr,
request->sge[0].length, DMA_TO_DEVICE);
request->cqe.done = send_done;
@@ -732,14 +740,14 @@ static int smbd_post_send_negotiate_req(
request->sge[0].length, request->sge[0].lkey);
atomic_inc(&info->send_pending);
- rc = ib_post_send(info->id->qp, &send_wr, NULL);
+ rc = ib_post_send(sc->ib.qp, &send_wr, NULL);
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(&info->send_pending);
- ib_dma_unmap_single(info->id->device, request->sge[0].addr,
+ ib_dma_unmap_single(sc->ib.dev, request->sge[0].addr,
request->sge[0].length, DMA_TO_DEVICE);
smbd_disconnect_rdma_connection(info);
@@ -791,6 +799,7 @@ static int manage_keep_alive_before_send
static int smbd_post_send(struct smbd_connection *info,
struct smbd_request *request)
{
+ struct smbdirect_socket *sc = &info->socket;
struct ib_send_wr send_wr;
int rc, i;
@@ -799,7 +808,7 @@ static int smbd_post_send(struct smbd_co
"rdma_request sge[%d] addr=0x%llx length=%u\n",
i, request->sge[i].addr, request->sge[i].length);
ib_dma_sync_single_for_device(
- info->id->device,
+ sc->ib.dev,
request->sge[i].addr,
request->sge[i].length,
DMA_TO_DEVICE);
@@ -814,7 +823,7 @@ static int smbd_post_send(struct smbd_co
send_wr.opcode = IB_WR_SEND;
send_wr.send_flags = IB_SEND_SIGNALED;
- rc = ib_post_send(info->id->qp, &send_wr, NULL);
+ rc = ib_post_send(sc->ib.qp, &send_wr, NULL);
if (rc) {
log_rdma_send(ERR, "ib_post_send failed rc=%d\n", rc);
smbd_disconnect_rdma_connection(info);
@@ -831,6 +840,7 @@ static int smbd_post_send_iter(struct sm
struct iov_iter *iter,
int *_remaining_data_length)
{
+ struct smbdirect_socket *sc = &info->socket;
int i, rc;
int header_length;
int data_length;
@@ -842,11 +852,11 @@ wait_credit:
/* Wait for send credits. A SMBD packet needs one credit */
rc = wait_event_interruptible(info->wait_send_queue,
atomic_read(&info->send_credits) > 0 ||
- info->transport_status != SMBD_CONNECTED);
+ sc->status != SMBDIRECT_SOCKET_CONNECTED);
if (rc)
goto err_wait_credit;
- if (info->transport_status != SMBD_CONNECTED) {
+ if (sc->status != SMBDIRECT_SOCKET_CONNECTED) {
log_outgoing(ERR, "disconnected not sending on wait_credit\n");
rc = -EAGAIN;
goto err_wait_credit;
@@ -859,9 +869,9 @@ wait_credit:
wait_send_queue:
wait_event(info->wait_post_send,
atomic_read(&info->send_pending) < info->send_credit_target ||
- info->transport_status != SMBD_CONNECTED);
+ sc->status != SMBDIRECT_SOCKET_CONNECTED);
- if (info->transport_status != SMBD_CONNECTED) {
+ if (sc->status != SMBDIRECT_SOCKET_CONNECTED) {
log_outgoing(ERR, "disconnected not sending on wait_send_queue\n");
rc = -EAGAIN;
goto err_wait_send_queue;
@@ -888,8 +898,8 @@ wait_send_queue:
.nr_sge = 1,
.max_sge = SMBDIRECT_MAX_SEND_SGE,
.sge = request->sge,
- .device = info->id->device,
- .local_dma_lkey = info->pd->local_dma_lkey,
+ .device = sc->ib.dev,
+ .local_dma_lkey = sc->ib.pd->local_dma_lkey,
.direction = DMA_TO_DEVICE,
};
@@ -941,18 +951,18 @@ wait_send_queue:
if (!data_length)
header_length = offsetof(struct smbdirect_data_transfer, padding);
- request->sge[0].addr = ib_dma_map_single(info->id->device,
+ request->sge[0].addr = ib_dma_map_single(sc->ib.dev,
(void *)packet,
header_length,
DMA_TO_DEVICE);
- if (ib_dma_mapping_error(info->id->device, request->sge[0].addr)) {
+ if (ib_dma_mapping_error(sc->ib.dev, request->sge[0].addr)) {
rc = -EIO;
request->sge[0].addr = 0;
goto err_dma;
}
request->sge[0].length = header_length;
- request->sge[0].lkey = info->pd->local_dma_lkey;
+ request->sge[0].lkey = sc->ib.pd->local_dma_lkey;
rc = smbd_post_send(info, request);
if (!rc)
@@ -961,7 +971,7 @@ wait_send_queue:
err_dma:
for (i = 0; i < request->num_sge; i++)
if (request->sge[i].addr)
- ib_dma_unmap_single(info->id->device,
+ ib_dma_unmap_single(sc->ib.dev,
request->sge[i].addr,
request->sge[i].length,
DMA_TO_DEVICE);
@@ -1006,17 +1016,18 @@ static int smbd_post_send_empty(struct s
static int smbd_post_recv(
struct smbd_connection *info, struct smbd_response *response)
{
+ struct smbdirect_socket *sc = &info->socket;
struct ib_recv_wr recv_wr;
int rc = -EIO;
response->sge.addr = ib_dma_map_single(
- info->id->device, response->packet,
+ sc->ib.dev, response->packet,
info->max_receive_size, DMA_FROM_DEVICE);
- if (ib_dma_mapping_error(info->id->device, response->sge.addr))
+ if (ib_dma_mapping_error(sc->ib.dev, response->sge.addr))
return rc;
response->sge.length = info->max_receive_size;
- response->sge.lkey = info->pd->local_dma_lkey;
+ response->sge.lkey = sc->ib.pd->local_dma_lkey;
response->cqe.done = recv_done;
@@ -1025,9 +1036,9 @@ static int smbd_post_recv(
recv_wr.sg_list = &response->sge;
recv_wr.num_sge = 1;
- rc = ib_post_recv(info->id->qp, &recv_wr, NULL);
+ rc = ib_post_recv(sc->ib.qp, &recv_wr, NULL);
if (rc) {
- ib_dma_unmap_single(info->id->device, response->sge.addr,
+ ib_dma_unmap_single(sc->ib.dev, response->sge.addr,
response->sge.length, DMA_FROM_DEVICE);
smbd_disconnect_rdma_connection(info);
log_rdma_recv(ERR, "ib_post_recv failed rc=%d\n", rc);
@@ -1185,9 +1196,10 @@ static struct smbd_response *get_receive
static void put_receive_buffer(
struct smbd_connection *info, struct smbd_response *response)
{
+ struct smbdirect_socket *sc = &info->socket;
unsigned long flags;
- ib_dma_unmap_single(info->id->device, response->sge.addr,
+ ib_dma_unmap_single(sc->ib.dev, response->sge.addr,
response->sge.length, DMA_FROM_DEVICE);
spin_lock_irqsave(&info->receive_queue_lock, flags);
@@ -1287,6 +1299,7 @@ static void idle_connection_timer(struct
void smbd_destroy(struct TCP_Server_Info *server)
{
struct smbd_connection *info = server->smbd_conn;
+ struct smbdirect_socket *sc;
struct smbd_response *response;
unsigned long flags;
@@ -1294,19 +1307,21 @@ void smbd_destroy(struct TCP_Server_Info
log_rdma_event(INFO, "rdma session already destroyed\n");
return;
}
+ sc = &info->socket;
log_rdma_event(INFO, "destroying rdma session\n");
- if (info->transport_status != SMBD_DISCONNECTED) {
- rdma_disconnect(server->smbd_conn->id);
+ if (sc->status != SMBDIRECT_SOCKET_DISCONNECTED) {
+ rdma_disconnect(sc->rdma.cm_id);
log_rdma_event(INFO, "wait for transport being disconnected\n");
wait_event_interruptible(
info->disconn_wait,
- info->transport_status == SMBD_DISCONNECTED);
+ sc->status == SMBDIRECT_SOCKET_DISCONNECTED);
}
log_rdma_event(INFO, "destroying qp\n");
- ib_drain_qp(info->id->qp);
- rdma_destroy_qp(info->id);
+ ib_drain_qp(sc->ib.qp);
+ rdma_destroy_qp(sc->rdma.cm_id);
+ sc->ib.qp = NULL;
log_rdma_event(INFO, "cancelling idle timer\n");
cancel_delayed_work_sync(&info->idle_timer_work);
@@ -1353,10 +1368,10 @@ void smbd_destroy(struct TCP_Server_Info
}
destroy_mr_list(info);
- ib_free_cq(info->send_cq);
- ib_free_cq(info->recv_cq);
- ib_dealloc_pd(info->pd);
- rdma_destroy_id(info->id);
+ ib_free_cq(sc->ib.send_cq);
+ ib_free_cq(sc->ib.recv_cq);
+ ib_dealloc_pd(sc->ib.pd);
+ rdma_destroy_id(sc->rdma.cm_id);
/* free mempools */
mempool_destroy(info->request_mempool);
@@ -1365,7 +1380,7 @@ void smbd_destroy(struct TCP_Server_Info
mempool_destroy(info->response_mempool);
kmem_cache_destroy(info->response_cache);
- info->transport_status = SMBD_DESTROYED;
+ sc->status = SMBDIRECT_SOCKET_DESTROYED;
destroy_workqueue(info->workqueue);
log_rdma_event(INFO, "rdma session destroyed\n");
@@ -1390,7 +1405,7 @@ int smbd_reconnect(struct TCP_Server_Inf
* This is possible if transport is disconnected and we haven't received
* notification from RDMA, but upper layer has detected timeout
*/
- if (server->smbd_conn->transport_status == SMBD_CONNECTED) {
+ if (server->smbd_conn->socket.status == SMBDIRECT_SOCKET_CONNECTED) {
log_rdma_event(INFO, "disconnecting transport\n");
smbd_destroy(server);
}
@@ -1489,6 +1504,7 @@ static struct smbd_connection *_smbd_get
{
int rc;
struct smbd_connection *info;
+ struct smbdirect_socket *sc;
struct rdma_conn_param conn_param;
struct ib_qp_init_attr qp_attr;
struct sockaddr_in *addr_in = (struct sockaddr_in *) dstaddr;
@@ -1498,29 +1514,30 @@ static struct smbd_connection *_smbd_get
info = kzalloc(sizeof(struct smbd_connection), GFP_KERNEL);
if (!info)
return NULL;
+ sc = &info->socket;
- info->transport_status = SMBD_CONNECTING;
+ sc->status = SMBDIRECT_SOCKET_CONNECTING;
rc = smbd_ia_open(info, dstaddr, port);
if (rc) {
log_rdma_event(INFO, "smbd_ia_open rc=%d\n", rc);
goto create_id_failed;
}
- if (smbd_send_credit_target > info->id->device->attrs.max_cqe ||
- smbd_send_credit_target > info->id->device->attrs.max_qp_wr) {
+ if (smbd_send_credit_target > sc->ib.dev->attrs.max_cqe ||
+ smbd_send_credit_target > sc->ib.dev->attrs.max_qp_wr) {
log_rdma_event(ERR, "consider lowering send_credit_target = %d. Possible CQE overrun, device reporting max_cqe %d max_qp_wr %d\n",
smbd_send_credit_target,
- info->id->device->attrs.max_cqe,
- info->id->device->attrs.max_qp_wr);
+ sc->ib.dev->attrs.max_cqe,
+ sc->ib.dev->attrs.max_qp_wr);
goto config_failed;
}
- if (smbd_receive_credit_max > info->id->device->attrs.max_cqe ||
- smbd_receive_credit_max > info->id->device->attrs.max_qp_wr) {
+ if (smbd_receive_credit_max > sc->ib.dev->attrs.max_cqe ||
+ smbd_receive_credit_max > sc->ib.dev->attrs.max_qp_wr) {
log_rdma_event(ERR, "consider lowering receive_credit_max = %d. Possible CQE overrun, device reporting max_cqe %d max_qp_wr %d\n",
smbd_receive_credit_max,
- info->id->device->attrs.max_cqe,
- info->id->device->attrs.max_qp_wr);
+ sc->ib.dev->attrs.max_cqe,
+ sc->ib.dev->attrs.max_qp_wr);
goto config_failed;
}
@@ -1531,32 +1548,30 @@ static struct smbd_connection *_smbd_get
info->max_receive_size = smbd_max_receive_size;
info->keep_alive_interval = smbd_keep_alive_interval;
- if (info->id->device->attrs.max_send_sge < SMBDIRECT_MAX_SEND_SGE ||
- info->id->device->attrs.max_recv_sge < SMBDIRECT_MAX_RECV_SGE) {
+ if (sc->ib.dev->attrs.max_send_sge < SMBDIRECT_MAX_SEND_SGE ||
+ sc->ib.dev->attrs.max_recv_sge < SMBDIRECT_MAX_RECV_SGE) {
log_rdma_event(ERR,
"device %.*s max_send_sge/max_recv_sge = %d/%d too small\n",
IB_DEVICE_NAME_MAX,
- info->id->device->name,
- info->id->device->attrs.max_send_sge,
- info->id->device->attrs.max_recv_sge);
+ sc->ib.dev->name,
+ sc->ib.dev->attrs.max_send_sge,
+ sc->ib.dev->attrs.max_recv_sge);
goto config_failed;
}
- info->send_cq = NULL;
- info->recv_cq = NULL;
- info->send_cq =
- ib_alloc_cq_any(info->id->device, info,
+ sc->ib.send_cq =
+ ib_alloc_cq_any(sc->ib.dev, info,
info->send_credit_target, IB_POLL_SOFTIRQ);
- if (IS_ERR(info->send_cq)) {
- info->send_cq = NULL;
+ if (IS_ERR(sc->ib.send_cq)) {
+ sc->ib.send_cq = NULL;
goto alloc_cq_failed;
}
- info->recv_cq =
- ib_alloc_cq_any(info->id->device, info,
+ sc->ib.recv_cq =
+ ib_alloc_cq_any(sc->ib.dev, info,
info->receive_credit_max, IB_POLL_SOFTIRQ);
- if (IS_ERR(info->recv_cq)) {
- info->recv_cq = NULL;
+ if (IS_ERR(sc->ib.recv_cq)) {
+ sc->ib.recv_cq = NULL;
goto alloc_cq_failed;
}
@@ -1570,29 +1585,30 @@ static struct smbd_connection *_smbd_get
qp_attr.cap.max_inline_data = 0;
qp_attr.sq_sig_type = IB_SIGNAL_REQ_WR;
qp_attr.qp_type = IB_QPT_RC;
- qp_attr.send_cq = info->send_cq;
- qp_attr.recv_cq = info->recv_cq;
+ qp_attr.send_cq = sc->ib.send_cq;
+ qp_attr.recv_cq = sc->ib.recv_cq;
qp_attr.port_num = ~0;
- rc = rdma_create_qp(info->id, info->pd, &qp_attr);
+ rc = rdma_create_qp(sc->rdma.cm_id, sc->ib.pd, &qp_attr);
if (rc) {
log_rdma_event(ERR, "rdma_create_qp failed %i\n", rc);
goto create_qp_failed;
}
+ sc->ib.qp = sc->rdma.cm_id->qp;
memset(&conn_param, 0, sizeof(conn_param));
conn_param.initiator_depth = 0;
conn_param.responder_resources =
- min(info->id->device->attrs.max_qp_rd_atom,
+ min(sc->ib.dev->attrs.max_qp_rd_atom,
SMBD_CM_RESPONDER_RESOURCES);
info->responder_resources = conn_param.responder_resources;
log_rdma_mr(INFO, "responder_resources=%d\n",
info->responder_resources);
/* Need to send IRD/ORD in private data for iWARP */
- info->id->device->ops.get_port_immutable(
- info->id->device, info->id->port_num, &port_immutable);
+ sc->ib.dev->ops.get_port_immutable(
+ sc->ib.dev, sc->rdma.cm_id->port_num, &port_immutable);
if (port_immutable.core_cap_flags & RDMA_CORE_PORT_IWARP) {
ird_ord_hdr[0] = info->responder_resources;
ird_ord_hdr[1] = 1;
@@ -1613,16 +1629,16 @@ static struct smbd_connection *_smbd_get
init_waitqueue_head(&info->conn_wait);
init_waitqueue_head(&info->disconn_wait);
init_waitqueue_head(&info->wait_reassembly_queue);
- rc = rdma_connect(info->id, &conn_param);
+ rc = rdma_connect(sc->rdma.cm_id, &conn_param);
if (rc) {
log_rdma_event(ERR, "rdma_connect() failed with %i\n", rc);
goto rdma_connect_failed;
}
wait_event_interruptible(
- info->conn_wait, info->transport_status != SMBD_CONNECTING);
+ info->conn_wait, sc->status != SMBDIRECT_SOCKET_CONNECTING);
- if (info->transport_status != SMBD_CONNECTED) {
+ if (sc->status != SMBDIRECT_SOCKET_CONNECTED) {
log_rdma_event(ERR, "rdma_connect failed port=%d\n", port);
goto rdma_connect_failed;
}
@@ -1673,26 +1689,26 @@ allocate_mr_failed:
negotiation_failed:
cancel_delayed_work_sync(&info->idle_timer_work);
destroy_caches_and_workqueue(info);
- info->transport_status = SMBD_NEGOTIATE_FAILED;
+ sc->status = SMBDIRECT_SOCKET_NEGOTIATE_FAILED;
init_waitqueue_head(&info->conn_wait);
- rdma_disconnect(info->id);
+ rdma_disconnect(sc->rdma.cm_id);
wait_event(info->conn_wait,
- info->transport_status == SMBD_DISCONNECTED);
+ sc->status == SMBDIRECT_SOCKET_DISCONNECTED);
allocate_cache_failed:
rdma_connect_failed:
- rdma_destroy_qp(info->id);
+ rdma_destroy_qp(sc->rdma.cm_id);
create_qp_failed:
alloc_cq_failed:
- if (info->send_cq)
- ib_free_cq(info->send_cq);
- if (info->recv_cq)
- ib_free_cq(info->recv_cq);
+ if (sc->ib.send_cq)
+ ib_free_cq(sc->ib.send_cq);
+ if (sc->ib.recv_cq)
+ ib_free_cq(sc->ib.recv_cq);
config_failed:
- ib_dealloc_pd(info->pd);
- rdma_destroy_id(info->id);
+ ib_dealloc_pd(sc->ib.pd);
+ rdma_destroy_id(sc->rdma.cm_id);
create_id_failed:
kfree(info);
@@ -1732,6 +1748,7 @@ try_again:
static int smbd_recv_buf(struct smbd_connection *info, char *buf,
unsigned int size)
{
+ struct smbdirect_socket *sc = &info->socket;
struct smbd_response *response;
struct smbdirect_data_transfer *data_transfer;
int to_copy, to_read, data_read, offset;
@@ -1846,12 +1863,12 @@ read_rfc1002_done:
rc = wait_event_interruptible(
info->wait_reassembly_queue,
info->reassembly_data_length >= size ||
- info->transport_status != SMBD_CONNECTED);
+ sc->status != SMBDIRECT_SOCKET_CONNECTED);
/* Don't return any data if interrupted */
if (rc)
return rc;
- if (info->transport_status != SMBD_CONNECTED) {
+ if (sc->status != SMBDIRECT_SOCKET_CONNECTED) {
log_read(ERR, "disconnected\n");
return -ECONNABORTED;
}
@@ -1869,6 +1886,7 @@ static int smbd_recv_page(struct smbd_co
struct page *page, unsigned int page_offset,
unsigned int to_read)
{
+ struct smbdirect_socket *sc = &info->socket;
int ret;
char *to_address;
void *page_address;
@@ -1877,7 +1895,7 @@ static int smbd_recv_page(struct smbd_co
ret = wait_event_interruptible(
info->wait_reassembly_queue,
info->reassembly_data_length >= to_read ||
- info->transport_status != SMBD_CONNECTED);
+ sc->status != SMBDIRECT_SOCKET_CONNECTED);
if (ret)
return ret;
@@ -1952,12 +1970,13 @@ int smbd_send(struct TCP_Server_Info *se
int num_rqst, struct smb_rqst *rqst_array)
{
struct smbd_connection *info = server->smbd_conn;
+ struct smbdirect_socket *sc = &info->socket;
struct smb_rqst *rqst;
struct iov_iter iter;
unsigned int remaining_data_length, klen;
int rc, i, rqst_idx;
- if (info->transport_status != SMBD_CONNECTED)
+ if (sc->status != SMBDIRECT_SOCKET_CONNECTED)
return -EAGAIN;
/*
@@ -2051,6 +2070,7 @@ static void smbd_mr_recovery_work(struct
{
struct smbd_connection *info =
container_of(work, struct smbd_connection, mr_recovery_work);
+ struct smbdirect_socket *sc = &info->socket;
struct smbd_mr *smbdirect_mr;
int rc;
@@ -2068,7 +2088,7 @@ static void smbd_mr_recovery_work(struct
}
smbdirect_mr->mr = ib_alloc_mr(
- info->pd, info->mr_type,
+ sc->ib.pd, info->mr_type,
info->max_frmr_depth);
if (IS_ERR(smbdirect_mr->mr)) {
log_rdma_mr(ERR, "ib_alloc_mr failed mr_type=%x max_frmr_depth=%x\n",
@@ -2097,12 +2117,13 @@ static void smbd_mr_recovery_work(struct
static void destroy_mr_list(struct smbd_connection *info)
{
+ struct smbdirect_socket *sc = &info->socket;
struct smbd_mr *mr, *tmp;
cancel_work_sync(&info->mr_recovery_work);
list_for_each_entry_safe(mr, tmp, &info->mr_list, list) {
if (mr->state == MR_INVALIDATED)
- ib_dma_unmap_sg(info->id->device, mr->sgt.sgl,
+ ib_dma_unmap_sg(sc->ib.dev, mr->sgt.sgl,
mr->sgt.nents, mr->dir);
ib_dereg_mr(mr->mr);
kfree(mr->sgt.sgl);
@@ -2119,6 +2140,7 @@ static void destroy_mr_list(struct smbd_
*/
static int allocate_mr_list(struct smbd_connection *info)
{
+ struct smbdirect_socket *sc = &info->socket;
int i;
struct smbd_mr *smbdirect_mr, *tmp;
@@ -2134,7 +2156,7 @@ static int allocate_mr_list(struct smbd_
smbdirect_mr = kzalloc(sizeof(*smbdirect_mr), GFP_KERNEL);
if (!smbdirect_mr)
goto cleanup_entries;
- smbdirect_mr->mr = ib_alloc_mr(info->pd, info->mr_type,
+ smbdirect_mr->mr = ib_alloc_mr(sc->ib.pd, info->mr_type,
info->max_frmr_depth);
if (IS_ERR(smbdirect_mr->mr)) {
log_rdma_mr(ERR, "ib_alloc_mr failed mr_type=%x max_frmr_depth=%x\n",
@@ -2179,20 +2201,20 @@ cleanup_entries:
*/
static struct smbd_mr *get_mr(struct smbd_connection *info)
{
+ struct smbdirect_socket *sc = &info->socket;
struct smbd_mr *ret;
int rc;
again:
rc = wait_event_interruptible(info->wait_mr,
atomic_read(&info->mr_ready_count) ||
- info->transport_status != SMBD_CONNECTED);
+ sc->status != SMBDIRECT_SOCKET_CONNECTED);
if (rc) {
log_rdma_mr(ERR, "wait_event_interruptible rc=%x\n", rc);
return NULL;
}
- if (info->transport_status != SMBD_CONNECTED) {
- log_rdma_mr(ERR, "info->transport_status=%x\n",
- info->transport_status);
+ if (sc->status != SMBDIRECT_SOCKET_CONNECTED) {
+ log_rdma_mr(ERR, "sc->status=%x\n", sc->status);
return NULL;
}
@@ -2245,6 +2267,7 @@ struct smbd_mr *smbd_register_mr(struct
struct iov_iter *iter,
bool writing, bool need_invalidate)
{
+ struct smbdirect_socket *sc = &info->socket;
struct smbd_mr *smbdirect_mr;
int rc, num_pages;
enum dma_data_direction dir;
@@ -2274,7 +2297,7 @@ struct smbd_mr *smbd_register_mr(struct
num_pages, iov_iter_count(iter), info->max_frmr_depth);
smbd_iter_to_mr(info, iter, &smbdirect_mr->sgt, info->max_frmr_depth);
- rc = ib_dma_map_sg(info->id->device, smbdirect_mr->sgt.sgl,
+ rc = ib_dma_map_sg(sc->ib.dev, smbdirect_mr->sgt.sgl,
smbdirect_mr->sgt.nents, dir);
if (!rc) {
log_rdma_mr(ERR, "ib_dma_map_sg num_pages=%x dir=%x rc=%x\n",
@@ -2310,7 +2333,7 @@ struct smbd_mr *smbd_register_mr(struct
* on IB_WR_REG_MR. Hardware enforces a barrier and order of execution
* on the next ib_post_send when we actually send I/O to remote peer
*/
- rc = ib_post_send(info->id->qp, ®_wr->wr, NULL);
+ rc = ib_post_send(sc->ib.qp, ®_wr->wr, NULL);
if (!rc)
return smbdirect_mr;
@@ -2319,7 +2342,7 @@ struct smbd_mr *smbd_register_mr(struct
/* If all failed, attempt to recover this MR by setting it MR_ERROR*/
map_mr_error:
- ib_dma_unmap_sg(info->id->device, smbdirect_mr->sgt.sgl,
+ ib_dma_unmap_sg(sc->ib.dev, smbdirect_mr->sgt.sgl,
smbdirect_mr->sgt.nents, smbdirect_mr->dir);
dma_map_error:
@@ -2357,6 +2380,7 @@ int smbd_deregister_mr(struct smbd_mr *s
{
struct ib_send_wr *wr;
struct smbd_connection *info = smbdirect_mr->conn;
+ struct smbdirect_socket *sc = &info->socket;
int rc = 0;
if (smbdirect_mr->need_invalidate) {
@@ -2370,7 +2394,7 @@ int smbd_deregister_mr(struct smbd_mr *s
wr->send_flags = IB_SEND_SIGNALED;
init_completion(&smbdirect_mr->invalidate_done);
- rc = ib_post_send(info->id->qp, wr, NULL);
+ rc = ib_post_send(sc->ib.qp, wr, NULL);
if (rc) {
log_rdma_mr(ERR, "ib_post_send failed rc=%x\n", rc);
smbd_disconnect_rdma_connection(info);
@@ -2387,7 +2411,7 @@ int smbd_deregister_mr(struct smbd_mr *s
if (smbdirect_mr->state == MR_INVALIDATED) {
ib_dma_unmap_sg(
- info->id->device, smbdirect_mr->sgt.sgl,
+ sc->ib.dev, smbdirect_mr->sgt.sgl,
smbdirect_mr->sgt.nents,
smbdirect_mr->dir);
smbdirect_mr->state = MR_READY;
--- a/fs/smb/client/smbdirect.h
+++ b/fs/smb/client/smbdirect.h
@@ -15,6 +15,8 @@
#include <rdma/rdma_cm.h>
#include <linux/mempool.h>
+#include "../common/smbdirect/smbdirect_socket.h"
+
extern int rdma_readwrite_threshold;
extern int smbd_max_frmr_depth;
extern int smbd_keep_alive_interval;
@@ -50,14 +52,8 @@ enum smbd_connection_status {
* 5. mempools for allocating packets
*/
struct smbd_connection {
- enum smbd_connection_status transport_status;
+ struct smbdirect_socket socket;
- /* RDMA related */
- struct rdma_cm_id *id;
- struct ib_qp_init_attr qp_attr;
- struct ib_pd *pd;
- struct ib_cq *send_cq, *recv_cq;
- struct ib_device_attr dev_attr;
int ri_rc;
struct completion ri_done;
wait_queue_head_t conn_wait;
next prev parent reply other threads:[~2025-07-22 14:16 UTC|newest]
Thread overview: 206+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-22 13:42 [PATCH 6.15 000/187] 6.15.8-rc1 review Greg Kroah-Hartman
2025-07-22 13:42 ` [PATCH 6.15 001/187] phy: tegra: xusb: Fix unbalanced regulator disable in UTMI PHY mode Greg Kroah-Hartman
2025-07-22 13:42 ` [PATCH 6.15 002/187] phy: tegra: xusb: Decouple CYA_TRK_CODE_UPDATE_ON_IDLE from trk_hw_mode Greg Kroah-Hartman
2025-07-22 13:42 ` [PATCH 6.15 003/187] phy: tegra: xusb: Disable periodic tracking on Tegra234 Greg Kroah-Hartman
2025-07-22 13:42 ` [PATCH 6.15 004/187] USB: serial: option: add Telit Cinterion FE910C04 (ECM) composition Greg Kroah-Hartman
2025-07-22 13:42 ` [PATCH 6.15 005/187] USB: serial: option: add Foxconn T99W640 Greg Kroah-Hartman
2025-07-22 13:42 ` [PATCH 6.15 006/187] USB: serial: ftdi_sio: add support for NDI EMGUIDE GEMINI Greg Kroah-Hartman
2025-07-22 13:42 ` [PATCH 6.15 007/187] usb: musb: fix gadget state on disconnect Greg Kroah-Hartman
2025-07-22 13:42 ` [PATCH 6.15 008/187] usb: dwc2: gadget: Fix enter to hibernation for UTMI+ PHY Greg Kroah-Hartman
2025-07-22 13:42 ` [PATCH 6.15 009/187] usb: gadget: configfs: Fix OOB read on empty string write Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 010/187] i2c: stm32: fix the device used for the DMA map Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 011/187] i2c: stm32f7: unmap DMA mapped buffer Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 012/187] i2c: omap: Handle omap_i2c_init() errors in omap_i2c_probe() Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 013/187] i2c: omap: Fix an error handling path " Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 014/187] thunderbolt: Fix wake on connect at runtime Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 015/187] thunderbolt: Fix bit masking in tb_dp_port_set_hops() Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 016/187] Revert "staging: vchiq_arm: Improve initial VCHIQ connect" Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 017/187] Revert "staging: vchiq_arm: Create keep-alive thread during probe" Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 018/187] nvmem: imx-ocotp: fix MAC address byte length Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 019/187] nvmem: layouts: u-boot-env: remove crc32 endianness conversion Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 020/187] Input: xpad - set correct controller type for Acer NGR200 Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 021/187] pch_uart: Fix dma_sync_sg_for_device() nents value Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 022/187] spi: Add check for 8-bit transfer with 8 IO mode support Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 023/187] tools/hv: fcopy: Fix irregularities with size of ring buffer Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 024/187] dm-bufio: fix sched in atomic context Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 025/187] HID: core: ensure the allocated report buffer can contain the reserved report ID Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 026/187] HID: core: ensure __hid_request reserves the report ID as the first byte Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 027/187] HID: core: do not bypass hid_hw_raw_request Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 028/187] tracing/probes: Avoid using params uninitialized in parse_btf_arg() Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 029/187] tracing: Add down_write(trace_event_sem) when adding trace event Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 030/187] tracing/osnoise: Fix crash in timerlat_dump_stack() Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 031/187] rust: init: Fix generics in *_init! macros Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 032/187] objtool/rust: add one more `noreturn` Rust function for Rust 1.89.0 Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 033/187] drm/amdgpu/gfx8: reset compute ring wptr on the GPU on resume Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 034/187] drm/panfrost: Fix scheduler workqueue bug Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 035/187] drm/amdgpu: Increase reset counter only on success Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 036/187] drm/amd/display: Disable CRTC degamma LUT for DCN401 Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 037/187] drm/amd/display: Free memory allocation Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 038/187] netfs: Fix copy-to-cache so that it performs collection with ceph+fscache Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 039/187] netfs: Fix race between cache write completion and ALL_QUEUED being set Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 040/187] ALSA: hda/realtek - Fix mute LED for HP Victus 16-r0xxx Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 041/187] ALSA: hda/realtek: Add quirk for ASUS ROG Strix G712LWS Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 042/187] io_uring/poll: fix POLLERR handling Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 043/187] Fix SMB311 posix special file creation to servers which do not advertise reparse support Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 044/187] mptcp: make fallback action and fallback decision atomic Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 045/187] mptcp: plug races between subflow fail and subflow creation Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 046/187] mptcp: reset fallback status gracefully at disconnect() time Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 047/187] phonet/pep: Move call to pn_skb_get_dst_sockaddr() earlier in pep_sock_accept() Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 048/187] net/mlx5: Update the list of the PCI supported devices Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 049/187] arm64: dts: imx8mp-venice-gw74xx: fix TPM SPI frequency Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 050/187] arm64: dts: add big-endian property back into watchdog node Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 051/187] arm64: dts: freescale: imx8mm-verdin: Keep LDO5 always on Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 052/187] arm64: dts: imx8mp-venice-gw71xx: fix TPM SPI frequency Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 053/187] arm64: dts: imx8mp-venice-gw72xx: " Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 054/187] arm64: dts: imx8mp-venice-gw73xx: " Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 055/187] arm64: dts: rockchip: list all CPU supplies on ArmSoM Sige5 Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 056/187] arm64: dts: rockchip: use cs-gpios for spi1 on ringneck Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 057/187] af_packet: fix the SO_SNDTIMEO constraint not effective on tpacked_snd() Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 058/187] af_packet: fix soft lockup issue caused by tpacket_snd() Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 059/187] Bluetooth: btintel: Check if controller is ISO capable on btintel_classify_pkt_type Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 060/187] cpuidle: psci: Fix cpuhotplug routine with PREEMPT_RT=y Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 061/187] dmaengine: mediatek: Fix a flag reuse error in mtk_cqdma_tx_status() Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 062/187] dmaengine: nbpfaxi: Fix memory corruption in probe() Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 063/187] isofs: Verify inode mode when loading from disk Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 064/187] memstick: core: Zero initialize id_reg in h_memstick_read_dev_id() Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 065/187] mmc: bcm2835: Fix dma_unmap_sg() nents value Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 066/187] mmc: sdhci-pci: Quirk for broken command queuing on Intel GLK-based Positivo models Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 067/187] mmc: sdhci_am654: Workaround for Errata i2312 Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 068/187] net: stmmac: intel: populate entire system_counterval_t in get_time_fn() callback Greg Kroah-Hartman
2025-07-22 13:43 ` [PATCH 6.15 069/187] net: libwx: remove duplicate page_pool_put_full_page() Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 070/187] net: libwx: fix the using of Rx buffer DMA Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 071/187] net: libwx: properly reset Rx ring descriptor Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 072/187] pmdomain: governor: Consider CPU latency tolerance from pm_domain_cpu_gov Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 073/187] s390/bpf: Fix bpf_arch_text_poke() with new_addr == NULL again Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 074/187] smb: client: fix use-after-free in crypt_message when using async crypto Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 075/187] soc: aspeed: lpc-snoop: Cleanup resources in stack-order Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 076/187] soc: aspeed: lpc-snoop: Dont disable channels that arent enabled Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 077/187] soundwire: Revert "soundwire: qcom: Add set_channel_map api support" Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 078/187] xfs: dont allocate the xfs_extent_busy structure for zoned RTGs Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 079/187] iio: accel: fxls8962af: Fix use after free in fxls8962af_fifo_flush Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 080/187] iio: adc: ad7380: fix adi,gain-milli property parsing Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 081/187] iio: adc: adi-axi-adc: fix ad7606_bus_reg_read() Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 082/187] iio: adc: axp20x_adc: Add missing sentinel to AXP717 ADC channel maps Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 083/187] iio: adc: max1363: Fix MAX1363_4X_CHANS/MAX1363_8X_CHANS[] Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 084/187] iio: adc: max1363: Reorder mode_list[] entries Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 085/187] iio: adc: stm32-adc: Fix race in installing chained IRQ handler Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 086/187] iio: backend: fix out-of-bound write Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 087/187] iio: common: st_sensors: Fix use of uninitialize device structs Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 088/187] comedi: pcl812: Fix bit shift out of bounds Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 089/187] comedi: aio_iiro_16: " Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 090/187] comedi: das16m1: " Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 091/187] comedi: das6402: " Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 092/187] comedi: comedi_test: Fix possible deletion of uninitialized timers Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 093/187] comedi: Fail COMEDI_INSNLIST ioctl if n_insns is too large Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 094/187] comedi: Fix some signed shift left operations Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 095/187] comedi: Fix use of uninitialized data in insn_rw_emulate_bits() Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 096/187] comedi: Fix initialization of data for instructions that write to subdevice Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 097/187] arm64: dts: rockchip: Add cd-gpios for sdcard detect on Cool Pi CM5 Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 098/187] arm64: dts: rockchip: Add cd-gpios for sdcard detect on Cool Pi 4B Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 099/187] soundwire: amd: fix for handling slave alerts after link is down Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 100/187] phy: use per-PHY lockdep keys Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 101/187] soundwire: amd: fix for clearing command status register Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 102/187] arm64: dts: imx95-19x19-evk: fix the overshoot issue of NETC Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 103/187] arm64: dts: imx95-15x15-evk: " Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 104/187] arm64: dts: imx95: Correct the DMA interrupter number of pcie0_ep Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 105/187] bpf: Reject %p% format string in bprintf-like helpers Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 106/187] selftests/sched_ext: Fix exit selftest hang on UP Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 107/187] wifi: iwlwifi: mask reserved bits in chan_state_active_bitmap Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 108/187] cachefiles: Fix the incorrect return value in __cachefiles_write() Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 109/187] ALSA: compress_offload: tighten ioctl command number checks Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 110/187] net: emaclite: Fix missing pointer increment in aligned_read() Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 111/187] block: fix kobject leak in blk_unregister_queue Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 112/187] net/sched: sch_qfq: Fix race condition on qfq_aggregate Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 113/187] rpl: Fix use-after-free in rpl_do_srh_inline() Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 114/187] smb: client: fix use-after-free in cifs_oplock_break Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 115/187] fix a leak in fcntl_dirnotify() Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 116/187] nvme: fix inconsistent RCU list manipulation in nvme_ns_add_to_ctrl_list() Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 117/187] nvme: fix endianness of command word prints in nvme_log_err_passthru() Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 118/187] smc: Fix various oops due to inet_sock type confusion Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 119/187] net: phy: Dont register LEDs for genphy Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 120/187] nvme: revert the cross-controller atomic write size validation Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 121/187] nvme: fix misaccounting of nvme-mpath inflight I/O Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 122/187] nvmet-tcp: fix callback lock for TLS handshake Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 123/187] wifi: cfg80211: remove scan request n_channels counted_by Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 124/187] can: tcan4x5x: fix reset gpio usage during probe Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 125/187] selftests: net: increase inter-packet timeout in udpgro.sh Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 126/187] hwmon: (corsair-cpro) Validate the size of the received input buffer Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 127/187] ice: add NULL check in eswitch lag check Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 128/187] ice: check correct pointer in fwlog debugfs Greg Kroah-Hartman
2025-07-22 13:44 ` [PATCH 6.15 129/187] usb: net: sierra: check for no status endpoint Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 130/187] loop: use kiocb helpers to fix lockdep warning Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 131/187] riscv: Enable interrupt during exception handling Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 132/187] riscv: traps_misaligned: properly sign extend value in misaligned load handler Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 133/187] Bluetooth: Fix null-ptr-deref in l2cap_sock_resume_cb() Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 134/187] Bluetooth: hci_sync: fix connectable extended advertising when using static random address Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 135/187] Bluetooth: SMP: If an unallowed command is received consider it a failure Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 136/187] Bluetooth: SMP: Fix using HCI_ERROR_REMOTE_USER_TERM on timeout Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 137/187] Bluetooth: hci_core: fix typos in macros Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 138/187] Bluetooth: hci_core: add missing braces when using macro parameters Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 139/187] Bluetooth: hci_dev: replace quirks integer by quirk_flags bitmap Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 140/187] Bluetooth: btusb: QCA: Fix downloading wrong NVM for WCN6855 GF variant without board ID Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 141/187] net/mlx5: Correctly set gso_size when LRO is used Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 142/187] net: airoha: fix potential use-after-free in airoha_npu_get() Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 143/187] ipv6: mcast: Delay put pmc->idev in mld_del_delrec() Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 144/187] net: fix segmentation after TCP/UDP fraglist GRO Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 145/187] netfilter: nf_conntrack: fix crash due to removal of uninitialised entry Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 146/187] drm/xe: Dont skip TLB invalidations on VF Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 147/187] drm/xe/pf: Prepare to stop SR-IOV support prior GT reset Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 148/187] drm/xe/pf: Resend PF provisioning after " Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 149/187] Bluetooth: L2CAP: Fix attempting to adjust outgoing MTU Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 150/187] hv_netvsc: Set VF priv_flags to IFF_NO_ADDRCONF before open to prevent IPv6 addrconf Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 151/187] virtio-net: fix recursived rtnl_lock() during probe() Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 152/187] tls: always refresh the queue when reading sock Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 153/187] net: vlan: fix VLAN 0 refcount imbalance of toggling filtering during runtime Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 154/187] net: bridge: Do not offload IGMP/MLD messages Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 155/187] net/sched: Return NULL when htb_lookup_leaf encounters an empty rbtree Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 156/187] rxrpc: Fix irq-disabled in local_bh_enable() Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 157/187] rxrpc: Fix recv-recv race of completed call Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 158/187] rxrpc: Fix notification vs call-release vs recvmsg Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 159/187] rxrpc: Fix transmission of an abort in response to an abort Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 160/187] rxrpc: Fix to use conn aborts for conn-wide failures Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 161/187] Revert "cgroup_freezer: cgroup_freezing: Check if not frozen" Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 162/187] drm/mediatek: Add wait_event_timeout when disabling plane Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 163/187] drm/mediatek: only announce AFBC if really supported Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 164/187] libbpf: Fix handling of BPF arena relocations Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 165/187] efivarfs: Fix memory leak of efivarfs_fs_info in fs_context error paths Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 166/187] sched: Change nr_uninterruptible type to unsigned long Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 167/187] usb: hub: fix detection of high tier USB3 devices behind suspended hubs Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 168/187] usb: hub: Fix flushing and scheduling of delayed work that tunes runtime pm Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 169/187] usb: hub: Fix flushing of delayed work used for post resume purposes Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 170/187] usb: hub: Dont try to recover devices lost during warm reset Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 171/187] usb: dwc3: qcom: Dont leave BCR asserted Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 172/187] net: libwx: fix multicast packets received count Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 173/187] rust: use `#[used(compiler)]` to fix build and `modpost` with Rust >= 1.89.0 Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 174/187] smb: smbdirect: add smbdirect_pdu.h with protocol definitions Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 175/187] smb: client: make use of common smbdirect_pdu.h Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 176/187] smb: smbdirect: add smbdirect.h with public structures Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 177/187] smb: smbdirect: add smbdirect_socket.h Greg Kroah-Hartman
2025-07-22 13:45 ` Greg Kroah-Hartman [this message]
2025-07-22 13:45 ` [PATCH 6.15 179/187] smb: smbdirect: introduce smbdirect_socket_parameters Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 180/187] smb: client: make use of common smbdirect_socket_parameters Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 181/187] cifs: Fix the smbd_response slab to allow usercopy Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 182/187] cifs: Fix reading into an ITER_FOLIOQ from the smbdirect code Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 183/187] sched,freezer: Remove unnecessary warning in __thaw_task Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 184/187] sched/ext: Prevent update_locked_rq() calls with NULL rq Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 185/187] drm/xe/mocs: Initialize MOCS index early Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 186/187] drm/xe: Move page fault init after topology init Greg Kroah-Hartman
2025-07-22 13:45 ` [PATCH 6.15 187/187] smb: client: let smbd_post_send_iter() respect the peers max_send_size and transmit all data Greg Kroah-Hartman
2025-07-22 16:25 ` [PATCH 6.15 000/187] 6.15.8-rc1 review Brett A C Sheffield
2025-07-22 16:13 ` Ronald Warsow
2025-07-22 17:36 ` Naresh Kamboju
2025-07-22 17:50 ` Nathan Chancellor
2025-07-22 19:16 ` Florian Fainelli
2025-07-22 20:57 ` Christian Heusel
2025-07-22 21:19 ` Shuah Khan
2025-07-22 21:42 ` Miguel Ojeda
2025-07-23 3:17 ` Takeshi Ogasawara
2025-07-23 7:18 ` Pascal Ernster
2025-07-23 8:44 ` Peter Schneider
2025-07-23 10:54 ` Mark Brown
2025-07-23 11:34 ` Jon Hunter
2025-07-23 16:27 ` Justin Forbes
2025-07-24 3:34 ` Ron Economos
2025-07-24 3:52 ` Hardik Garg
2025-07-24 8:01 ` Naresh Kamboju
2025-07-26 18:04 ` Pavel Machek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250722134352.399521719@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=hyc.lee@gmail.com \
--cc=linkinjeon@kernel.org \
--cc=linux-cifs@vger.kernel.org \
--cc=longli@microsoft.com \
--cc=meetakshisetiyaoss@gmail.com \
--cc=metze@samba.org \
--cc=patches@lists.linux.dev \
--cc=samba-technical@lists.samba.org \
--cc=smfrench@gmail.com \
--cc=stable@vger.kernel.org \
--cc=stfrench@microsoft.com \
--cc=tom@talpey.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.