Message ID | 20190917032421.13000-1-honli@redhat.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [v2,1/2] IB/srp: Add parse function for maximum initiator to target IU size | expand |
On 9/16/19 8:24 PM, Honggang LI wrote: > 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 samller than ^^^^^^^ smaller? > 8260. For 'ib_srpt.ko' module, which built from source before > [2], the default maximum initiator to target IU is 2116. [ ... ] > diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c > index b5960351bec0..2eadb038b257 100644 > --- a/drivers/infiniband/ulp/srp/ib_srp.c > +++ b/drivers/infiniband/ulp/srp/ib_srp.c > @@ -75,6 +75,7 @@ static bool prefer_fr = true; > static bool register_always = true; > static bool never_register; > static int topspin_workarounds = 1; > +static uint32_t srp_opt_max_it_iu_size; Each SCSI host can represent a connection to another SRP target, and the max_it_iu_size parameter can differ per target. So I think this variable should be moved into struct srp_target_port instead of being global. See also srp_max_it_iu_len(). Thanks, Bart.
On Tue, Sep 17, 2019 at 10:44:56AM -0700, Bart Van Assche wrote: > On 9/16/19 8:24 PM, Honggang LI wrote: > > 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 samller than > ^^^^^^^ > smaller? Yes, will fix this typo. > > 8260. For 'ib_srpt.ko' module, which built from source before > > [2], the default maximum initiator to target IU is 2116. > [ ... ] > > diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c > > index b5960351bec0..2eadb038b257 100644 > > --- a/drivers/infiniband/ulp/srp/ib_srp.c > > +++ b/drivers/infiniband/ulp/srp/ib_srp.c > > @@ -75,6 +75,7 @@ static bool prefer_fr = true; > > static bool register_always = true; > > static bool never_register; > > static int topspin_workarounds = 1; > > +static uint32_t srp_opt_max_it_iu_size; > > Each SCSI host can represent a connection to another SRP target, and the > max_it_iu_size parameter can differ per target. So I think this variable > should be moved into struct srp_target_port instead of being global. See > also srp_max_it_iu_len(). Yes, will do as you said. thanks
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c index b5960351bec0..2eadb038b257 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.c +++ b/drivers/infiniband/ulp/srp/ib_srp.c @@ -75,6 +75,7 @@ static bool prefer_fr = true; static bool register_always = true; static bool never_register; static int topspin_workarounds = 1; +static uint32_t srp_opt_max_it_iu_size; module_param(srp_sg_tablesize, uint, 0444); MODULE_PARM_DESC(srp_sg_tablesize, "Deprecated name for cmd_sg_entries"); @@ -3411,6 +3412,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[] = { @@ -3443,6 +3445,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 } }; @@ -3736,6 +3739,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; + } + srp_opt_max_it_iu_size = token; + break; + default: pr_warn("unknown parameter or missing value '%s' in target creation request\n", p);