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

Commit 059aa734 authored by Chuck Lever's avatar Chuck Lever Committed by Trond Myklebust
Browse files

nfs: Don't increment lock sequence ID after NFS4ERR_MOVED



Xuan Qi reports that the Linux NFSv4 client failed to lock a file
that was migrated. The steps he observed on the wire:

1. The client sent a LOCK request to the source server
2. The source server replied NFS4ERR_MOVED
3. The client switched to the destination server
4. The client sent the same LOCK request to the destination
   server with a bumped lock sequence ID
5. The destination server rejected the LOCK request with
   NFS4ERR_BAD_SEQID

RFC 3530 section 8.1.5 provides a list of NFS errors which do not
bump a lock sequence ID.

However, RFC 3530 is now obsoleted by RFC 7530. In RFC 7530 section
9.1.7, this list has been updated by the addition of NFS4ERR_MOVED.

Reported-by: default avatarXuan Qi <xuan.qi@oracle.com>
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
Cc: stable@vger.kernel.org # v3.7+
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
parent 8ac09251
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -282,7 +282,7 @@ enum nfsstat4 {

static inline bool seqid_mutating_err(u32 err)
{
	/* rfc 3530 section 8.1.5: */
	/* See RFC 7530, section 9.1.7 */
	switch (err) {
	case NFS4ERR_STALE_CLIENTID:
	case NFS4ERR_STALE_STATEID:
@@ -291,6 +291,7 @@ static inline bool seqid_mutating_err(u32 err)
	case NFS4ERR_BADXDR:
	case NFS4ERR_RESOURCE:
	case NFS4ERR_NOFILEHANDLE:
	case NFS4ERR_MOVED:
		return false;
	};
	return true;