Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 115ce575 authored by Trond Myklebust's avatar Trond Myklebust
Browse files

NFSv4.1: pnfs_layout_io_set_failed must clear invalid lsegs



If pnfs_layout_io_test_failed() authorises a retry of the failed layoutgets,
we should clear the existing layout segments so that we start afresh. Do
this in pnfs_layout_io_set_failed().

Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 3e621214
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -265,10 +265,18 @@ static void
pnfs_layout_io_set_failed(struct pnfs_layout_hdr *lo, u32 iomode)
{
	struct inode *inode = lo->plh_inode;
	struct pnfs_layout_range range = {
		.iomode = iomode,
		.offset = 0,
		.length = NFS4_MAX_UINT64,
	};
	LIST_HEAD(head);

	spin_lock(&inode->i_lock);
	pnfs_layout_set_fail_bit(lo, pnfs_iomode_to_fail_bit(iomode));
	pnfs_mark_matching_lsegs_invalid(lo, &head, &range);
	spin_unlock(&inode->i_lock);
	pnfs_free_lseg_list(&head);
	dprintk("%s Setting layout IOMODE_%s fail bit\n", __func__,
			iomode == IOMODE_RW ?  "RW" : "READ");
}