View | Details | Raw Unified | Return to bug 268828 | Differences between
and this patch

Collapse All | Expand All

(-)sys/fs/nfs/nfs_var.h (-1 / +1 lines)
Lines 719-725 int nfsvno_statfs(vnode_t, struct statfs *); Link Here
719
void nfsvno_getfs(struct nfsfsinfo *, int);
719
void nfsvno_getfs(struct nfsfsinfo *, int);
720
void nfsvno_open(struct nfsrv_descript *, struct nameidata *, nfsquad_t,
720
void nfsvno_open(struct nfsrv_descript *, struct nameidata *, nfsquad_t,
721
    nfsv4stateid_t *, struct nfsstate *, int *, struct nfsvattr *, int32_t *,
721
    nfsv4stateid_t *, struct nfsstate *, int *, struct nfsvattr *, int32_t *,
722
    int, NFSACL_T *, nfsattrbit_t *, struct ucred *,
722
    int, NFSACL_T *, nfsattrbit_t *, struct ucred *, bool,
723
    struct nfsexstuff *, vnode_t *);
723
    struct nfsexstuff *, vnode_t *);
724
int nfsvno_updfilerev(vnode_t, struct nfsvattr *, struct nfsrv_descript *,
724
int nfsvno_updfilerev(vnode_t, struct nfsvattr *, struct nfsrv_descript *,
725
    NFSPROC_T *);
725
    NFSPROC_T *);
(-)sys/fs/nfsserver/nfs_nfsdport.c (-2 / +2 lines)
Lines 1852-1858 void Link Here
1852
nfsvno_open(struct nfsrv_descript *nd, struct nameidata *ndp,
1852
nfsvno_open(struct nfsrv_descript *nd, struct nameidata *ndp,
1853
    nfsquad_t clientid, nfsv4stateid_t *stateidp, struct nfsstate *stp,
1853
    nfsquad_t clientid, nfsv4stateid_t *stateidp, struct nfsstate *stp,
1854
    int *exclusive_flagp, struct nfsvattr *nvap, int32_t *cverf, int create,
1854
    int *exclusive_flagp, struct nfsvattr *nvap, int32_t *cverf, int create,
1855
    NFSACL_T *aclp, nfsattrbit_t *attrbitp, struct ucred *cred,
1855
    NFSACL_T *aclp, nfsattrbit_t *attrbitp, struct ucred *cred, bool done_namei,
1856
    struct nfsexstuff *exp, struct vnode **vpp)
1856
    struct nfsexstuff *exp, struct vnode **vpp)
1857
{
1857
{
1858
	struct vnode *vp = NULL;
1858
	struct vnode *vp = NULL;
Lines 1935-1941 nfsvno_open(struct nfsrv_descript *nd, struct nameidat Link Here
1935
		}
1935
		}
1936
	} else {
1936
	} else {
1937
		nfsvno_relpathbuf(ndp);
1937
		nfsvno_relpathbuf(ndp);
1938
		if (create == NFSV4OPEN_CREATE) {
1938
		if (done_namei && create == NFSV4OPEN_CREATE) {
1939
			if (ndp->ni_dvp == ndp->ni_vp)
1939
			if (ndp->ni_dvp == ndp->ni_vp)
1940
				vrele(ndp->ni_dvp);
1940
				vrele(ndp->ni_dvp);
1941
			else
1941
			else
(-)sys/fs/nfsserver/nfs_nfsdserv.c (-5 / +8 lines)
Lines 2830-2842 nfsrvd_open(struct nfsrv_descript *nd, __unused int is Link Here
2830
	u_long *hashp;
2830
	u_long *hashp;
2831
	NFSACL_T *aclp = NULL;
2831
	NFSACL_T *aclp = NULL;
2832
	struct thread *p = curthread;
2832
	struct thread *p = curthread;
2833
	bool done_namei;
2833
2834
2834
#ifdef NFS4_ACL_EXTATTR_NAME
2835
#ifdef NFS4_ACL_EXTATTR_NAME
2835
	aclp = acl_alloc(M_WAITOK);
2836
	aclp = acl_alloc(M_WAITOK);
2836
	aclp->acl_cnt = 0;
2837
	aclp->acl_cnt = 0;
2837
#endif
2838
#endif
2838
	NFSZERO_ATTRBIT(&attrbits);
2839
	NFSZERO_ATTRBIT(&attrbits);
2839
	named.ni_startdir = NULL;
2840
	done_namei = false;
2840
	named.ni_cnd.cn_nameiop = 0;
2841
	named.ni_cnd.cn_nameiop = 0;
2841
	NFSM_DISSECT(tl, u_int32_t *, 6 * NFSX_UNSIGNED);
2842
	NFSM_DISSECT(tl, u_int32_t *, 6 * NFSX_UNSIGNED);
2842
	i = fxdr_unsigned(int, *(tl + 5));
2843
	i = fxdr_unsigned(int, *(tl + 5));
Lines 3042-3047 nfsrvd_open(struct nfsrv_descript *nd, __unused int is Link Here
3042
		if (!nd->nd_repstat) {
3043
		if (!nd->nd_repstat) {
3043
			nd->nd_repstat = nfsvno_namei(nd, &named, dp, 0, exp,
3044
			nd->nd_repstat = nfsvno_namei(nd, &named, dp, 0, exp,
3044
			    &dirp);
3045
			    &dirp);
3046
			done_namei = true;
3045
		} else {
3047
		} else {
3046
			vrele(dp);
3048
			vrele(dp);
3047
			nfsvno_relpathbuf(&named);
3049
			nfsvno_relpathbuf(&named);
Lines 3049-3055 nfsrvd_open(struct nfsrv_descript *nd, __unused int is Link Here
3049
		if (create == NFSV4OPEN_CREATE) {
3051
		if (create == NFSV4OPEN_CREATE) {
3050
		    switch (how) {
3052
		    switch (how) {
3051
		    case NFSCREATE_UNCHECKED:
3053
		    case NFSCREATE_UNCHECKED:
3052
			if (named.ni_vp) {
3054
			if (done_namei && named.ni_vp != NULL) {
3053
				/*
3055
				/*
3054
				 * Clear the setable attribute bits, except
3056
				 * Clear the setable attribute bits, except
3055
				 * for Size, if it is being truncated.
3057
				 * for Size, if it is being truncated.
Lines 3061-3072 nfsrvd_open(struct nfsrv_descript *nd, __unused int is Link Here
3061
			}
3063
			}
3062
			break;
3064
			break;
3063
		    case NFSCREATE_GUARDED:
3065
		    case NFSCREATE_GUARDED:
3064
			if (named.ni_vp && !nd->nd_repstat)
3066
			if (done_namei && named.ni_vp != NULL &&
3067
			    nd->nd_repstat == 0)
3065
				nd->nd_repstat = EEXIST;
3068
				nd->nd_repstat = EEXIST;
3066
			break;
3069
			break;
3067
		    case NFSCREATE_EXCLUSIVE:
3070
		    case NFSCREATE_EXCLUSIVE:
3068
			exclusive_flag = 1;
3071
			exclusive_flag = 1;
3069
			if (!named.ni_vp)
3072
			if (done_namei && named.ni_vp == NULL)
3070
				nva.na_mode = 0;
3073
				nva.na_mode = 0;
3071
			break;
3074
			break;
3072
		    case NFSCREATE_EXCLUSIVE41:
3075
		    case NFSCREATE_EXCLUSIVE41:
Lines 3076-3082 nfsrvd_open(struct nfsrv_descript *nd, __unused int is Link Here
3076
		}
3079
		}
3077
		nfsvno_open(nd, &named, clientid, &stateid, stp,
3080
		nfsvno_open(nd, &named, clientid, &stateid, stp,
3078
		    &exclusive_flag, &nva, cverf, create, aclp, &attrbits,
3081
		    &exclusive_flag, &nva, cverf, create, aclp, &attrbits,
3079
		    nd->nd_cred, exp, &vp);
3082
		    nd->nd_cred, done_namei, exp, &vp);
3080
	} else if (claim == NFSV4OPEN_CLAIMPREVIOUS || claim ==
3083
	} else if (claim == NFSV4OPEN_CLAIMPREVIOUS || claim ==
3081
	    NFSV4OPEN_CLAIMFH || claim == NFSV4OPEN_CLAIMDELEGATECURFH ||
3084
	    NFSV4OPEN_CLAIMFH || claim == NFSV4OPEN_CLAIMDELEGATECURFH ||
3082
	    claim == NFSV4OPEN_CLAIMDELEGATEPREVFH) {
3085
	    claim == NFSV4OPEN_CLAIMDELEGATEPREVFH) {

Return to bug 268828