The patch titled VFS: Fix an error in unused dentry counting has been added to the -mm tree. Its filename is vfs-fix-an-error-in-unused-dentry-counting.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this ------------------------------------------------------ Subject: VFS: Fix an error in unused dentry counting From: David Howells <dhowells@xxxxxxxxxx> Fix an error in unused dentry counting in shrink_dcache_for_umount_subtree() in which the count is modified without the dcache_lock held. Signed-off-by: David Howells <dhowells@xxxxxxxxxx> Cc: Vasily Averin <vvs@xxxxx> Cc: Neil Brown <neilb@xxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- fs/dcache.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff -puN fs/dcache.c~vfs-fix-an-error-in-unused-dentry-counting fs/dcache.c --- a/fs/dcache.c~vfs-fix-an-error-in-unused-dentry-counting +++ a/fs/dcache.c @@ -555,16 +555,17 @@ repeat: * - see the comments on shrink_dcache_for_umount() for a description of the * locking */ -static void shrink_dcache_for_umount_subtree(struct dentry *dentry) +static unsigned shrink_dcache_for_umount_subtree(struct dentry *dentry) { struct dentry *parent; + unsigned detached = 0; BUG_ON(!IS_ROOT(dentry)); /* detach this root from the system */ spin_lock(&dcache_lock); if (!list_empty(&dentry->d_lru)) { - dentry_stat.nr_unused--; + detached++; list_del_init(&dentry->d_lru); } __d_drop(dentry); @@ -581,7 +582,7 @@ static void shrink_dcache_for_umount_sub list_for_each_entry(loop, &dentry->d_subdirs, d_u.d_child) { if (!list_empty(&loop->d_lru)) { - dentry_stat.nr_unused--; + detached++; list_del_init(&loop->d_lru); } @@ -622,7 +623,7 @@ static void shrink_dcache_for_umount_sub atomic_dec(&parent->d_count); list_del(&dentry->d_u.d_child); - dentry_stat.nr_dentry--; /* For d_free, below */ + detached++; /* For d_free, below */ inode = dentry->d_inode; if (inode) { @@ -640,7 +641,7 @@ static void shrink_dcache_for_umount_sub * otherwise we ascend to the parent and move to the * next sibling if there is one */ if (!parent) - return; + return detached; dentry = parent; @@ -665,6 +666,7 @@ static void shrink_dcache_for_umount_sub void shrink_dcache_for_umount(struct super_block *sb) { struct dentry *dentry; + unsigned detached = 0; if (down_read_trylock(&sb->s_umount)) BUG(); @@ -672,11 +674,17 @@ void shrink_dcache_for_umount(struct sup dentry = sb->s_root; sb->s_root = NULL; atomic_dec(&dentry->d_count); - shrink_dcache_for_umount_subtree(dentry); + detached = shrink_dcache_for_umount_subtree(dentry); while (!hlist_empty(&sb->s_anon)) { dentry = hlist_entry(sb->s_anon.first, struct dentry, d_hash); - shrink_dcache_for_umount_subtree(dentry); + detached += shrink_dcache_for_umount_subtree(dentry); + } + + if (detached) { + spin_lock(&dcache_lock); + dentry_stat.nr_unused -= detached; + spin_unlock(&dcache_lock); } } _ Patches currently in -mm which might be from dhowells@xxxxxxxxxx are visws-build-fix.patch missing-unused-dentry-in-prune_dcache.patch vfs-fix-an-error-in-unused-dentry-counting.patch nfs-represent-64-bit-fileids-as-64-bit-inode-numbers-on-32-bit-systems.patch log2-implement-a-general-integer-log2-facility-in-the-kernel.patch log2-implement-a-general-integer-log2-facility-in-the-kernel-fix.patch log2-implement-a-general-integer-log2-facility-in-the-kernel-vs-git-cryptodev.patch log2-alter-roundup_pow_of_two-so-that-it-can-use-a-ilog2-on-a-constant.patch log2-alter-get_order-so-that-it-can-make-use-of-ilog2-on-a-constant.patch log2-provide-ilog2-fallbacks-for-powerpc.patch fs-cache-provide-a-filesystem-specific-syncable-page-bit.patch fs-cache-generic-filesystem-caching-facility.patch fs-cache-release-page-private-in-failed-readahead.patch fs-cache-release-page-private-after-failed-readahead-12.patch fs-cache-make-kafs-use-fs-cache.patch fs-cache-make-kafs-use-fs-cache-fix.patch fs-cache-make-kafs-use-fs-cache-12.patch fs-cache-make-kafs-use-fs-cache-12-fix.patch fs-cache-make-kafs-use-fs-cache-kconfig-fix.patch fs-cache-make-kafs-use-fs-cache-vs-streamline-generic_file_-interfaces-and-filemap.patch nfs-use-local-caching.patch nfs-use-local-caching-12.patch nfs-use-local-caching-12-fix.patch nfs-use-local-caching-kconfig-fix.patch nfs-use-local-caching-configh.patch add-missing-page_copy-export-for-ppc-and-powerpc.patch fs-cache-cachefiles-ia64-missing-copy_page-export.patch fs-cache-cachefiles-a-cache-that-backs-onto-a-mounted-filesystem.patch fs-cache-cachefiles-a-cache-that-backs-onto-a-mounted-filesystem-fscache-fix-gfp_t-sparse-annotations.patch fs-cache-cachefiles-a-cache-that-backs-onto-a-mounted-filesystem-cachefiles-printk-format-warning.patch fs-cache-cachefiles-a-cache-that-backs-onto-a-mounted-filesystem-warning-fixes.patch fs-cache-cachefiles-a-cache-that-backs-onto-a-mounted-filesystem-cachefiles-cachefiles_write_page-shouldnt-indicate-error-twice.patch fscache-kconfig-tidying.patch fs-cache-cachefiles-a-cache-that-backs-onto-a-mounted-filesystem-log2-fix.patch fs-cache-cachefiles-a-cache-that-backs-onto-a-mounted-filesystem-cachefiles-handle-enospc-on-create-mkdir-better.patch fs-cache-cachefiles-a-cache-that-backs-onto-a-mounted-filesystem-inode-count-maintenance.patch afs-amend-the-afs-configuration-options.patch reiser4-get_sb_dev-fix.patch mutex-subsystem-synchro-test-module.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html