Commit 00bcbe11 authored by Trond Myklebust's avatar Trond Myklebust

pNFS: Don't update the stateid when replying NFS4ERR_DELAY to a layout recall

RFC5661 doesn't state directly that the client should update the layout
stateid if it returns NFS4ERR_NOMATCHING_LAYOUT in response to a recall,
however it does state that this error will "cleanly indicate completion"
on par with returning the layout. For this reason, we assume that the
client should update the layout stateid. The Linux pNFS server definitely
does expect this behaviour.

However, if the client replies NFS4ERR_DELAY, then it is stating that
the recall was not processed, so it would be very wrong to update the
layout stateid.
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
parent e0b7d420
...@@ -273,7 +273,6 @@ static u32 initiate_file_draining(struct nfs_client *clp, ...@@ -273,7 +273,6 @@ static u32 initiate_file_draining(struct nfs_client *clp,
rv = pnfs_check_callback_stateid(lo, &args->cbl_stateid); rv = pnfs_check_callback_stateid(lo, &args->cbl_stateid);
if (rv != NFS_OK) if (rv != NFS_OK)
goto unlock; goto unlock;
pnfs_set_layout_stateid(lo, &args->cbl_stateid, true);
/* /*
* Enforce RFC5661 Section 12.5.5.2.1.5 (Bulk Recall and Return) * Enforce RFC5661 Section 12.5.5.2.1.5 (Bulk Recall and Return)
...@@ -283,6 +282,7 @@ static u32 initiate_file_draining(struct nfs_client *clp, ...@@ -283,6 +282,7 @@ static u32 initiate_file_draining(struct nfs_client *clp,
goto unlock; goto unlock;
} }
pnfs_set_layout_stateid(lo, &args->cbl_stateid, true);
switch (pnfs_mark_matching_lsegs_return(lo, &free_me_list, switch (pnfs_mark_matching_lsegs_return(lo, &free_me_list,
&args->cbl_range, &args->cbl_range,
be32_to_cpu(args->cbl_stateid.seqid))) { be32_to_cpu(args->cbl_stateid.seqid))) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment