Subject: [nfsv4] Question about compound operation 2

From: Frank S Filz <[email-masked]>
Date: Thu, 23 May 2013 14:05:29 -0700

RFC 5661 has the following text:

 Note that operations zero and one are not defined for the COMPOUND
procedure. Operation 2 is not defined and is reserved for future
definition and use with minor versioning. If the server receives an
operation array that contains operation 2 and the minorversion field
has a value of zero, an error of NFS4ERR_OP_ILLEGAL, as described in
the next paragraph, is returned to the client. If an operation array
contains an operation 2 and the minorversion field is non-zero and
the server does not support the minor version, the server returns an
error of NFS4ERR_MINOR_VERS_MISMATCH. Therefore, the
NFS4ERR_MINOR_VERS_MISMATCH error takes precedence over all other
errors.

But RFC 5661 doesn't define an operation 2.

Is operation 2 intended to be a sort of "minor version ping"? If so, I
would assume it has no parameters.

Thanks

Frank

---

From: Benny Halevy <[email-masked]>
Date: Fri, 24 May 2013 05:55:26 +0300

> But RFC 5661 doesn't define an operation 2.

A server that does not support the minor version doesn't even know that.

>
> Is operation 2 intended to be a sort of "minor version ping"? If so, I would assume it has no parameters.

Why is that? It is not defined.
If the server supports minor version 1 it must return NFS4ERR_OP_ILLEGAL.

Benny

>
> Thanks
>
> Frank
>
>
> _______________________________________________
> nfsv4 mailing list
> [email-masked]
> https://www.ietf.org/mailman/listinfo/nfsv4
>

---

From: Frank S Filz <[email-masked]>
Date: Fri, 24 May 2013 06:42:14 -0700

> If the server supports minor version 1 it must return NFS4ERR_OP_ILLEGAL.

The text above seems to imply that a server that supports at least one
minor version should return NFS4ERR_MINOR_VERS_MISMATCH if the minor
version is not supported (for example, a 4.1 server receiving a request for
minor version 2). On the other hand, a 4.0 server should return
NFS4ERR_OP_ILLEGAL.

Hmm, what it doesn't really say is what a 4.1 server should do if it
receives operation 2 with minor version 1?

But we (the Ganesha team) is confused since operation 2 doesn't show up in
the list of operations in RFC 5661.

Frank

---

From: Rick Macklem <[email-masked]>
Date: Fri, 24 May 2013 14:49:44 -0400 (EDT)

Frank S. Filz wrote:
> version is not supported (for example, a 4.1 server receiving a
> request for minor version 2). On the other hand, a 4.0 server should
> return NFS4ERR_OP_ILLEGAL.
> 
I think that wording comes from the fact that the old (RFC-3530) minor
versioning rules required that a server supporting 4.n also support
4.0->4.n-1. Since that requirement got dropped (I think?), I would expect a
server to reply NFS4ERR_MINOR_VERS_MISMATCH for any minor version not
supported.

> receives operation 2 with minor version 1?
I agree with Benny that NFS4ERR_OP_ILLEGAL makes sense, since the
operation isn't defined.

> But we (the Ganesha team) is confused since operation 2 doesn't show
> up in the list of operations in RFC 5661.
> 
> Frank
> 
One related question that this does bring up is, if a client wants to
test a server to see if it supports minor version n, what should it
put in the nfs_argop4<> array of a compound request? If it makes this
array empty (0 length), then it seems that the value of status in the
reply is undefined. (It is defined as the same value as the result of
the last operation, but if there are no operations?)

I could see an argument for making the nfs_argop4<> array length 1 with
an illegal operation number for this case, although I'd probably go with
something like OP_PUTROOTFH and then assume the minor version is
supported if the reply status is anything other than NFS4ERR_MINOR_VERS_MISMATCH.
Does this makes sense others?

rick

---

From: Benny Halevy <[email-masked]>
Date: Sat, 25 May 2013 08:54:05 +0300

> Does this makes sense others?

Makes sense to me.

Benny