DEVEL15-linux-locking-pre-2618-20070208
authorChristopher Allen Wing <wingc@engin.umich.edu>
Fri, 9 Feb 2007 01:36:35 +0000 (01:36 +0000)
committerDerrick Brashear <shadow@dementia.org>
Fri, 9 Feb 2007 01:36:35 +0000 (01:36 +0000)
FIXES 53457

deal with pre 2.6.18 locking behavior

(cherry picked from commit 171676011ba72b48b6ed2d6df6cfc1f0adb52c1f)

src/afs/LINUX/osi_vnodeops.c

index a8ea11b..f08b7a6 100644 (file)
@@ -491,12 +491,12 @@ afs_linux_lock(struct file *fp, int cmd, struct file_lock *flp)
 #ifdef AFS_LINUX24_ENV
     if ((code == 0 || flp->fl_type == F_UNLCK) && 
        (cmd == F_SETLK || cmd == F_SETLKW)) {
-       struct file_lock flp2;
-       flp2 = *flp;
 #ifdef AFS_LINUX26_ENV
-       flp2.fl_flags &=~ FL_SLEEP;
+       flp->fl_flags &=~ FL_SLEEP;
+       code = posix_lock_file(fp, flp);
+#else
+       code = posix_lock_file(fp, flp, 0);
 #endif
-       code = posix_lock_file(fp, &flp2);
        if (code && flp->fl_type != F_UNLCK) {
            struct AFS_FLOCK flock2;
            flock2 = flock;
@@ -549,18 +549,16 @@ afs_linux_flock(struct file *fp, int cmd, struct file_lock *flp) {
 
     if ((code == 0 || flp->fl_type == F_UNLCK) && 
         (cmd == F_SETLK || cmd == F_SETLKW)) {
-       struct file_lock flp2;
-       flp2 = *flp;
-       flp2.fl_flags &=~ FL_SLEEP;
-       code = flock_lock_file_wait(fp, &flp2);
-       if (code && flp->fl_type != F_UNLCK) {
-           struct AFS_FLOCK flock2;
-           flock2 = flock;
-           flock2.l_type = F_UNLCK;
-           AFS_GLOCK();
-           afs_lockctl(vcp, &flock2, F_SETLK, credp);
-           AFS_GUNLOCK();
-       }
+       flp->fl_flags &=~ FL_SLEEP;
+       code = flock_lock_file_wait(fp, flp);
+       if (code && flp->fl_type != F_UNLCK) {
+           struct AFS_FLOCK flock2;
+           flock2 = flock;
+           flock2.l_type = F_UNLCK;
+           AFS_GLOCK();
+           afs_lockctl(vcp, &flock2, F_SETLK, credp);
+           AFS_GUNLOCK();
+       }
     }
     /* Convert flock back to Linux's file_lock */
     flp->fl_type = flock.l_type;