aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/ceph
diff options
context:
space:
mode:
authorYan, Zheng <zheng.z.yan@intel.com>2014-03-09 11:16:40 -0400
committerSage Weil <sage@inktank.com>2014-04-05 00:07:11 -0400
commiteb13e832f823f6c110ea53e3067bafe22b87de63 (patch)
treee7e06eaf5ded86bb0d64b363b1c98c5909cf4847 /include/linux/ceph
parenteb70c0ce4e877c6854c682c0fc009d7875994942 (diff)
ceph: use fl->fl_file as owner identifier of flock and posix lock
flock and posix lock should use fl->fl_file instead of process ID as owner identifier. (posix lock uses fl->fl_owner. fl->fl_owner is usually equal to fl->fl_file, but it also can be a customized value). The process ID of who holds the lock is just for F_GETLK fcntl(2). The fix is rename the 'pid' fields of struct ceph_mds_request_args and struct ceph_filelock to 'owner', rename 'pid_namespace' fields to 'pid'. Assign fl->fl_file to the 'owner' field of lock messages. We also set the most significant bit of the 'owner' field. MDS can use that bit to distinguish between old and new clients. The MDS counterpart of this patch modifies the flock code to not take the 'pid_namespace' into consideration when checking conflict locks. Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com> Reviewed-by: Sage Weil <sage@inktank.com>
Diffstat (limited to 'include/linux/ceph')
-rw-r--r--include/linux/ceph/ceph_fs.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/include/linux/ceph/ceph_fs.h b/include/linux/ceph/ceph_fs.h
index 35f345f7b3a3..5f6db18d72e8 100644
--- a/include/linux/ceph/ceph_fs.h
+++ b/include/linux/ceph/ceph_fs.h
@@ -421,8 +421,8 @@ union ceph_mds_request_args {
421 struct { 421 struct {
422 __u8 rule; /* currently fcntl or flock */ 422 __u8 rule; /* currently fcntl or flock */
423 __u8 type; /* shared, exclusive, remove*/ 423 __u8 type; /* shared, exclusive, remove*/
424 __le64 owner; /* owner of the lock */
424 __le64 pid; /* process id requesting the lock */ 425 __le64 pid; /* process id requesting the lock */
425 __le64 pid_namespace;
426 __le64 start; /* initial location to lock */ 426 __le64 start; /* initial location to lock */
427 __le64 length; /* num bytes to lock from start */ 427 __le64 length; /* num bytes to lock from start */
428 __u8 wait; /* will caller wait for lock to become available? */ 428 __u8 wait; /* will caller wait for lock to become available? */
@@ -533,8 +533,8 @@ struct ceph_filelock {
533 __le64 start;/* file offset to start lock at */ 533 __le64 start;/* file offset to start lock at */
534 __le64 length; /* num bytes to lock; 0 for all following start */ 534 __le64 length; /* num bytes to lock; 0 for all following start */
535 __le64 client; /* which client holds the lock */ 535 __le64 client; /* which client holds the lock */
536 __le64 owner; /* owner the lock */
536 __le64 pid; /* process id holding the lock on the client */ 537 __le64 pid; /* process id holding the lock on the client */
537 __le64 pid_namespace;
538 __u8 type; /* shared lock, exclusive lock, or unlock */ 538 __u8 type; /* shared lock, exclusive lock, or unlock */
539} __attribute__ ((packed)); 539} __attribute__ ((packed));
540 540