Message ID | 20220613123854.55073-1-sergeygo@nvidia.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | scsi: iscsi: Exclude zero from the endpoint ID range | expand |
On 6/13/22 7:38 AM, Sergey Gorenko wrote: > The kernel returns an endpoint ID as r.ep_connect_ret.handle in the > iscsi_uevent. The iscsid validates a received endpoint ID and treats > zero as an error. The commit referenced in the fixes line changed the > endpoint ID range, and zero is always assigned to the first endpoint ID. > So, the first attempt to create a new iSER connection always fails. > > Fixes: 3c6ae371b8a1 ("scsi: iscsi: Release endpoint ID when its freed") > Reviewed-by: Max Gurtovoy <mgurtovoy@nvidia.com> > Signed-off-by: Sergey Gorenko <sergeygo@nvidia.com> > --- > drivers/scsi/scsi_transport_iscsi.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c > index 2c0dd64159b0..5d21f07456c6 100644 > --- a/drivers/scsi/scsi_transport_iscsi.c > +++ b/drivers/scsi/scsi_transport_iscsi.c > @@ -212,7 +212,12 @@ iscsi_create_endpoint(int dd_size) > return NULL; > > mutex_lock(&iscsi_ep_idr_mutex); > - id = idr_alloc(&iscsi_ep_idr, ep, 0, -1, GFP_NOIO); > + > + /* > + * First endpoint id should be 1 to comply with user space > + * applications (iscsid). > + */ > + id = idr_alloc(&iscsi_ep_idr, ep, 1, -1, GFP_NOIO); > if (id < 0) { > mutex_unlock(&iscsi_ep_idr_mutex); > printk(KERN_ERR "Could not allocate endpoint ID. Error %d.\n", Varun submitted a similar patch yesterday: https://lore.kernel.org/all/20220612121901.6897-1-varun@chelsio.com/T/ Your patch is nicer, because it has the comment about userspace. Let's go with the patch in this email. Reviewed-by: Mike Christie <michael.christie@oracle.com>
On 6/13/22 05:38, Sergey Gorenko wrote: > The kernel returns an endpoint ID as r.ep_connect_ret.handle in the > iscsi_uevent. The iscsid validates a received endpoint ID and treats > zero as an error. The commit referenced in the fixes line changed the > endpoint ID range, and zero is always assigned to the first endpoint ID. > So, the first attempt to create a new iSER connection always fails. > > Fixes: 3c6ae371b8a1 ("scsi: iscsi: Release endpoint ID when its freed") > Reviewed-by: Max Gurtovoy <mgurtovoy@nvidia.com> > Signed-off-by: Sergey Gorenko <sergeygo@nvidia.com> > --- > drivers/scsi/scsi_transport_iscsi.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c > index 2c0dd64159b0..5d21f07456c6 100644 > --- a/drivers/scsi/scsi_transport_iscsi.c > +++ b/drivers/scsi/scsi_transport_iscsi.c > @@ -212,7 +212,12 @@ iscsi_create_endpoint(int dd_size) > return NULL; > > mutex_lock(&iscsi_ep_idr_mutex); > - id = idr_alloc(&iscsi_ep_idr, ep, 0, -1, GFP_NOIO); > + > + /* > + * First endpoint id should be 1 to comply with user space > + * applications (iscsid). > + */ > + id = idr_alloc(&iscsi_ep_idr, ep, 1, -1, GFP_NOIO); > if (id < 0) { > mutex_unlock(&iscsi_ep_idr_mutex); > printk(KERN_ERR "Could not allocate endpoint ID. Error %d.\n", Reviewed-by: Lee Duncan <lduncan@suse.com>
On Mon, 13 Jun 2022 15:38:54 +0300, Sergey Gorenko wrote: > The kernel returns an endpoint ID as r.ep_connect_ret.handle in the > iscsi_uevent. The iscsid validates a received endpoint ID and treats > zero as an error. The commit referenced in the fixes line changed the > endpoint ID range, and zero is always assigned to the first endpoint ID. > So, the first attempt to create a new iSER connection always fails. > > > [...] Applied to 5.19/scsi-fixes, thanks! [1/1] scsi: iscsi: Exclude zero from the endpoint ID range https://git.kernel.org/mkp/scsi/c/f6eed15f3ea7
diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c index 2c0dd64159b0..5d21f07456c6 100644 --- a/drivers/scsi/scsi_transport_iscsi.c +++ b/drivers/scsi/scsi_transport_iscsi.c @@ -212,7 +212,12 @@ iscsi_create_endpoint(int dd_size) return NULL; mutex_lock(&iscsi_ep_idr_mutex); - id = idr_alloc(&iscsi_ep_idr, ep, 0, -1, GFP_NOIO); + + /* + * First endpoint id should be 1 to comply with user space + * applications (iscsid). + */ + id = idr_alloc(&iscsi_ep_idr, ep, 1, -1, GFP_NOIO); if (id < 0) { mutex_unlock(&iscsi_ep_idr_mutex); printk(KERN_ERR "Could not allocate endpoint ID. Error %d.\n",