]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/drop_caches.c
OMAP1: clock: Typo fix for clock in omap1
[linux-2.6-omap-h63xx.git] / fs / drop_caches.c
index e2c6b6500c783a286708e1127025a00b6453f7e0..44d725f612cf346ec2e4d9bf2801913de393b967 100644 (file)
@@ -14,15 +14,23 @@ int sysctl_drop_caches;
 
 static void drop_pagecache_sb(struct super_block *sb)
 {
-       struct inode *inode;
+       struct inode *inode, *toput_inode = NULL;
 
        spin_lock(&inode_lock);
        list_for_each_entry(inode, &sb->s_inodes, i_sb_list) {
-               if (inode->i_state & (I_FREEING|I_WILL_FREE))
+               if (inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW))
                        continue;
+               if (inode->i_mapping->nrpages == 0)
+                       continue;
+               __iget(inode);
+               spin_unlock(&inode_lock);
                __invalidate_mapping_pages(inode->i_mapping, 0, -1, true);
+               iput(toput_inode);
+               toput_inode = inode;
+               spin_lock(&inode_lock);
        }
        spin_unlock(&inode_lock);
+       iput(toput_inode);
 }
 
 static void drop_pagecache(void)