fs: dcache scale subdirs
[linux-flexiantxendom0-natty.git] / drivers / usb / core / inode.c
index e3ab443..89a0e83 100644 (file)
@@ -344,18 +344,20 @@ static int usbfs_empty (struct dentry *dentry)
        struct list_head *list;
 
        spin_lock(&dcache_lock);
-
+       spin_lock(&dentry->d_lock);
        list_for_each(list, &dentry->d_subdirs) {
                struct dentry *de = list_entry(list, struct dentry, d_u.d_child);
-               spin_lock(&de->d_lock);
+
+               spin_lock_nested(&de->d_lock, DENTRY_D_LOCK_NESTED);
                if (usbfs_positive(de)) {
                        spin_unlock(&de->d_lock);
+                       spin_unlock(&dentry->d_lock);
                        spin_unlock(&dcache_lock);
                        return 0;
                }
                spin_unlock(&de->d_lock);
        }
-
+       spin_unlock(&dentry->d_lock);
        spin_unlock(&dcache_lock);
        return 1;
 }