iscsi: Properly size the receive buffer

Signed-off-by: Ben Walker <benjamin.walker@intel.com>
Change-Id: Id736c8a6d9a2cb8bd23017f61eeeccca8a882c03
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1636
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Ben Walker 2020-04-01 11:35:23 -07:00 committed by Tomasz Zawadzki
parent 0accbe8a37
commit 49826b36cf
2 changed files with 25 additions and 0 deletions

View File

@ -40,6 +40,7 @@
#include "spdk/env.h"
#include "spdk/likely.h"
#include "spdk/trace.h"
#include "spdk/sock.h"
#include "spdk/string.h"
#include "spdk/queue.h"
#include "spdk/net.h"
@ -1100,6 +1101,7 @@ static int
iscsi_conn_params_update(struct spdk_iscsi_conn *conn)
{
int rc;
uint32_t recv_buf_size;
/* update internal variables */
rc = spdk_iscsi_copy_param2var(conn);
@ -1120,6 +1122,27 @@ iscsi_conn_params_update(struct spdk_iscsi_conn *conn)
}
}
/* The socket receive buffer may need to be adjusted based on the new parameters */
/* Don't allow the recv buffer to be 0 or very large. */
recv_buf_size = spdk_max(0x1000, spdk_min(0x2000, conn->sess->FirstBurstLength));
/* Add in extra space for the PDU */
recv_buf_size += ISCSI_BHS_LEN + ISCSI_AHS_LEN;
if (conn->header_digest) {
recv_buf_size += ISCSI_DIGEST_LEN;
}
if (conn->data_digest) {
recv_buf_size += ISCSI_DIGEST_LEN;
}
/* Set up to buffer up to 4 commands with immediate data at once */
if (spdk_sock_set_recvbuf(conn->sock, recv_buf_size * 4) < 0) {
/* Not fatal. */
}
return rc;
}

View File

@ -108,6 +108,8 @@ DEFINE_STUB(spdk_iscsi_chap_get_authinfo, int,
(struct iscsi_chap_auth *auth, const char *authuser, int ag_tag),
0);
DEFINE_STUB(spdk_sock_set_recvbuf, int, (struct spdk_sock *sock, int sz), 0);
int
spdk_scsi_lun_get_id(const struct spdk_scsi_lun *lun)
{