From: npiggin on 23 Jun 2010 23:20 dentry referenced bit is only set when installing the dentry back onto the LRU. However with lazy LRU, the dentry can already be on the LRU list at dput time, thus missing out on setting the referenced bit. Fix this. Signed-off-by: Nick Piggin <npiggin(a)suse.de> Index: linux-2.6/fs/dcache.c =================================================================== --- linux-2.6.orig/fs/dcache.c +++ linux-2.6/fs/dcache.c @@ -387,10 +387,10 @@ repeat: /* Unreachable? Get rid of it */ if (d_unhashed(dentry)) goto kill_it; - if (list_empty(&dentry->d_lru)) { - dentry->d_flags |= DCACHE_REFERENCED; + /* Otherwise leave it cached and ensure it's on the LRU */ + if (list_empty(&dentry->d_lru)) dentry_lru_add(dentry); - } + dentry->d_flags |= DCACHE_REFERENCED; dentry->d_count--; spin_unlock(&dentry->d_lock); return; -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|
Pages: 1 Prev: [RFC 2/5] NMI return notifier Next: [patch 20/52] fs: dcache reduce dcache_inode_lock |