aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ceph/locks.c
diff options
context:
space:
mode:
authorYan, Zheng <zheng.z.yan@intel.com>2014-03-04 02:42:24 -0500
committerSage Weil <sage@inktank.com>2014-04-05 00:07:08 -0400
commit0e8e95d6d74b2326e32274bb0401404cf3486038 (patch)
tree84a3e03837ae18b98c38cb98b364dc22b10617a9 /fs/ceph/locks.c
parent8c93cd610c6c5a4c0dddfc6fe906814331b3af87 (diff)
ceph: use fl->fl_type to decide flock operation
VFS does not directly pass flock's operation code to filesystem's flock callback. It translates the operation code to the form how posix lock's parameters are presented. Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
Diffstat (limited to 'fs/ceph/locks.c')
-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;