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

Signed-off-by: Al Viro <[email protected]>
---
 drivers/usb/gadget/legacy/inode.c | 32 +++++++++++++------------------
 1 file changed, 13 insertions(+), 19 deletions(-)

diff --git a/drivers/usb/gadget/legacy/inode.c 
b/drivers/usb/gadget/legacy/inode.c
index 13c3da49348c..bcc25f13483f 100644
--- a/drivers/usb/gadget/legacy/inode.c
+++ b/drivers/usb/gadget/legacy/inode.c
@@ -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;
        }
-- 
2.47.3


Reply via email to