Commit b65e3b11 authored by Al Viro's avatar Al Viro
Browse files

gadgetfs: switch to simple_remove_by_name()



No need to return dentry from gadgetfs_create_file() or keep it around
afterwards.

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 6ca67378
Loading
Loading
Loading
Loading
+13 −19
Original line number Diff line number Diff line
@@ -150,7 +150,6 @@ struct dev_data {
	void				*buf;
	wait_queue_head_t		wait;
	struct super_block		*sb;
	struct dentry			*dentry;

	/* except this scratch i/o buffer for ep0 */
	u8				rbuf[RBUF_SIZE];
@@ -208,7 +207,6 @@ struct ep_data {
	struct usb_endpoint_descriptor	desc, hs_desc;
	struct list_head		epfiles;
	wait_queue_head_t		wait;
	struct dentry			*dentry;
};

static inline void get_ep (struct ep_data *data)
@@ -1561,16 +1559,12 @@ static void destroy_ep_files (struct dev_data *dev)
	spin_lock_irq (&dev->lock);
	while (!list_empty(&dev->epfiles)) {
		struct ep_data	*ep;
		struct dentry	*dentry;

		/* break link to FS */
		ep = list_first_entry (&dev->epfiles, struct ep_data, epfiles);
		list_del_init (&ep->epfiles);
		spin_unlock_irq (&dev->lock);

		dentry = ep->dentry;
		ep->dentry = NULL;

		/* break link to controller */
		mutex_lock(&ep->lock);
		if (ep->state == STATE_EP_ENABLED)
@@ -1581,10 +1575,11 @@ static void destroy_ep_files (struct dev_data *dev)
		mutex_unlock(&ep->lock);

		wake_up (&ep->wait);
		put_ep (ep);

		/* break link to dcache */
		simple_recursive_removal(dentry, NULL);
		simple_remove_by_name(dev->sb->s_root, ep->name, NULL);

		put_ep (ep);

		spin_lock_irq (&dev->lock);
	}
@@ -1592,14 +1587,14 @@ static void destroy_ep_files (struct dev_data *dev)
}


static struct dentry *
gadgetfs_create_file (struct super_block *sb, char const *name,
static int gadgetfs_create_file (struct super_block *sb, char const *name,
		void *data, const struct file_operations *fops);

static int activate_ep_files (struct dev_data *dev)
{
	struct usb_ep	*ep;
	struct ep_data	*data;
	int err;

	gadget_for_each_ep (ep, dev->gadget) {

@@ -1622,9 +1617,9 @@ static int activate_ep_files (struct dev_data *dev)
		if (!data->req)
			goto enomem1;

		data->dentry = gadgetfs_create_file (dev->sb, data->name,
		err = gadgetfs_create_file (dev->sb, data->name,
				data, &ep_io_operations);
		if (!data->dentry)
		if (err)
			goto enomem2;
		list_add_tail (&data->epfiles, &dev->epfiles);
	}
@@ -1988,8 +1983,7 @@ gadgetfs_make_inode (struct super_block *sb,
/* creates in fs root directory, so non-renamable and non-linkable.
 * so inode and dentry are paired, until device reconfig.
 */
static struct dentry *
gadgetfs_create_file (struct super_block *sb, char const *name,
static int gadgetfs_create_file (struct super_block *sb, char const *name,
		void *data, const struct file_operations *fops)
{
	struct dentry	*dentry;
@@ -1997,16 +1991,16 @@ gadgetfs_create_file (struct super_block *sb, char const *name,

	dentry = d_alloc_name(sb->s_root, name);
	if (!dentry)
		return NULL;
		return -ENOMEM;

	inode = gadgetfs_make_inode (sb, data, fops,
			S_IFREG | (default_perm & S_IRWXUGO));
	if (!inode) {
		dput(dentry);
		return NULL;
		return -ENOMEM;
	}
	d_add (dentry, inode);
	return dentry;
	return 0;
}

static const struct super_operations gadget_fs_operations = {
@@ -2059,8 +2053,8 @@ gadgetfs_fill_super (struct super_block *sb, struct fs_context *fc)
		goto Enomem;

	dev->sb = sb;
	dev->dentry = gadgetfs_create_file(sb, CHIP, dev, &ep0_operations);
	if (!dev->dentry) {
	rc = gadgetfs_create_file(sb, CHIP, dev, &ep0_operations);
	if (rc) {
		put_dev(dev);
		goto Enomem;
	}