and simplify the error handling.
Signed-off-by: Pavel Shilovsky <[email protected]>
---
fs/cifs/file.c | 23 ++++++++++++++++++++---
1 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index a43856a..6bf14ed 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -920,6 +920,9 @@ cifs_posix_lock_test(struct file *file, struct file_lock
*flock)
struct cifsInodeInfo *cinode = CIFS_I(file->f_path.dentry->d_inode);
unsigned char saved_type = flock->fl_type;
+ if ((flock->fl_flags & FL_POSIX) == 0)
+ return 1;
+
mutex_lock(&cinode->lock_mutex);
posix_test_lock(file, flock);
@@ -936,12 +939,15 @@ static int
cifs_posix_lock_set(struct file *file, struct file_lock *flock)
{
struct cifsInodeInfo *cinode = CIFS_I(file->f_path.dentry->d_inode);
- int rc;
+ int rc = 1;
+
+ if ((flock->fl_flags & FL_POSIX) == 0)
+ return rc;
mutex_lock(&cinode->lock_mutex);
if (!cinode->can_cache_brlcks) {
mutex_unlock(&cinode->lock_mutex);
- return 1;
+ return rc;
}
rc = posix_lock_file_wait(file, flock);
mutex_unlock(&cinode->lock_mutex);
@@ -1371,7 +1377,18 @@ cifs_setlk(struct file *file, struct file_lock *flock,
__u8 type,
rc = CIFSSMBPosixLock(xid, tcon, netfid, current->tgid,
0 /* set */, length, flock,
posix_lock_type, wait_flag);
- goto out;
+ if (rc)
+ return rc;
+
+ if (flock->fl_flags & FL_POSIX) {
+ rc = posix_lock_file_wait(file, flock);
+ if (rc)
+ cERROR(1, "Error occurs in posix_lock_file_wait"
+ " after we send the request to the "
+ "server");
+ }
+
+ return rc;
}
if (lock) {
--
1.7.1
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html