pNFS: Fix races between return-on-close and layoutreturn.
authorTrond Myklebust <trond.myklebust@primarydata.com>
Thu, 9 Jul 2015 16:40:01 +0000 (18:40 +0200)
committerTrond Myklebust <trond.myklebust@primarydata.com>
Sat, 11 Jul 2015 14:16:16 +0000 (16:16 +0200)
If one or more of the layout segments reports an error during I/O, then
we may have to send a layoutreturn to report the error back to the NFS
metadata server.
This patch ensures that the return-on-close code can detect the
outstanding layoutreturn, and not preempt it.

Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
fs/nfs/nfs4proc.c
fs/nfs/pnfs.c

index 671498c..c5c9e0d 100644 (file)
@@ -7972,8 +7972,6 @@ static void nfs4_layoutreturn_release(void *calldata)
                pnfs_set_layout_stateid(lo, &lrp->res.stateid, true);
        pnfs_mark_matching_lsegs_invalid(lo, &freeme, &lrp->args.range);
        pnfs_clear_layoutreturn_waitbit(lo);
-       clear_bit(NFS_LAYOUT_RETURN_BEFORE_CLOSE, &lo->plh_flags);
-       rpc_wake_up(&NFS_SERVER(lo->plh_inode)->roc_rpcwaitq);
        lo->plh_block_lgets--;
        spin_unlock(&lo->plh_inode->i_lock);
        pnfs_free_lseg_list(&freeme);
diff --cc fs/nfs/pnfs.c
Simple merge