diff options
author | rmacklem <rmacklem@FreeBSD.org> | 2013-12-31 21:56:02 +0000 |
---|---|---|
committer | rmacklem <rmacklem@FreeBSD.org> | 2013-12-31 21:56:02 +0000 |
commit | 0d5a6b8a1adda2edb7fe84dd123097c69cf85dd8 (patch) | |
tree | a442ae254bc5cee6d97e3f25bbabc245cb1e5f5f /sys/fs | |
parent | f881b459a3fe369b609e6a178021b210add26f5c (diff) | |
download | FreeBSD-src-0d5a6b8a1adda2edb7fe84dd123097c69cf85dd8.zip FreeBSD-src-0d5a6b8a1adda2edb7fe84dd123097c69cf85dd8.tar.gz |
MFC: r259801
The NFSv4 client was passing both the p and cred arguments to
nfsv4_fillattr() as NULLs for the Getattr callback. This caused
nfsv4_fillattr() to not fill in the Change attribute for the reply.
I believe this was a violation of the RFC, but had little effect on
server behaviour. This patch passes a non-NULL p argument to fix this.
Diffstat (limited to 'sys/fs')
-rw-r--r-- | sys/fs/nfs/nfs_commonsubs.c | 7 | ||||
-rw-r--r-- | sys/fs/nfsclient/nfs_clstate.c | 2 |
2 files changed, 7 insertions, 2 deletions
diff --git a/sys/fs/nfs/nfs_commonsubs.c b/sys/fs/nfs/nfs_commonsubs.c index 0ee06bd..11833438 100644 --- a/sys/fs/nfs/nfs_commonsubs.c +++ b/sys/fs/nfs/nfs_commonsubs.c @@ -2011,7 +2011,12 @@ nfsv4_fillattr(struct nfsrv_descript *nd, struct mount *mp, vnode_t vp, * First, set the bits that can be filled and get fsinfo. */ NFSSET_ATTRBIT(retbitp, attrbitp); - /* If p and cred are NULL, it is a client side call */ + /* + * If both p and cred are NULL, it is a client side setattr call. + * If both p and cred are not NULL, it is a server side reply call. + * If p is not NULL and cred is NULL, it is a client side callback + * reply call. + */ if (p == NULL && cred == NULL) { NFSCLRNOTSETABLE_ATTRBIT(retbitp); aclp = saclp; diff --git a/sys/fs/nfsclient/nfs_clstate.c b/sys/fs/nfsclient/nfs_clstate.c index b378b8c..5fa302f 100644 --- a/sys/fs/nfsclient/nfs_clstate.c +++ b/sys/fs/nfsclient/nfs_clstate.c @@ -3279,7 +3279,7 @@ nfscl_docb(struct nfsrv_descript *nd, NFSPROC_T *p) FREE((caddr_t)nfhp, M_NFSFH); if (!error) (void) nfsv4_fillattr(nd, NULL, NULL, NULL, &va, - NULL, 0, &rattrbits, NULL, NULL, 0, 0, 0, 0, + NULL, 0, &rattrbits, NULL, p, 0, 0, 0, 0, (uint64_t)0); break; case NFSV4OP_CBRECALL: |