fs: move i_sb_list out from under inode_lock
[pandora-kernel.git] / fs / quota / dquot.c
index a1470fd..fcc8ae7 100644 (file)
@@ -76,7 +76,7 @@
 #include <linux/buffer_head.h>
 #include <linux/capability.h>
 #include <linux/quotaops.h>
-#include <linux/writeback.h> /* for inode_lock, oddly enough.. */
+#include "../internal.h" /* ugh */
 
 #include <asm/uaccess.h>
 
@@ -900,7 +900,7 @@ static void add_dquot_ref(struct super_block *sb, int type)
        int reserved = 0;
 #endif
 
-       spin_lock(&inode_lock);
+       spin_lock(&inode_sb_list_lock);
        list_for_each_entry(inode, &sb->s_inodes, i_sb_list) {
                spin_lock(&inode->i_lock);
                if ((inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW)) ||
@@ -915,19 +915,23 @@ static void add_dquot_ref(struct super_block *sb, int type)
 #endif
                __iget(inode);
                spin_unlock(&inode->i_lock);
-               spin_unlock(&inode_lock);
+               spin_unlock(&inode_sb_list_lock);
 
                iput(old_inode);
                __dquot_initialize(inode, type);
-               /* We hold a reference to 'inode' so it couldn't have been
-                * removed from s_inodes list while we dropped the inode_lock.
-                * We cannot iput the inode now as we can be holding the last
-                * reference and we cannot iput it under inode_lock. So we
-                * keep the reference and iput it later. */
+
+               /*
+                * We hold a reference to 'inode' so it couldn't have been
+                * removed from s_inodes list while we dropped the
+                * inode_sb_list_lock We cannot iput the inode now as we can be
+                * holding the last reference and we cannot iput it under
+                * inode_sb_list_lock. So we keep the reference and iput it
+                * later.
+                */
                old_inode = inode;
-               spin_lock(&inode_lock);
+               spin_lock(&inode_sb_list_lock);
        }
-       spin_unlock(&inode_lock);
+       spin_unlock(&inode_sb_list_lock);
        iput(old_inode);
 
 #ifdef CONFIG_QUOTA_DEBUG
@@ -1008,7 +1012,7 @@ static void remove_dquot_ref(struct super_block *sb, int type,
        struct inode *inode;
        int reserved = 0;
 
-       spin_lock(&inode_lock);
+       spin_lock(&inode_sb_list_lock);
        list_for_each_entry(inode, &sb->s_inodes, i_sb_list) {
                /*
                 *  We have to scan also I_NEW inodes because they can already
@@ -1022,7 +1026,7 @@ static void remove_dquot_ref(struct super_block *sb, int type,
                        remove_inode_dquot_ref(inode, type, tofree_head);
                }
        }
-       spin_unlock(&inode_lock);
+       spin_unlock(&inode_sb_list_lock);
 #ifdef CONFIG_QUOTA_DEBUG
        if (reserved) {
                printk(KERN_WARNING "VFS (%s): Writes happened after quota"