Commit 7bcc1058 authored by Trond Myklebust's avatar Trond Myklebust
Browse files

NFS/pnfs: Ensure that _pnfs_return_layout() waits for layoutreturn completion



We require that any outstanding layout return completes before we can
free up the inode so that the layout itself can be freed.

Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
parent ae83d0b4
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1332,13 +1332,15 @@ _pnfs_return_layout(struct inode *ino)
			!valid_layout) {
		spin_unlock(&ino->i_lock);
		dprintk("NFS: %s no layout segments to return\n", __func__);
		goto out_put_layout_hdr;
		goto out_wait_layoutreturn;
	}

	send = pnfs_prepare_layoutreturn(lo, &stateid, &cred, NULL);
	spin_unlock(&ino->i_lock);
	if (send)
		status = pnfs_send_layoutreturn(lo, &stateid, &cred, IOMODE_ANY, true);
out_wait_layoutreturn:
	wait_on_bit(&lo->plh_flags, NFS_LAYOUT_RETURN, TASK_UNINTERRUPTIBLE);
out_put_layout_hdr:
	pnfs_free_lseg_list(&tmp_list);
	pnfs_put_layout_hdr(lo);