Check-point for discussion. For completeness, here is the whole series of patches (including experimental and temporary patches) that I'm considering for addressing the RELEASE_LOCKOWNER "sleep while spin locked" splat. It's not finished by any means. Getting the new boolean arguments right is not straightforward. This series does not work properly, for example, when LOCK returns NFS4ERR_DENIED -- it leaves the lo_lockcnt bumped. I still fear this approach would be brittle in the long run; I'm leaning towards the so_count-based approach instead, as that is simple and nicely contained within NFSD itself. Thanks for taking a look. --- Chuck Lever (6): fs/locks.c: Count held file locks NFSD: Fix possible sleep during nfsd4_release_lockowner() blargh NFSD: Modernize nfsd4_release_lockowner() NFSD: Add documenting comment for nfsd4_release_lockowner() NFSD: nfsd_file_put() can sleep fs/lockd/svclock.c | 4 +-- fs/locks.c | 20 +++++++----- fs/nfsd/filecache.c | 2 ++ fs/nfsd/nfs4state.c | 80 +++++++++++++++++++++++++-------------------- fs/nfsd/state.h | 1 + include/linux/fs.h | 12 ++----- 6 files changed, 65 insertions(+), 54 deletions(-) -- Chuck Lever