From cd0b380aa3326d27ee9ed4058e6afc79b2073e01 Mon Sep 17 00:00:00 2001 From: Chaskiel M Grundman Date: Mon, 27 Feb 2006 20:35:11 +0000 Subject: [PATCH] STABLE14-darwin-bsd-flock-20060227 FIXES 25544 deal with posix flag in flock request on darwin (cherry picked from commit 888b038c92c222f0ebb4b61f9f96bd56ce75dfed) --- src/afs/DARWIN/osi_vnodeops.c | 26 ++++++++++++++++++++++---- src/afs/VNOPS/afs_vnop_flock.c | 2 +- 2 files changed, 23 insertions(+), 5 deletions(-) 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); -- 2.39.5