pNFS/flexfiles: Fix a deadlock on LAYOUTGET
authorFred Isaman <fred.isaman@gmail.com>
Fri, 30 Sep 2016 18:37:41 +0000 (14:37 -0400)
committerTrond Myklebust <trond.myklebust@primarydata.com>
Fri, 9 Dec 2016 02:49:57 +0000 (21:49 -0500)
commit65990d1afbd2d6fc23c6ecbd6f1899aa760a024f
tree3a18ac67020a08d0e7aec06158902b10f0644c4f
parent2f065ddb64193ebf9cd600395d4782287cd0f58e
pNFS/flexfiles: Fix a deadlock on LAYOUTGET

  We encountered a deadlock where the SEQUENCE that accompanied the
LAYOUTGET triggered a session drain, while ff_layout_alloc_lseg
triggered a GETDEVICEINFO.  The GETDEVICEINFO hung waiting for the
session drain, while the LAYOUTGET held the slot waiting for
alloc_lseg to finish.
  Avoid this by moving the call to nfs4_find_get_deviceid out of
ff_layout_alloc_lseg and into nfs4_ff_layout_prepare_ds.

Signed-off-by: Fred Isaman <fred.isaman@gmail.com>
[dros@primarydata.com: pNFS/flexfiles: fix races in ff_layout_mirror_valid]
Signed-off-by: Weston Andros Adamson <dros@primarydata.com>
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
fs/nfs/flexfilelayout/flexfilelayout.c
fs/nfs/flexfilelayout/flexfilelayout.h
fs/nfs/flexfilelayout/flexfilelayoutdev.c