forked from Minki/linux
nfsd: improve stateid access bitmask documentation
The use of the bitmaps is confusing. Add a cross-reference to make it easier to find the existing comment. Add an updated reference with URL to make it quicker to look up. And a bit more editorializing about the value of this. Signed-off-by: J. Bruce Fields <bfields@redhat.com> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
parent
70e94d757b
commit
3dcd1d8aab
@ -360,11 +360,13 @@ static const struct nfsd4_callback_ops nfsd4_cb_notify_lock_ops = {
|
|||||||
* st_{access,deny}_bmap field of the stateid, in order to track not
|
* st_{access,deny}_bmap field of the stateid, in order to track not
|
||||||
* only what share bits are currently in force, but also what
|
* only what share bits are currently in force, but also what
|
||||||
* combinations of share bits previous opens have used. This allows us
|
* combinations of share bits previous opens have used. This allows us
|
||||||
* to enforce the recommendation of rfc 3530 14.2.19 that the server
|
* to enforce the recommendation in
|
||||||
* return an error if the client attempt to downgrade to a combination
|
* https://datatracker.ietf.org/doc/html/rfc7530#section-16.19.4 that
|
||||||
* of share bits not explicable by closing some of its previous opens.
|
* the server return an error if the client attempt to downgrade to a
|
||||||
|
* combination of share bits not explicable by closing some of its
|
||||||
|
* previous opens.
|
||||||
*
|
*
|
||||||
* XXX: This enforcement is actually incomplete, since we don't keep
|
* This enforcement is arguably incomplete, since we don't keep
|
||||||
* track of access/deny bit combinations; so, e.g., we allow:
|
* track of access/deny bit combinations; so, e.g., we allow:
|
||||||
*
|
*
|
||||||
* OPEN allow read, deny write
|
* OPEN allow read, deny write
|
||||||
@ -372,6 +374,10 @@ static const struct nfsd4_callback_ops nfsd4_cb_notify_lock_ops = {
|
|||||||
* DOWNGRADE allow read, deny none
|
* DOWNGRADE allow read, deny none
|
||||||
*
|
*
|
||||||
* which we should reject.
|
* which we should reject.
|
||||||
|
*
|
||||||
|
* But you could also argue that our current code is already overkill,
|
||||||
|
* since it only exists to return NFS4ERR_INVAL on incorrect client
|
||||||
|
* behavior.
|
||||||
*/
|
*/
|
||||||
static unsigned int
|
static unsigned int
|
||||||
bmap_to_share_mode(unsigned long bmap)
|
bmap_to_share_mode(unsigned long bmap)
|
||||||
|
@ -568,6 +568,10 @@ struct nfs4_ol_stateid {
|
|||||||
struct list_head st_locks;
|
struct list_head st_locks;
|
||||||
struct nfs4_stateowner *st_stateowner;
|
struct nfs4_stateowner *st_stateowner;
|
||||||
struct nfs4_clnt_odstate *st_clnt_odstate;
|
struct nfs4_clnt_odstate *st_clnt_odstate;
|
||||||
|
/*
|
||||||
|
* These bitmasks use 3 separate bits for READ, ALLOW, and BOTH; see the
|
||||||
|
* comment above bmap_to_share_mode() for explanation:
|
||||||
|
*/
|
||||||
unsigned char st_access_bmap;
|
unsigned char st_access_bmap;
|
||||||
unsigned char st_deny_bmap;
|
unsigned char st_deny_bmap;
|
||||||
struct nfs4_ol_stateid *st_openstp;
|
struct nfs4_ol_stateid *st_openstp;
|
||||||
|
Loading…
Reference in New Issue
Block a user