Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

gadgetfs: switch to simple_remove_by_name()

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

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro b65e3b11 6ca67378

+13 -19
+13 -19
drivers/usb/gadget/legacy/inode.c
··· 150 150 void *buf; 151 151 wait_queue_head_t wait; 152 152 struct super_block *sb; 153 - struct dentry *dentry; 154 153 155 154 /* except this scratch i/o buffer for ep0 */ 156 155 u8 rbuf[RBUF_SIZE]; ··· 207 208 struct usb_endpoint_descriptor desc, hs_desc; 208 209 struct list_head epfiles; 209 210 wait_queue_head_t wait; 210 - struct dentry *dentry; 211 211 }; 212 212 213 213 static inline void get_ep (struct ep_data *data) ··· 1559 1561 spin_lock_irq (&dev->lock); 1560 1562 while (!list_empty(&dev->epfiles)) { 1561 1563 struct ep_data *ep; 1562 - struct dentry *dentry; 1563 1564 1564 1565 /* break link to FS */ 1565 1566 ep = list_first_entry (&dev->epfiles, struct ep_data, epfiles); 1566 1567 list_del_init (&ep->epfiles); 1567 1568 spin_unlock_irq (&dev->lock); 1568 - 1569 - dentry = ep->dentry; 1570 - ep->dentry = NULL; 1571 1569 1572 1570 /* break link to controller */ 1573 1571 mutex_lock(&ep->lock); ··· 1575 1581 mutex_unlock(&ep->lock); 1576 1582 1577 1583 wake_up (&ep->wait); 1578 - put_ep (ep); 1579 1584 1580 1585 /* break link to dcache */ 1581 - simple_recursive_removal(dentry, NULL); 1586 + simple_remove_by_name(dev->sb->s_root, ep->name, NULL); 1587 + 1588 + put_ep (ep); 1582 1589 1583 1590 spin_lock_irq (&dev->lock); 1584 1591 } ··· 1587 1592 } 1588 1593 1589 1594 1590 - static struct dentry * 1591 - gadgetfs_create_file (struct super_block *sb, char const *name, 1595 + static int gadgetfs_create_file (struct super_block *sb, char const *name, 1592 1596 void *data, const struct file_operations *fops); 1593 1597 1594 1598 static int activate_ep_files (struct dev_data *dev) 1595 1599 { 1596 1600 struct usb_ep *ep; 1597 1601 struct ep_data *data; 1602 + int err; 1598 1603 1599 1604 gadget_for_each_ep (ep, dev->gadget) { 1600 1605 ··· 1617 1622 if (!data->req) 1618 1623 goto enomem1; 1619 1624 1620 - data->dentry = gadgetfs_create_file (dev->sb, data->name, 1625 + err = gadgetfs_create_file (dev->sb, data->name, 1621 1626 data, &ep_io_operations); 1622 - if (!data->dentry) 1627 + if (err) 1623 1628 goto enomem2; 1624 1629 list_add_tail (&data->epfiles, &dev->epfiles); 1625 1630 } ··· 1983 1988 /* creates in fs root directory, so non-renamable and non-linkable. 1984 1989 * so inode and dentry are paired, until device reconfig. 1985 1990 */ 1986 - static struct dentry * 1987 - gadgetfs_create_file (struct super_block *sb, char const *name, 1991 + static int gadgetfs_create_file (struct super_block *sb, char const *name, 1988 1992 void *data, const struct file_operations *fops) 1989 1993 { 1990 1994 struct dentry *dentry; ··· 1991 1997 1992 1998 dentry = d_alloc_name(sb->s_root, name); 1993 1999 if (!dentry) 1994 - return NULL; 2000 + return -ENOMEM; 1995 2001 1996 2002 inode = gadgetfs_make_inode (sb, data, fops, 1997 2003 S_IFREG | (default_perm & S_IRWXUGO)); 1998 2004 if (!inode) { 1999 2005 dput(dentry); 2000 - return NULL; 2006 + return -ENOMEM; 2001 2007 } 2002 2008 d_add (dentry, inode); 2003 - return dentry; 2009 + return 0; 2004 2010 } 2005 2011 2006 2012 static const struct super_operations gadget_fs_operations = { ··· 2053 2059 goto Enomem; 2054 2060 2055 2061 dev->sb = sb; 2056 - dev->dentry = gadgetfs_create_file(sb, CHIP, dev, &ep0_operations); 2057 - if (!dev->dentry) { 2062 + rc = gadgetfs_create_file(sb, CHIP, dev, &ep0_operations); 2063 + if (rc) { 2058 2064 put_dev(dev); 2059 2065 goto Enomem; 2060 2066 }