Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.24.5-rc2 /fs/locks.c

Filename:/fs/locks.c
Lines Added:28
Lines Deleted:20
Also changed in: (Previous) 2.6.24.5-rc1  2.6.24-git22  2.6.24-git21  2.6.24-git20  2.6.24-git19  2.6.24-git18 
(Following) 2.6.24.5  2.6.24.6  2.6.24.7  2.6.25-git3  2.6.25-git4  2.6.25-git5 

Location
[  2.6.24.5-rc2
  [  fs
     o  locks.c

Patch

diff --git a/fs/locks.c b/fs/locks.c
index 8b8388e..2fd29d9 100644
--- a/fs/locks.c
+++ b/fs/locks.c
@@ -1805,17 +1805,21 @@ again:
    if (error)
       goto out;
 
-   for (;;) {
-      error = vfs_lock_file(filp, cmd, file_lock, NULL);
-      if (error != -EAGAIN || cmd == F_SETLK)
-         break;
-      error = wait_event_interruptible(file_lock->fl_wait,
-            !file_lock->fl_next);
-      if (!error)
-         continue;
+   if (filp->f_op && filp->f_op->lock != NULL)
+      error = filp->f_op->lock(filp, cmd, file_lock);
+   else {
+      for (;;) {
+         error = posix_lock_file(filp, file_lock, NULL);
+         if (error != -EAGAIN || cmd == F_SETLK)
+            break;
+         error = wait_event_interruptible(file_lock->fl_wait,
+               !file_lock->fl_next);
+         if (!error)
+            continue;
 
-      locks_delete_block(file_lock);
-      break;
+         locks_delete_block(file_lock);
+         break;
+      }
    }
 
    /*
@@ -1929,17 +1933,21 @@ again:
    if (error)
       goto out;
 
-   for (;;) {
-      error = vfs_lock_file(filp, cmd, file_lock, NULL);
-      if (error != -EAGAIN || cmd == F_SETLK64)
-         break;
-      error = wait_event_interruptible(file_lock->fl_wait,
-            !file_lock->fl_next);
-      if (!error)
-         continue;
+   if (filp->f_op && filp->f_op->lock != NULL)
+      error = filp->f_op->lock(filp, cmd, file_lock);
+   else {
+      for (;;) {
+         error = posix_lock_file(filp, file_lock, NULL);
+         if (error != -EAGAIN || cmd == F_SETLK64)
+            break;
+         error = wait_event_interruptible(file_lock->fl_wait,
+               !file_lock->fl_next);
+         if (!error)
+            continue;
 
-      locks_delete_block(file_lock);
-      break;
+         locks_delete_block(file_lock);
+         break;
+      }
    }
 
    /*


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.