From d83017f94c290c56010e194cdbc45e59894ccae2 Mon Sep 17 00:00:00 2001 From: Jeff Layton Date: Tue, 29 Jul 2014 21:34:42 -0400 Subject: [PATCH] nfsd: don't thrash the cl_lock while freeing an open stateid When we remove the client_mutex, we'll have a potential race between FREE_STATEID and CLOSE. The root of the problem is that we are walking the st_locks list, dropping the spinlock and then trying to release the persistent reference to the lockstateid. In between, a FREE_STATEID call can come along and take the lock, find the stateid and then try to put the reference. That leads to a double put. Fix this by not releasing the cl_lock in order to release each lock stateid. Use put_generic_stateid_locked to unhash them and gather them onto a list, and free_ol_stateid_reaplist to free any that end up on the list. Signed-off-by: Jeff Layton Signed-off-by: J. Bruce Fields --- Reading git-format-patch failed