From 2371321e8a3d29e19cbc3a280f48636211abb480 Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Mon, 11 Jun 2012 09:12:37 -0700 Subject: [PATCH] Fix invalid context bug In the module unload path the vm_file_cache was being destroyed under a spin lock. Because this operation might sleep it was possible, although very very unlikely, that this could result in a deadlock. This issue was indentified by using a Linux debug kernel and has been fixed by moving the kmem_cache_destroy() out from under the spin lock. There is no need to lock this operation here. Signed-off-by: Brian Behlendorf Closes zfsonlinux/zfs#771 --- module/spl/spl-vnode.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/module/spl/spl-vnode.c b/module/spl/spl-vnode.c index cd0fa2cd1..2e55b007b 100644 --- a/module/spl/spl-vnode.c +++ b/module/spl/spl-vnode.c @@ -845,13 +845,12 @@ spl_vn_fini(void) leaked++; } - kmem_cache_destroy(vn_file_cache); - vn_file_cache = NULL; spin_unlock(&vn_file_lock); if (leaked > 0) SWARN("Warning %d files leaked\n", leaked); + kmem_cache_destroy(vn_file_cache); kmem_cache_destroy(vn_cache); SEXIT;