Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1fcba97e authored by Jaejoong Kim's avatar Jaejoong Kim Committed by Felipe Balbi
Browse files

usb: gadget: storage: Remove reference counting



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: default avatarAlan Stern <stern@rowland.harvard.edu>
Acked-by: default avatarMichal Nazarewicz <mina86@mina86.com>
Signed-off-by: default avatarJaejoong Kim <climbbb.kim@gmail.com>
Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
parent 7a051e8d
Loading
Loading
Loading
Loading
+5 −22
Original line number Diff line number Diff line
@@ -206,7 +206,6 @@
#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);
+0 −4
Original line number Diff line number Diff line
@@ -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);