aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/ceph/locks.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/fs/ceph/locks.c b/fs/ceph/locks.c
index ae6d14e82b0f..133e0063da64 100644
--- a/fs/ceph/locks.c
+++ b/fs/ceph/locks.c
@@ -91,10 +91,10 @@ int ceph_lock(struct file *file, int cmd, struct file_lock *fl)
91 dout("ceph_lock, fl_pid:%d", fl->fl_pid); 91 dout("ceph_lock, fl_pid:%d", fl->fl_pid);
92 92
93 /* set wait bit as appropriate, then make command as Ceph expects it*/ 93 /* set wait bit as appropriate, then make command as Ceph expects it*/
94 if (F_SETLKW == cmd) 94 if (IS_GETLK(cmd))
95 wait = 1;
96 if (F_GETLK == cmd)
97 op = CEPH_MDS_OP_GETFILELOCK; 95 op = CEPH_MDS_OP_GETFILELOCK;
96 else if (IS_SETLKW(cmd))
97 wait = 1;
98 98
99 if (F_RDLCK == fl->fl_type) 99 if (F_RDLCK == fl->fl_type)
100 lock_cmd = CEPH_LOCK_SHARED; 100 lock_cmd = CEPH_LOCK_SHARED;
@@ -131,20 +131,17 @@ int ceph_flock(struct file *file, int cmd, struct file_lock *fl)
131{ 131{
132 u8 lock_cmd; 132 u8 lock_cmd;
133 int err; 133 int err;
134 u8 wait = 1; 134 u8 wait = 0;
135 135
136 fl->fl_nspid = get_pid(task_tgid(current)); 136 fl->fl_nspid = get_pid(task_tgid(current));
137 dout("ceph_flock, fl_pid:%d", fl->fl_pid); 137 dout("ceph_flock, fl_pid:%d", fl->fl_pid);
138 138
139 /* set wait bit, then clear it out of cmd*/ 139 if (IS_SETLKW(cmd))
140 if (cmd & LOCK_NB) 140 wait = 1;
141 wait = 0; 141
142 cmd = cmd & (LOCK_SH | LOCK_EX | LOCK_UN); 142 if (F_RDLCK == fl->fl_type)
143 /* set command sequence that Ceph wants to see:
144 shared lock, exclusive lock, or unlock */
145 if (LOCK_SH == cmd)
146 lock_cmd = CEPH_LOCK_SHARED; 143 lock_cmd = CEPH_LOCK_SHARED;
147 else if (LOCK_EX == cmd) 144 else if (F_WRLCK == fl->fl_type)
148 lock_cmd = CEPH_LOCK_EXCL; 145 lock_cmd = CEPH_LOCK_EXCL;
149 else 146 else
150 lock_cmd = CEPH_LOCK_UNLOCK; 147 lock_cmd = CEPH_LOCK_UNLOCK;