|
@@ -408,6 +408,19 @@ static void inode_lru_list_add(struct inode *inode)
|
|
spin_unlock(&inode->i_sb->s_inode_lru_lock);
|
|
spin_unlock(&inode->i_sb->s_inode_lru_lock);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * Add inode to LRU if needed (inode is unused and clean).
|
|
|
|
+ *
|
|
|
|
+ * Needs inode->i_lock held.
|
|
|
|
+ */
|
|
|
|
+void inode_add_lru(struct inode *inode)
|
|
|
|
+{
|
|
|
|
+ if (!(inode->i_state & (I_DIRTY | I_SYNC | I_FREEING | I_WILL_FREE)) &&
|
|
|
|
+ !atomic_read(&inode->i_count) && inode->i_sb->s_flags & MS_ACTIVE)
|
|
|
|
+ inode_lru_list_add(inode);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
static void inode_lru_list_del(struct inode *inode)
|
|
static void inode_lru_list_del(struct inode *inode)
|
|
{
|
|
{
|
|
spin_lock(&inode->i_sb->s_inode_lru_lock);
|
|
spin_lock(&inode->i_sb->s_inode_lru_lock);
|
|
@@ -1390,8 +1403,7 @@ static void iput_final(struct inode *inode)
|
|
|
|
|
|
if (!drop && (sb->s_flags & MS_ACTIVE)) {
|
|
if (!drop && (sb->s_flags & MS_ACTIVE)) {
|
|
inode->i_state |= I_REFERENCED;
|
|
inode->i_state |= I_REFERENCED;
|
|
- if (!(inode->i_state & (I_DIRTY|I_SYNC)))
|
|
|
|
- inode_lru_list_add(inode);
|
|
|
|
|
|
+ inode_add_lru(inode);
|
|
spin_unlock(&inode->i_lock);
|
|
spin_unlock(&inode->i_lock);
|
|
return;
|
|
return;
|
|
}
|
|
}
|