Skip to content

Commit 1f2ff73

Browse files
metze-sambasmfrench
authored andcommitted
smb: client: make use of smbdirect_socket_parameters.{resolve_{addr,route},rdma_connect,negotiate}_timeout_msec
This will make future changes to these values much saner. Cc: Steve French <smfrench@gmail.com> Cc: Tom Talpey <tom@talpey.com> Cc: Long Li <longli@microsoft.com> Cc: linux-cifs@vger.kernel.org Cc: samba-technical@lists.samba.org Acked-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Stefan Metzmacher <metze@samba.org> Signed-off-by: Steve French <stfrench@microsoft.com>
1 parent 14b6088 commit 1f2ff73

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

fs/smb/client/smbdirect.c

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ static ssize_t smb_extract_iter_to_rdma(struct iov_iter *iter, size_t len,
5757
/* SMBD negotiation timeout in seconds */
5858
#define SMBD_NEGOTIATE_TIMEOUT 120
5959

60+
/* The timeout to wait for a keepalive message from peer in seconds */
61+
#define KEEPALIVE_RECV_TIMEOUT 5
62+
6063
/* SMBD minimum receive size and fragmented sized defined in [MS-SMBD] */
6164
#define SMBD_MIN_RECEIVE_SIZE 128
6265
#define SMBD_MIN_FRAGMENTED_SIZE 131072
@@ -721,6 +724,7 @@ static struct rdma_cm_id *smbd_create_id(
721724
struct sockaddr *dstaddr, int port)
722725
{
723726
struct smbdirect_socket *sc = &info->socket;
727+
struct smbdirect_socket_parameters *sp = &sc->parameters;
724728
struct rdma_cm_id *id;
725729
int rc;
726730
__be16 *sport;
@@ -743,15 +747,15 @@ static struct rdma_cm_id *smbd_create_id(
743747
WARN_ON_ONCE(sc->status != SMBDIRECT_SOCKET_RESOLVE_ADDR_NEEDED);
744748
sc->status = SMBDIRECT_SOCKET_RESOLVE_ADDR_RUNNING;
745749
rc = rdma_resolve_addr(id, NULL, (struct sockaddr *)dstaddr,
746-
RDMA_RESOLVE_TIMEOUT);
750+
sp->resolve_addr_timeout_msec);
747751
if (rc) {
748752
log_rdma_event(ERR, "rdma_resolve_addr() failed %i\n", rc);
749753
goto out;
750754
}
751755
rc = wait_event_interruptible_timeout(
752756
sc->status_wait,
753757
sc->status != SMBDIRECT_SOCKET_RESOLVE_ADDR_RUNNING,
754-
msecs_to_jiffies(RDMA_RESOLVE_TIMEOUT));
758+
msecs_to_jiffies(sp->resolve_addr_timeout_msec));
755759
/* e.g. if interrupted returns -ERESTARTSYS */
756760
if (rc < 0) {
757761
log_rdma_event(ERR, "rdma_resolve_addr timeout rc: %i\n", rc);
@@ -770,15 +774,15 @@ static struct rdma_cm_id *smbd_create_id(
770774

771775
WARN_ON_ONCE(sc->status != SMBDIRECT_SOCKET_RESOLVE_ROUTE_NEEDED);
772776
sc->status = SMBDIRECT_SOCKET_RESOLVE_ROUTE_RUNNING;
773-
rc = rdma_resolve_route(id, RDMA_RESOLVE_TIMEOUT);
777+
rc = rdma_resolve_route(id, sp->resolve_route_timeout_msec);
774778
if (rc) {
775779
log_rdma_event(ERR, "rdma_resolve_route() failed %i\n", rc);
776780
goto out;
777781
}
778782
rc = wait_event_interruptible_timeout(
779783
sc->status_wait,
780784
sc->status != SMBDIRECT_SOCKET_RESOLVE_ROUTE_RUNNING,
781-
msecs_to_jiffies(RDMA_RESOLVE_TIMEOUT));
785+
msecs_to_jiffies(sp->resolve_route_timeout_msec));
782786
/* e.g. if interrupted returns -ERESTARTSYS */
783787
if (rc < 0) {
784788
log_rdma_event(ERR, "rdma_resolve_addr timeout rc: %i\n", rc);
@@ -1266,6 +1270,7 @@ static int smbd_post_recv(
12661270
static int smbd_negotiate(struct smbd_connection *info)
12671271
{
12681272
struct smbdirect_socket *sc = &info->socket;
1273+
struct smbdirect_socket_parameters *sp = &sc->parameters;
12691274
int rc;
12701275
struct smbdirect_recv_io *response = get_receive_buffer(info);
12711276

@@ -1289,7 +1294,7 @@ static int smbd_negotiate(struct smbd_connection *info)
12891294
rc = wait_event_interruptible_timeout(
12901295
sc->status_wait,
12911296
sc->status != SMBDIRECT_SOCKET_NEGOTIATE_RUNNING,
1292-
secs_to_jiffies(SMBD_NEGOTIATE_TIMEOUT));
1297+
msecs_to_jiffies(sp->negotiate_timeout_msec));
12931298
log_rdma_event(INFO, "wait_event_interruptible_timeout rc=%d\n", rc);
12941299

12951300
if (sc->status == SMBDIRECT_SOCKET_CONNECTED)
@@ -1718,12 +1723,17 @@ static struct smbd_connection *_smbd_get_connection(
17181723

17191724
INIT_WORK(&sc->disconnect_work, smbd_disconnect_rdma_work);
17201725

1726+
sp->resolve_addr_timeout_msec = RDMA_RESOLVE_TIMEOUT;
1727+
sp->resolve_route_timeout_msec = RDMA_RESOLVE_TIMEOUT;
1728+
sp->rdma_connect_timeout_msec = RDMA_RESOLVE_TIMEOUT;
1729+
sp->negotiate_timeout_msec = SMBD_NEGOTIATE_TIMEOUT * 1000;
17211730
sp->recv_credit_max = smbd_receive_credit_max;
17221731
sp->send_credit_target = smbd_send_credit_target;
17231732
sp->max_send_size = smbd_max_send_size;
17241733
sp->max_fragmented_recv_size = smbd_max_fragmented_recv_size;
17251734
sp->max_recv_size = smbd_max_receive_size;
17261735
sp->keepalive_interval_msec = smbd_keep_alive_interval * 1000;
1736+
sp->keepalive_timeout_msec = KEEPALIVE_RECV_TIMEOUT * 1000;
17271737

17281738
rc = smbd_ia_open(info, dstaddr, port);
17291739
if (rc) {
@@ -1838,7 +1848,7 @@ static struct smbd_connection *_smbd_get_connection(
18381848
wait_event_interruptible_timeout(
18391849
sc->status_wait,
18401850
sc->status != SMBDIRECT_SOCKET_RDMA_CONNECT_RUNNING,
1841-
msecs_to_jiffies(RDMA_RESOLVE_TIMEOUT));
1851+
msecs_to_jiffies(sp->rdma_connect_timeout_msec));
18421852

18431853
if (sc->status != SMBDIRECT_SOCKET_NEGOTIATE_NEEDED) {
18441854
log_rdma_event(ERR, "rdma_connect failed port=%d\n", port);

0 commit comments

Comments
 (0)