mirror of https://gitee.com/openkylin/linux.git
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: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
3e62121493
commit
115ce575cb
|
@ -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");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue