From: Chaskiel M Grundman Date: Tue, 13 Jun 2006 17:00:38 +0000 (+0000) Subject: STABLE14-linux-enroll-locks-20060403 X-Git-Tag: openafs-stable-1_4_2-beta1 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=e5e8d2ac72eac71ef3e34b52337910dfa39ca4c6;p=packages%2Fo%2Fopenafs.git STABLE14-linux-enroll-locks-20060403 FIXES 25037 enroll our locks in the linux kernels' lock management (cherry picked from commit 62e28d9a0a6adc6e1f3c2938bfc530b54bea4158) --- diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index 468a7e5e8..8bbb81487 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -463,6 +463,25 @@ afs_linux_lock(struct file *fp, int cmd, struct file_lock *flp) code = afs_lockctl(vcp, &flock, cmd, credp); AFS_GUNLOCK(); +#ifdef AFS_LINUX24_ENV + if (code == 0 && (cmd == F_SETLK || cmd == F_SETLKW)) { + struct file_lock flp2; + flp2 = *flp; +#ifdef AFS_LINUX26_ENV + flp2.fl_flags &=~ FL_SLEEP; +#endif + code = posix_lock_file(fp, &flp2); + osi_Assert(code != -EAGAIN); /* there should be no conflicts */ + if (code) { + struct AFS_FLOCK flock2; + flock2 = flock; + flock2.l_type = F_UNLCK; + AFS_GLOCK(); + afs_lockctl(vcp, &flock2, F_SETLK, credp); + AFS_GUNLOCK(); + } + } +#endif /* Convert flock back to Linux's file_lock */ flp->fl_type = flock.l_type; flp->fl_pid = flock.l_pid;