From: Jeffrey Altman Date: Fri, 2 Sep 2011 17:54:01 +0000 (-0400) Subject: Windows: cm_SymLink export created cm_scache_t X-Git-Tag: upstream/1.6.1.pre1^2~115 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=395a06460f962eb5efbb3f75821956180366ee57;p=packages%2Fo%2Fopenafs.git Windows: cm_SymLink export created cm_scache_t Permit the caller to request the cm_scache_t that represents the created symlink or mount point object. Reviewed-on: http://gerrit.openafs.org/5355 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman (cherry picked from commit 9b0cb614387403ff433cf39f84c13b626b1b9bdc) Change-Id: I170059255e3bbc7e3ccbd59b66d7d8b11005a94f Reviewed-on: http://gerrit.openafs.org/6031 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- diff --git a/src/WINNT/afsd/cm_ioctl.c b/src/WINNT/afsd/cm_ioctl.c index 6221557ff..62b44cfeb 100644 --- a/src/WINNT/afsd/cm_ioctl.c +++ b/src/WINNT/afsd/cm_ioctl.c @@ -2055,7 +2055,7 @@ cm_IoctlCreateMountPoint(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scac tattr.unixModeBits = 0644; tattr.clientModTime = time(NULL); - code = cm_SymLink(dscp, leaf, mpInfo, 0, &tattr, userp, reqp); + code = cm_SymLink(dscp, leaf, mpInfo, 0, &tattr, userp, reqp, NULL); } if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH)) @@ -2124,7 +2124,7 @@ cm_IoctlSymlink(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *dsc tattr.mask = CM_ATTRMASK_UNIXMODEBITS; tattr.unixModeBits = 0755; - code = cm_SymLink(dscp, leaf, cp, 0, &tattr, userp, reqp); + code = cm_SymLink(dscp, leaf, cp, 0, &tattr, userp, reqp, NULL); } if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH)) diff --git a/src/WINNT/afsd/cm_vnodeops.c b/src/WINNT/afsd/cm_vnodeops.c index 1632ea01e..904296313 100644 --- a/src/WINNT/afsd/cm_vnodeops.c +++ b/src/WINNT/afsd/cm_vnodeops.c @@ -3210,7 +3210,7 @@ long cm_Link(cm_scache_t *dscp, clientchar_t *cnamep, cm_scache_t *sscp, long fl } long cm_SymLink(cm_scache_t *dscp, clientchar_t *cnamep, fschar_t *contentsp, long flags, - cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp) + cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp, cm_scache_t **scpp) { cm_conn_t *connp; long code; @@ -3226,6 +3226,9 @@ long cm_SymLink(cm_scache_t *dscp, clientchar_t *cnamep, fschar_t *contentsp, lo cm_dirOp_t dirop; fschar_t *fnamep = NULL; + if (scpp) + *scpp = NULL; + /* Check for RO volume */ if (dscp->flags & CM_SCACHEFLAG_RO) return CM_ERROR_READONLY; @@ -3314,7 +3317,12 @@ long cm_SymLink(cm_scache_t *dscp, clientchar_t *cnamep, fschar_t *contentsp, lo userp, reqp, 0); } lock_ReleaseWrite(&scp->rw); - cm_ReleaseSCache(scp); + + if (scpp) { + *scpp = scp; + } else { + cm_ReleaseSCache(scp); + } } } diff --git a/src/WINNT/afsd/cm_vnodeops.h b/src/WINNT/afsd/cm_vnodeops.h index 70afb6ec4..fcabb7438 100644 --- a/src/WINNT/afsd/cm_vnodeops.h +++ b/src/WINNT/afsd/cm_vnodeops.h @@ -142,7 +142,8 @@ extern long cm_Link(cm_scache_t *dscp, clientchar_t *namep, cm_scache_t *sscp, long flags, cm_user_t *userp, cm_req_t *reqp); extern long cm_SymLink(cm_scache_t *dscp, clientchar_t *namep, fschar_t *contentsp, - long flags, cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp); + long flags, cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp, + cm_scache_t **scpp); extern long cm_AssembleLink(cm_scache_t *linkScp, fschar_t *pathSuffixp, cm_scache_t **newRootScpp, cm_space_t **newSpaceBufferp,