]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE14-linux-enroll-locks-20060403 openafs-stable-1_4_2-beta1
authorChaskiel M Grundman <cg2v@andrew.cmu.edu>
Tue, 13 Jun 2006 17:00:38 +0000 (17:00 +0000)
committerDerrick Brashear <shadow@dementia.org>
Tue, 13 Jun 2006 17:00:38 +0000 (17:00 +0000)
FIXES 25037

enroll our locks in the linux kernels' lock management

(cherry picked from commit 62e28d9a0a6adc6e1f3c2938bfc530b54bea4158)

src/afs/LINUX/osi_vnodeops.c

index 468a7e5e80bb73bad1a82ac72ff66741e4413d6c..8bbb81487b1491868379bd848184af50a140470c 100644 (file)
@@ -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;