Getting rid of kref seems sensible to me. Reference counting used to be needed because sharing of fsg_common among multiple USB function instances was handled by fsg. Now this is handled by configfs layer and I don’t think the kref is necessary any more. 2018-06-14 19:23 GMT+01:00 Jaejoong Kim <climbbb.kim@xxxxxxxxx>: > Thanks for the review it. > > 2018년 6월 14일 (목) 오후 11:48, Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>님이 작성: >> >> On Thu, 14 Jun 2018, Jaejoong Kim wrote: >> >> > Removing EXPORT_SYMBOL_GPL from kref_{put, get} since it is used >> > only in f_mass_storage >> > >> > Signed-off-by: Jaejoong Kim <climbbb.kim@xxxxxxxxx> >> >> This is only a partial solution. In fact, fsg_common_get() isn't used >> anywhere, and fsg_common_put() is used in only one place. > > Right. Actually my first approach was to remove fsg_common_get/put and just > use kref APIs(kref_get/put). But I kept current codes because this module author > might have another reason. > >> >> It would be better to remove those two routines, get rid of common->ref >> entirely, and make fsg_free_inst() call fsg_common_release() directly. > > Hm.. If you want to call fsg_common_release () in fsg_free_inst (), > the struct kref > in this moduel is meaningless. I prefer hold kref and just use kref APIs not > fsg_common_get/put. > > Thanks, Jaejoong >> >> Alan Stern >> >> > --- >> > drivers/usb/gadget/function/f_mass_storage.c | 6 ++---- >> > drivers/usb/gadget/function/f_mass_storage.h | 4 ---- >> > 2 files changed, 2 insertions(+), 8 deletions(-) >> > >> > diff --git a/drivers/usb/gadget/function/f_mass_storage.c b/drivers/usb/gadget/function/f_mass_storage.c >> > index b6e2930..ba0eb7e 100644 >> > --- a/drivers/usb/gadget/function/f_mass_storage.c >> > +++ b/drivers/usb/gadget/function/f_mass_storage.c >> > @@ -2558,17 +2558,15 @@ static void fsg_lun_release(struct device *dev) >> > /* Nothing needs to be done */ >> > } >> > >> > -void fsg_common_get(struct fsg_common *common) >> > +static void __maybe_unused fsg_common_get(struct fsg_common *common) >> > { >> > kref_get(&common->ref); >> > } >> > -EXPORT_SYMBOL_GPL(fsg_common_get); >> > >> > -void fsg_common_put(struct fsg_common *common) >> > +static void fsg_common_put(struct fsg_common *common) >> > { >> > kref_put(&common->ref, fsg_common_release); >> > } >> > -EXPORT_SYMBOL_GPL(fsg_common_put); >> > >> > static struct fsg_common *fsg_common_setup(struct fsg_common *common) >> > { >> > diff --git a/drivers/usb/gadget/function/f_mass_storage.h b/drivers/usb/gadget/function/f_mass_storage.h >> > index 58857fc..3b8c4ce 100644 >> > --- a/drivers/usb/gadget/function/f_mass_storage.h >> > +++ b/drivers/usb/gadget/function/f_mass_storage.h >> > @@ -115,10 +115,6 @@ fsg_opts_from_func_inst(const struct usb_function_instance *fi) >> > return container_of(fi, struct fsg_opts, func_inst); >> > } >> > >> > -void fsg_common_get(struct fsg_common *common); >> > - >> > -void fsg_common_put(struct fsg_common *common); >> > - >> > void fsg_common_set_sysfs(struct fsg_common *common, bool sysfs); >> > >> > int fsg_common_set_num_buffers(struct fsg_common *common, unsigned int n); >> > >> -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html