Fix the new NFSv4 client so that it doesn't fill the cached
mode attribute in as 0 when doing writes. The change adds the Mode attribute plus the others except Owner and Owner_group to the list requested by the NFSv4 Write Operation. This fixed a problem where an executable file built by "cc" would get mode 0111 instead of 0755 for some NFSv4 servers. Found at the recent NFSv4 interoperability Bakeathon. Tested by: tdh at excfb.com MFC after: 2 weeks
This commit is contained in:
parent
d9f039e0b3
commit
4875024b26
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=223657
@ -868,15 +868,24 @@ struct nfsv3_sattr {
|
||||
* NFSATTRBIT_WRITEGETATTR0 - bits 0<->31
|
||||
*/
|
||||
#define NFSATTRBIT_WRITEGETATTR0 \
|
||||
(NFSATTRBM_CHANGE | \
|
||||
(NFSATTRBM_SUPPORTEDATTRS | \
|
||||
NFSATTRBM_TYPE | \
|
||||
NFSATTRBM_CHANGE | \
|
||||
NFSATTRBM_SIZE | \
|
||||
NFSATTRBM_FSID)
|
||||
NFSATTRBM_FSID | \
|
||||
NFSATTRBM_FILEID | \
|
||||
NFSATTRBM_MAXREAD)
|
||||
|
||||
/*
|
||||
* NFSATTRBIT_WRITEGETATTR1 - bits 32<->63
|
||||
*/
|
||||
#define NFSATTRBIT_WRITEGETATTR1 \
|
||||
(NFSATTRBM_TIMEMETADATA | \
|
||||
(NFSATTRBM_MODE | \
|
||||
NFSATTRBM_NUMLINKS | \
|
||||
NFSATTRBM_RAWDEV | \
|
||||
NFSATTRBM_SPACEUSED | \
|
||||
NFSATTRBM_TIMEACCESS | \
|
||||
NFSATTRBM_TIMEMETADATA | \
|
||||
NFSATTRBM_TIMEMODIFY)
|
||||
|
||||
/*
|
||||
|
@ -388,6 +388,7 @@ nfscl_loadattrcache(struct vnode **vpp, struct nfsvattr *nap, void *nvaper,
|
||||
np->n_vattr.na_mtime = nap->na_mtime;
|
||||
np->n_vattr.na_ctime = nap->na_ctime;
|
||||
np->n_vattr.na_fsid = nap->na_fsid;
|
||||
np->n_vattr.na_mode = nap->na_mode;
|
||||
} else {
|
||||
NFSBCOPY((caddr_t)nap, (caddr_t)&np->n_vattr,
|
||||
sizeof (struct nfsvattr));
|
||||
|
@ -1527,8 +1527,8 @@ nfsrpc_writerpc(vnode_t vp, struct uio *uiop, int *iomode,
|
||||
* deadlock, is that the upcall times out and allows
|
||||
* the write to complete. However, progress is so slow
|
||||
* that it might just as well be deadlocked.
|
||||
* So, we just get the attributes that change with each
|
||||
* write Op.
|
||||
* As such, we get the rest of the attributes, but not
|
||||
* Owner or Owner_group.
|
||||
* nb: nfscl_loadattrcache() needs to be told that these
|
||||
* partial attributes from a write rpc are being
|
||||
* passed in, via a argument flag.
|
||||
|
Loading…
Reference in New Issue
Block a user