From bc8abc6c96b10953cac8492372dd4a322f9f1083 Mon Sep 17 00:00:00 2001 From: Al Viro Date: Sun, 8 Jan 2012 16:13:28 -0500 Subject: [PATCH] --- yaml --- r: 292371 b: refs/heads/master c: 104bb37d3e0eb576b6aa61b9ed909e118e026bd2 h: refs/heads/master i: 292369: 89be31ad43f2840dd1c47a055fcb8a5f119a9dd7 292367: e734a003f75c5ee466f5fbded1e098ac57a5f3b4 v: v3 --- [refs] | 2 +- trunk/drivers/usb/gadget/inode.c | 9 +++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 03c94de0be4d..3b089478b3ad 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 342827d7d19cb52b562bb3efeb4d4b672d008c35 +refs/heads/master: 104bb37d3e0eb576b6aa61b9ed909e118e026bd2 diff --git a/trunk/drivers/usb/gadget/inode.c b/trunk/drivers/usb/gadget/inode.c index c95eea43b637..f701afb349ee 100644 --- a/trunk/drivers/usb/gadget/inode.c +++ b/trunk/drivers/usb/gadget/inode.c @@ -1569,20 +1569,18 @@ gadgetfs_setup (struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl) static void destroy_ep_files (struct dev_data *dev) { - struct list_head *entry, *tmp; - DBG (dev, "%s %d\n", __func__, dev->state); /* dev->state must prevent interference */ restart: spin_lock_irq (&dev->lock); - list_for_each_safe (entry, tmp, &dev->epfiles) { + while (!list_empty(&dev->epfiles)) { struct ep_data *ep; struct inode *parent; struct dentry *dentry; /* break link to FS */ - ep = list_entry (entry, struct ep_data, epfiles); + ep = list_first_entry (&dev->epfiles, struct ep_data, epfiles); list_del_init (&ep->epfiles); dentry = ep->dentry; ep->dentry = NULL; @@ -1605,8 +1603,7 @@ static void destroy_ep_files (struct dev_data *dev) dput (dentry); mutex_unlock (&parent->i_mutex); - /* fds may still be open */ - goto restart; + spin_lock_irq (&dev->lock); } spin_unlock_irq (&dev->lock); }