usb: gadget: storage: Remove reference counting
authorJaejoong Kim <climbbb.kim@gmail.com>
Wed, 4 Jul 2018 04:51:28 +0000 (13:51 +0900)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Thu, 26 Jul 2018 10:55:39 +0000 (13:55 +0300)
The kref used to be needed because sharing of fsg_common among multiple USB
function instances was handled by fsg. Now this is managed by configfs, we
don't need it anymore. So let's eliminate kref from this driver.

Acked-by: Alan Stern <stern@rowland.harvard.edu>
Acked-by: Michal Nazarewicz <mina86@mina86.com>
Signed-off-by: Jaejoong Kim <climbbb.kim@gmail.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/gadget/function/f_mass_storage.c
drivers/usb/gadget/function/f_mass_storage.h

index 1b580eb3f78f1373cd85d1263250c60baf63c337..ca8a4b53c59f9896e40e1ffd107d2d3b1f3e2e74 100644 (file)
 #include <linux/fcntl.h>
 #include <linux/file.h>
 #include <linux/fs.h>
-#include <linux/kref.h>
 #include <linux/kthread.h>
 #include <linux/sched/signal.h>
 #include <linux/limits.h>
@@ -312,8 +311,6 @@ struct fsg_common {
        void                    *private_data;
 
        char inquiry_string[INQUIRY_STRING_LEN];
-
-       struct kref             ref;
 };
 
 struct fsg_dev {
@@ -2551,25 +2548,11 @@ static DEVICE_ATTR(file, 0, file_show, file_store);
 
 /****************************** FSG COMMON ******************************/
 
-static void fsg_common_release(struct kref *ref);
-
 static void fsg_lun_release(struct device *dev)
 {
        /* Nothing needs to be done */
 }
 
-void 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)
-{
-       kref_put(&common->ref, fsg_common_release);
-}
-EXPORT_SYMBOL_GPL(fsg_common_put);
-
 static struct fsg_common *fsg_common_setup(struct fsg_common *common)
 {
        if (!common) {
@@ -2582,7 +2565,6 @@ static struct fsg_common *fsg_common_setup(struct fsg_common *common)
        }
        init_rwsem(&common->filesem);
        spin_lock_init(&common->lock);
-       kref_init(&common->ref);
        init_completion(&common->thread_notifier);
        init_waitqueue_head(&common->io_wait);
        init_waitqueue_head(&common->fsg_wait);
@@ -2870,9 +2852,8 @@ void fsg_common_set_inquiry_string(struct fsg_common *common, const char *vn,
 }
 EXPORT_SYMBOL_GPL(fsg_common_set_inquiry_string);
 
-static void fsg_common_release(struct kref *ref)
+static void fsg_common_release(struct fsg_common *common)
 {
-       struct fsg_common *common = container_of(ref, struct fsg_common, ref);
        int i;
 
        /* If the thread isn't already dead, tell it to exit now */
@@ -3346,7 +3327,7 @@ static void fsg_free_inst(struct usb_function_instance *fi)
        struct fsg_opts *opts;
 
        opts = fsg_opts_from_func_inst(fi);
-       fsg_common_put(opts->common);
+       fsg_common_release(opts->common);
        kfree(opts);
 }
 
@@ -3370,7 +3351,7 @@ static struct usb_function_instance *fsg_alloc_inst(void)
        rc = fsg_common_set_num_buffers(opts->common,
                                        CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS);
        if (rc)
-               goto release_opts;
+               goto release_common;
 
        pr_info(FSG_DRIVER_DESC ", version: " FSG_DRIVER_VERSION "\n");
 
@@ -3393,6 +3374,8 @@ static struct usb_function_instance *fsg_alloc_inst(void)
 
 release_buffers:
        fsg_common_free_buffers(opts->common);
+release_common:
+       kfree(opts->common);
 release_opts:
        kfree(opts);
        return ERR_PTR(rc);
index 58857fcf199f54abdc00dff887aa9310c80fa4e6..3b8c4ce2a40a458898c12e333a18f005217c70a9 100644 (file)
@@ -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);