From: Chaskiel M Grundman Date: Mon, 27 Feb 2006 20:34:10 +0000 (+0000) Subject: darwin-bsd-flock-20060227 X-Git-Tag: mp-rxtcp-20060314~50 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=888b038c92c222f0ebb4b61f9f96bd56ce75dfed;p=packages%2Fo%2Fopenafs.git darwin-bsd-flock-20060227 FIXES 25544 deal with posix flag in flock request on darwin --- diff --git a/src/afs/DARWIN/osi_vnodeops.c b/src/afs/DARWIN/osi_vnodeops.c index c2dd79a36..ada87356c 100644 --- a/src/afs/DARWIN/osi_vnodeops.c +++ b/src/afs/DARWIN/osi_vnodeops.c @@ -1743,7 +1743,10 @@ afs_vop_advlock(ap) { int error; struct ucred *tcr; + int clid; + int op; #ifdef AFS_DARWIN80_ENV + proc_t p; tcr=vop_cred; #else struct proc *p = current_proc(); @@ -1753,11 +1756,26 @@ afs_vop_advlock(ap) pcred_unlock(p); tcr=&cr; #endif + if (ap->a_flags & F_POSIX) { +#ifdef AFS_DARWIN80_ENV + p = (proc_t) ap->a_id; + clid = proc_pid(p); +#else + p = (struct proc *) ap->a_id; + clid = p->p_pid; +#endif + } else { + clid = (int)ap->a_id; + } + if (ap->a_op == F_UNLCK) { + op = F_SETLK; + } else if (ap->a_op == F_SETLK && ap->a_flags & F_WAIT) { + op = F_SETLKW; + } else { + op = ap->a_op; + } AFS_GLOCK(); - error = - afs_lockctl(VTOAFS(ap->a_vp), ap->a_fl, - ap->a_op == F_UNLCK ? F_SETLK : ap->a_op, tcr, - (int)ap->a_id); + error = afs_lockctl(VTOAFS(ap->a_vp), ap->a_fl, op, tcr, clid); AFS_GUNLOCK(); return error; } diff --git a/src/afs/VNOPS/afs_vnop_flock.c b/src/afs/VNOPS/afs_vnop_flock.c index c0cb5a890..55df7cd75 100644 --- a/src/afs/VNOPS/afs_vnop_flock.c +++ b/src/afs/VNOPS/afs_vnop_flock.c @@ -569,7 +569,7 @@ int afs_lockctl(struct vcache * avc, struct AFS_FLOCK * af, int acmd, #endif ) && code != LOCK_UN) code |= LOCK_NB; /* non-blocking, s.v.p. */ -#if defined(AFS_OSF_ENV) +#if defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV) code = HandleFlock(avc, code, &treq, clid, 0 /*!onlymine */ ); #elif defined(AFS_SGI_ENV) AFS_RWLOCK((vnode_t *) avc, VRWLOCK_WRITE);