summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve French <sfrench@us.ibm.com>2012-04-01 20:52:54 +0200
committerSteve French <sfrench@us.ibm.com>2012-04-01 20:52:54 +0200
commit9ebb389d0a03b4415fe9014f6922a2412cb1109c (patch)
tree4a411bbb4225e610656dff673028b83a3100ce3d
parentcifs: writing past end of struct in cifs_convert_address() (diff)
downloadlinux-9ebb389d0a03b4415fe9014f6922a2412cb1109c.tar.xz
linux-9ebb389d0a03b4415fe9014f6922a2412cb1109c.zip
Revert "CIFS: Fix VFS lock usage for oplocked files"
Revert previous version of patch to incorporate feedback so that we can merge version 3 of the patch instead.w This reverts commit b5efb978469d152c2c7c0a09746fb0bfc6171868.
-rw-r--r--fs/cifs/file.c56
1 files changed, 4 insertions, 52 deletions
diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index 0a11dbbbb131..460d87b7cda0 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -671,21 +671,6 @@ cifs_del_lock_waiters(struct cifsLockInfo *lock)
}
}
-/*
- * Copied from fs/locks.c with small changes.
- * Remove waiter from blocker's block list.
- * When blocker ends up pointing to itself then the list is empty.
- */
-static void
-cifs_locks_delete_block(struct file_lock *waiter)
-{
- lock_flocks();
- list_del_init(&waiter->fl_block);
- list_del_init(&waiter->fl_link);
- waiter->fl_next = NULL;
- unlock_flocks();
-}
-
static bool
__cifs_find_lock_conflict(struct cifsInodeInfo *cinode, __u64 offset,
__u64 length, __u8 type, __u16 netfid,
@@ -835,39 +820,6 @@ cifs_posix_lock_test(struct file *file, struct file_lock *flock)
return rc;
}
-/* Called with locked lock_mutex, return with unlocked. */
-static int
-cifs_posix_lock_file_wait_locked(struct file *file, struct file_lock *flock)
-{
- struct cifsInodeInfo *cinode = CIFS_I(file->f_path.dentry->d_inode);
- int rc;
-
- while (true) {
- rc = posix_lock_file(file, flock, NULL);
- mutex_unlock(&cinode->lock_mutex);
- if (rc != FILE_LOCK_DEFERRED)
- break;
- rc = wait_event_interruptible(flock->fl_wait, !flock->fl_next);
- if (!rc) {
- mutex_lock(&cinode->lock_mutex);
- continue;
- }
- cifs_locks_delete_block(flock);
- break;
- }
- return rc;
-}
-
-static int
-cifs_posix_lock_file_wait(struct file *file, struct file_lock *flock)
-{
- struct cifsInodeInfo *cinode = CIFS_I(file->f_path.dentry->d_inode);
-
- mutex_lock(&cinode->lock_mutex);
- /* lock_mutex will be released by the function below */
- return cifs_posix_lock_file_wait_locked(file, flock);
-}
-
/*
* Set the byte-range lock (posix style). Returns:
* 1) 0, if we set the lock and don't need to request to the server;
@@ -888,9 +840,9 @@ cifs_posix_lock_set(struct file *file, struct file_lock *flock)
mutex_unlock(&cinode->lock_mutex);
return rc;
}
-
- /* lock_mutex will be released by the function below */
- return cifs_posix_lock_file_wait_locked(file, flock);
+ rc = posix_lock_file_wait(file, flock);
+ mutex_unlock(&cinode->lock_mutex);
+ return rc;
}
static int
@@ -1386,7 +1338,7 @@ cifs_setlk(struct file *file, struct file_lock *flock, __u8 type,
out:
if (flock->fl_flags & FL_POSIX)
- cifs_posix_lock_file_wait(file, flock);
+ posix_lock_file_wait(file, flock);
return rc;
}