From f49f9baac8f63de9cbc17a0a84e04060496e8e76 Mon Sep 17 00:00:00 2001 From: Fred Isaman Date: Thu, 3 Feb 2011 18:28:52 +0000 Subject: [PATCH] pnfs: fix pnfs lock inversion of i_lock and cl_lock The pnfs code was using throughout the lock order i_lock, cl_lock. This conflicts with the nfs delegation code. Rework the pnfs code to avoid taking both locks simultaneously. Currently the code takes the double lock to add/remove the layout to a nfs_client list, while atomically checking that the list of lsegs is empty. To avoid this, we rely on existing serializations. When a layout is initialized with lseg count equal zero, LAYOUTGET's openstateid serialization is in effect, making it safe to assume it stays zero unless we change it. And once a layout's lseg count drops to zero, it is set as DESTROYED and so will stay at zero. Signed-off-by: Fred Isaman Signed-off-by: Trond Myklebust --- Reading git-format-patch failed