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 Original line Diff line number Diff line
@@ -206,7 +206,6 @@
#include <linux/fcntl.h>
#include <linux/fcntl.h>
#include <linux/file.h>
#include <linux/file.h>
#include <linux/fs.h>
#include <linux/fs.h>
#include <linux/kref.h>
#include <linux/kthread.h>
#include <linux/kthread.h>
#include <linux/sched/signal.h>
#include <linux/sched/signal.h>
#include <linux/limits.h>
#include <linux/limits.h>
@@ -312,8 +311,6 @@ struct fsg_common {
	void			*private_data;
	void			*private_data;


	char inquiry_string[INQUIRY_STRING_LEN];
	char inquiry_string[INQUIRY_STRING_LEN];

	struct kref		ref;
};
};


struct fsg_dev {
struct fsg_dev {
@@ -2551,25 +2548,11 @@ static DEVICE_ATTR(file, 0, file_show, file_store);


/****************************** FSG COMMON ******************************/
/****************************** FSG COMMON ******************************/


static void fsg_common_release(struct kref *ref);

static void fsg_lun_release(struct device *dev)
static void fsg_lun_release(struct device *dev)
{
{
	/* Nothing needs to be done */
	/* 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)
static struct fsg_common *fsg_common_setup(struct fsg_common *common)
{
{
	if (!common) {
	if (!common) {
@@ -2582,7 +2565,6 @@ static struct fsg_common *fsg_common_setup(struct fsg_common *common)
	}
	}
	init_rwsem(&common->filesem);
	init_rwsem(&common->filesem);
	spin_lock_init(&common->lock);
	spin_lock_init(&common->lock);
	kref_init(&common->ref);
	init_completion(&common->thread_notifier);
	init_completion(&common->thread_notifier);
	init_waitqueue_head(&common->io_wait);
	init_waitqueue_head(&common->io_wait);
	init_waitqueue_head(&common->fsg_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);
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;
	int i;


	/* If the thread isn't already dead, tell it to exit now */
	/* 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;
	struct fsg_opts *opts;


	opts = fsg_opts_from_func_inst(fi);
	opts = fsg_opts_from_func_inst(fi);
	fsg_common_put(opts->common);
	fsg_common_release(opts->common);
	kfree(opts);
	kfree(opts);
}
}


@@ -3370,7 +3351,7 @@ static struct usb_function_instance *fsg_alloc_inst(void)
	rc = fsg_common_set_num_buffers(opts->common,
	rc = fsg_common_set_num_buffers(opts->common,
					CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS);
					CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS);
	if (rc)
	if (rc)
		goto release_opts;
		goto release_common;


	pr_info(FSG_DRIVER_DESC ", version: " FSG_DRIVER_VERSION "\n");
	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:
release_buffers:
	fsg_common_free_buffers(opts->common);
	fsg_common_free_buffers(opts->common);
release_common:
	kfree(opts->common);
release_opts:
release_opts:
	kfree(opts);
	kfree(opts);
	return ERR_PTR(rc);
	return ERR_PTR(rc);
+0 −4
Original line number Original line 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);
	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);
void fsg_common_set_sysfs(struct fsg_common *common, bool sysfs);


int fsg_common_set_num_buffers(struct fsg_common *common, unsigned int n);
int fsg_common_set_num_buffers(struct fsg_common *common, unsigned int n);