mirror of https://gitee.com/openkylin/linux.git
RDMA/srp: Add parse function for maximum initiator to target IU size
According to SRP specifications 'srp-r16a' and 'srp2r06', IOControllerProfile attributes for SRP target port include the maximum initiator to target IU size. SRP connection daemons, such as srp_daemon, can get the value from the subnet manager. The SRP connection daemon can pass this value to kernel. This patch adds a parse function for it. Upstream commit [1] enables the kernel parameter, 'use_imm_data', by default. [1] also use (8 * 1024) as the default value for kernel parameter 'max_imm_data'. With those default values, the maximum initiator to target IU size will be 8260. In case the SRPT modules, which include the in-tree 'ib_srpt.ko' module, do not support SRP-2 'immediate data' feature, the default maximum initiator to target IU size is significantly smaller than 8260. For 'ib_srpt.ko' module, which built from source before [2], the default maximum initiator to target IU is 2116. [1] introduces a regression issue for old srp targets with default kernel parameters, as the connection will be rejected because of a too large maximum initiator to target IU size. [1] commit882981f4a4
("RDMA/srp: Add support for immediate data") [2] commit5dabcd0456
("RDMA/srpt: Add support for immediate data") Link: https://lore.kernel.org/r/20190927174352.7800-1-honli@redhat.com Reviewed-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Honggang Li <honli@redhat.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:
parent
909624d8db
commit
547ed331bb
|
@ -67,6 +67,8 @@ Description: Interface for making ib_srp connect to a new target.
|
|||
initiator is allowed to queue per SCSI host. The default
|
||||
value for this parameter is 62. The lowest supported value
|
||||
is 2.
|
||||
* max_it_iu_size, a decimal number specifying the maximum
|
||||
initiator to target information unit length.
|
||||
|
||||
What: /sys/class/infiniband_srp/srp-<hca>-<port_number>/ibdev
|
||||
Date: January 2, 2006
|
||||
|
|
|
@ -3414,6 +3414,7 @@ enum {
|
|||
SRP_OPT_IP_SRC = 1 << 15,
|
||||
SRP_OPT_IP_DEST = 1 << 16,
|
||||
SRP_OPT_TARGET_CAN_QUEUE= 1 << 17,
|
||||
SRP_OPT_MAX_IT_IU_SIZE = 1 << 18,
|
||||
};
|
||||
|
||||
static unsigned int srp_opt_mandatory[] = {
|
||||
|
@ -3446,6 +3447,7 @@ static const match_table_t srp_opt_tokens = {
|
|||
{ SRP_OPT_QUEUE_SIZE, "queue_size=%d" },
|
||||
{ SRP_OPT_IP_SRC, "src=%s" },
|
||||
{ SRP_OPT_IP_DEST, "dest=%s" },
|
||||
{ SRP_OPT_MAX_IT_IU_SIZE, "max_it_iu_size=%d" },
|
||||
{ SRP_OPT_ERR, NULL }
|
||||
};
|
||||
|
||||
|
@ -3739,6 +3741,14 @@ static int srp_parse_options(struct net *net, const char *buf,
|
|||
target->tl_retry_count = token;
|
||||
break;
|
||||
|
||||
case SRP_OPT_MAX_IT_IU_SIZE:
|
||||
if (match_int(args, &token) || token < 0) {
|
||||
pr_warn("bad maximum initiator to target IU size '%s'\n", p);
|
||||
goto out;
|
||||
}
|
||||
target->max_it_iu_size = token;
|
||||
break;
|
||||
|
||||
default:
|
||||
pr_warn("unknown parameter or missing value '%s' in target creation request\n",
|
||||
p);
|
||||
|
|
|
@ -210,6 +210,7 @@ struct srp_target_port {
|
|||
u32 ch_count;
|
||||
u32 lkey;
|
||||
enum srp_target_state state;
|
||||
uint32_t max_it_iu_size;
|
||||
unsigned int cmd_sg_cnt;
|
||||
unsigned int indirect_size;
|
||||
bool allow_ext_sg;
|
||||
|
|
Loading…
Reference in New Issue