aboutsummaryrefslogtreecommitdiffstats
path: root/fs/inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/inode.c')
-rw-r--r--fs/inode.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/fs/inode.c b/fs/inode.c
index 785b1ab23ff0..239fdc08719e 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -26,6 +26,7 @@
26#include <linux/posix_acl.h> 26#include <linux/posix_acl.h>
27#include <linux/ima.h> 27#include <linux/ima.h>
28#include <linux/cred.h> 28#include <linux/cred.h>
29#include "internal.h"
29 30
30/* 31/*
31 * inode locking rules. 32 * inode locking rules.
@@ -36,6 +37,8 @@
36 * inode_lru, inode->i_lru 37 * inode_lru, inode->i_lru
37 * inode_sb_list_lock protects: 38 * inode_sb_list_lock protects:
38 * sb->s_inodes, inode->i_sb_list 39 * sb->s_inodes, inode->i_sb_list
40 * inode_wb_list_lock protects:
41 * bdi->wb.b_{dirty,io,more_io}, inode->i_wb_list
39 * 42 *
40 * Lock ordering: 43 * Lock ordering:
41 * inode_lock 44 * inode_lock
@@ -44,6 +47,9 @@
44 * inode_sb_list_lock 47 * inode_sb_list_lock
45 * inode->i_lock 48 * inode->i_lock
46 * inode_lru_lock 49 * inode_lru_lock
50 *
51 * inode_wb_list_lock
52 * inode->i_lock
47 */ 53 */
48 54
49/* 55/*
@@ -105,6 +111,7 @@ static struct hlist_head *inode_hashtable __read_mostly;
105DEFINE_SPINLOCK(inode_lock); 111DEFINE_SPINLOCK(inode_lock);
106 112
107__cacheline_aligned_in_smp DEFINE_SPINLOCK(inode_sb_list_lock); 113__cacheline_aligned_in_smp DEFINE_SPINLOCK(inode_sb_list_lock);
114__cacheline_aligned_in_smp DEFINE_SPINLOCK(inode_wb_list_lock);
108 115
109/* 116/*
110 * iprune_sem provides exclusion between the icache shrinking and the 117 * iprune_sem provides exclusion between the icache shrinking and the
@@ -483,10 +490,7 @@ static void evict(struct inode *inode)
483 BUG_ON(!(inode->i_state & I_FREEING)); 490 BUG_ON(!(inode->i_state & I_FREEING));
484 BUG_ON(!list_empty(&inode->i_lru)); 491 BUG_ON(!list_empty(&inode->i_lru));
485 492
486 spin_lock(&inode_lock); 493 inode_wb_list_del(inode);
487 list_del_init(&inode->i_wb_list);
488 spin_unlock(&inode_lock);
489
490 inode_sb_list_del(inode); 494 inode_sb_list_del(inode);
491 495
492 if (op->evict_inode) { 496 if (op->evict_inode) {