]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
gadgetfs: switch to simple_remove_by_name()
authorAl Viro <viro@zeniv.linux.org.uk>
Thu, 18 Sep 2025 05:20:18 +0000 (01:20 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 18 Nov 2025 04:59:27 +0000 (23:59 -0500)
No need to return dentry from gadgetfs_create_file() or keep it around
afterwards.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
drivers/usb/gadget/legacy/inode.c

index 13c3da49348c5939bfb7829f11a61b60635a5419..bcc25f13483f4272403509b4558d57ce7091cfbb 100644 (file)
@@ -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;
        }