mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 12:42:02 +00:00
pNFS/NFSv4: Try to return invalid layout in pnfs_layout_process()
If the server returns a new stateid that does not match the one in our cache, then try to return the one we hold instead of just invalidating it on the client side. This ensures that both client and server will agree that the stateid is invalid. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
814b849713
commit
08bd8dbe88
@ -2398,7 +2398,13 @@ pnfs_layout_process(struct nfs4_layoutget *lgp)
|
||||
* We got an entirely new state ID. Mark all segments for the
|
||||
* inode invalid, and retry the layoutget
|
||||
*/
|
||||
pnfs_mark_layout_stateid_invalid(lo, &free_me);
|
||||
struct pnfs_layout_range range = {
|
||||
.iomode = IOMODE_ANY,
|
||||
.length = NFS4_MAX_UINT64,
|
||||
};
|
||||
pnfs_set_plh_return_info(lo, IOMODE_ANY, 0);
|
||||
pnfs_mark_matching_lsegs_return(lo, &lo->plh_return_segs,
|
||||
&range, 0);
|
||||
goto out_forget;
|
||||
}
|
||||
|
||||
@ -2417,7 +2423,6 @@ out_forget:
|
||||
spin_unlock(&ino->i_lock);
|
||||
lseg->pls_layout = lo;
|
||||
NFS_SERVER(ino)->pnfs_curr_ld->free_lseg(lseg);
|
||||
pnfs_free_lseg_list(&free_me);
|
||||
return ERR_PTR(-EAGAIN);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user