diff --git a/fs/dirty_pages.c b/fs/dirty_pages.c index f75a5158d94b25d56c344fbe1e6d0c40036a1ef5..b2044d78b6f2af2edb9c1f17f791011f0ad8ae4a 100644 --- a/fs/dirty_pages.c +++ b/fs/dirty_pages.c @@ -120,6 +120,7 @@ static void dump_dirtypages_sb(struct super_block *sb, struct seq_file *m) spin_lock(&sb->s_inode_list_lock); list_for_each_entry(inode, &sb->s_inodes, i_sb_list) { + nr_dirtys = 0; spin_lock(&inode->i_lock); /* @@ -138,7 +139,8 @@ static void dump_dirtypages_sb(struct super_block *sb, struct seq_file *m) cond_resched(); - nr_dirtys = dump_dirtypages_inode(inode); + if (!S_ISBLK(inode->i_mode) || sb_is_blkdev_sb(sb)) + nr_dirtys = dump_dirtypages_inode(inode); if (!nr_dirtys || nr_dirtys < limit) goto skip; diff --git a/fs/drop_caches.c b/fs/drop_caches.c index f00fcc4a4f7215dbfa2ab657299cf706fdd92efd..ded2197a165c03816dacd68baba48249656d1784 100644 --- a/fs/drop_caches.c +++ b/fs/drop_caches.c @@ -35,7 +35,8 @@ static void drop_pagecache_sb(struct super_block *sb, void *unused) spin_unlock(&inode->i_lock); spin_unlock(&sb->s_inode_list_lock); - invalidate_mapping_pages(inode->i_mapping, 0, -1); + if (!S_ISBLK(inode->i_mode) || sb_is_blkdev_sb(sb)) + invalidate_mapping_pages(inode->i_mapping, 0, -1); iput(toput_inode); toput_inode = inode;