Re: Configfs usb mass_storage device always reports 8 LUNs ?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Fri, Jun 19, 2015 at 09:00:26PM +0200, Michal Nazarewicz wrote:
> > On Fri, Jun 19, 2015 at 01:59:40PM +0000, David Fisher wrote:
> >> My interpretation of this is that common->nluns is only ever set in
> >> fsg_alloc_inst() "rc = fsg_common_set_nluns(opts->common,
> >> FSG_MAX_LUNS);"
> >> It doesn't take account of how many luns have been setup in the
> >> configfs tree.
> 
> On Fri, Jun 19 2015, Felipe Balbi wrote:
> > your interpretation is correct.
> >
> >> I have applied a hack/fix which works for me, though it needs tweaks
> >> and further testing given recent f_mass_storage.c patches I've seen
> >> floating about. This patch updates common->nluns on each
> >> fsg_common_create_lun(), and only prints Number of LUNs on fsg_bind
> >> when the configfs tree should be all there. Also assumes contiguous
> >> incrementing lun ids.
> >
> > this makes sense to me although we need this in a proper patch format
> > (have a look at Documentation/SubmittingPatches and
> > Documentation/SubmitChecklist)
> >
> > Michal, any comments to this diff ?
> >
> >> diff --git a/drivers/usb/gadget/function/f_mass_storage.c b/drivers/usb/gadget/function/f_mass_storage.c
> >> index 3cc109f..f502f00 100644
> >> --- a/drivers/usb/gadget/function/f_mass_storage.c
> >> +++ b/drivers/usb/gadget/function/f_mass_storage.c
> >> @@ -2796,8 +2796,6 @@ int fsg_common_set_nluns(struct fsg_common *common, int nluns)
> >>  	common->luns = curlun;
> >>  	common->nluns = nluns;
> >>  
> >> -	pr_info("Number of LUNs=%d\n", common->nluns);
> >> -
> >>  	return 0;
> >>  }
> >>  EXPORT_SYMBOL_GPL(fsg_common_set_nluns);
> >> @@ -2941,6 +2939,9 @@ int fsg_common_create_lun(struct fsg_common *common, struct fsg_lun_config *cfg,
> >>  				p = "(error)";
> >>  		}
> >>  	}
> >> +
> >> +	common->nluns = id + 1;
> >> +
> 
> This breaks fsg_common_create_luns.  If configfs interface allows for
> a single LUN only (which I think is the case), just change
> 
> 	rc = fsg_common_set_nluns(opts->common, FSG_MAX_LUNS);
> 
> to
> 
> 	/* Only one LUN is supported via configfs */
> 	rc = fsg_common_set_nluns(opts->common, 1);
> 
> in fsg_alloc_inst.

the fact is that this needs to be configurable from configfs. If user
sets up a single lun, then this should be as you said, however, if 2
luns are configured, I still want to have those 2 working.

From a user perspective, configfs should support N luns just fine as
long as we have enough memory available.

-- 
balbi

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux