diff options
| author | Greg Farnum <gregf@hq.newdream.net> | 2010-08-02 18:30:08 -0400 |
|---|---|---|
| committer | Sage Weil <sage@newdream.net> | 2010-08-02 18:48:54 -0400 |
| commit | fbaad9797a761c2d5ff6e755bbb4c046207a1ca2 (patch) | |
| tree | abe5e3668294922e70282dab9c36072cac1939c9 | |
| parent | c6f3fdc592d61847da0e2172e352dbcb53c83d39 (diff) | |
ceph: define on-wire types, constants for file locking support
Define the MDS operations and data types for doing file advisory locking
with the MDS.
Signed-off-by: Greg Farnum <gregf@hq.newdream.net>
Signed-off-by: Sage Weil <sage@newdream.net>
| -rw-r--r-- | fs/ceph/ceph_fs.h | 36 | ||||
| -rw-r--r-- | fs/ceph/ceph_strings.c | 2 |
2 files changed, 36 insertions, 2 deletions
diff --git a/fs/ceph/ceph_fs.h b/fs/ceph/ceph_fs.h index bb17a18cc190..d5619ac86711 100644 --- a/fs/ceph/ceph_fs.h +++ b/fs/ceph/ceph_fs.h | |||
| @@ -297,6 +297,8 @@ enum { | |||
| 297 | CEPH_MDS_OP_RMXATTR = 0x01106, | 297 | CEPH_MDS_OP_RMXATTR = 0x01106, |
| 298 | CEPH_MDS_OP_SETLAYOUT = 0x01107, | 298 | CEPH_MDS_OP_SETLAYOUT = 0x01107, |
| 299 | CEPH_MDS_OP_SETATTR = 0x01108, | 299 | CEPH_MDS_OP_SETATTR = 0x01108, |
| 300 | CEPH_MDS_OP_SETFILELOCK= 0x01109, | ||
| 301 | CEPH_MDS_OP_GETFILELOCK= 0x00110, | ||
| 300 | 302 | ||
| 301 | CEPH_MDS_OP_MKNOD = 0x01201, | 303 | CEPH_MDS_OP_MKNOD = 0x01201, |
| 302 | CEPH_MDS_OP_LINK = 0x01202, | 304 | CEPH_MDS_OP_LINK = 0x01202, |
| @@ -367,6 +369,15 @@ union ceph_mds_request_args { | |||
| 367 | struct { | 369 | struct { |
| 368 | struct ceph_file_layout layout; | 370 | struct ceph_file_layout layout; |
| 369 | } __attribute__ ((packed)) setlayout; | 371 | } __attribute__ ((packed)) setlayout; |
| 372 | struct { | ||
| 373 | __u8 rule; /* currently fcntl or flock */ | ||
| 374 | __u8 type; /* shared, exclusive, remove*/ | ||
| 375 | __le64 pid; /* process id requesting the lock */ | ||
| 376 | __le64 pid_namespace; | ||
| 377 | __le64 start; /* initial location to lock */ | ||
| 378 | __le64 length; /* num bytes to lock from start */ | ||
| 379 | __u8 wait; /* will caller wait for lock to become available? */ | ||
| 380 | } __attribute__ ((packed)) filelock_change; | ||
| 370 | } __attribute__ ((packed)); | 381 | } __attribute__ ((packed)); |
| 371 | 382 | ||
| 372 | #define CEPH_MDS_FLAG_REPLAY 1 /* this is a replayed op */ | 383 | #define CEPH_MDS_FLAG_REPLAY 1 /* this is a replayed op */ |
| @@ -461,6 +472,23 @@ struct ceph_mds_reply_dirfrag { | |||
| 461 | __le32 dist[]; | 472 | __le32 dist[]; |
| 462 | } __attribute__ ((packed)); | 473 | } __attribute__ ((packed)); |
| 463 | 474 | ||
| 475 | #define CEPH_LOCK_FCNTL 1 | ||
| 476 | #define CEPH_LOCK_FLOCK 2 | ||
| 477 | |||
| 478 | #define CEPH_LOCK_SHARED 1 | ||
| 479 | #define CEPH_LOCK_EXCL 2 | ||
| 480 | #define CEPH_LOCK_UNLOCK 4 | ||
| 481 | |||
| 482 | struct ceph_filelock { | ||
| 483 | __le64 start;/* file offset to start lock at */ | ||
| 484 | __le64 length; /* num bytes to lock; 0 for all following start */ | ||
| 485 | __le64 client; /* which client holds the lock */ | ||
| 486 | __le64 pid; /* process id holding the lock on the client */ | ||
| 487 | __le64 pid_namespace; | ||
| 488 | __u8 type; /* shared lock, exclusive lock, or unlock */ | ||
| 489 | } __attribute__ ((packed)); | ||
| 490 | |||
| 491 | |||
| 464 | /* file access modes */ | 492 | /* file access modes */ |
| 465 | #define CEPH_FILE_MODE_PIN 0 | 493 | #define CEPH_FILE_MODE_PIN 0 |
| 466 | #define CEPH_FILE_MODE_RD 1 | 494 | #define CEPH_FILE_MODE_RD 1 |
| @@ -489,9 +517,10 @@ int ceph_flags_to_mode(int flags); | |||
| 489 | #define CEPH_CAP_SAUTH 2 | 517 | #define CEPH_CAP_SAUTH 2 |
| 490 | #define CEPH_CAP_SLINK 4 | 518 | #define CEPH_CAP_SLINK 4 |
| 491 | #define CEPH_CAP_SXATTR 6 | 519 | #define CEPH_CAP_SXATTR 6 |
| 492 | #define CEPH_CAP_SFILE 8 /* goes at the end (uses >2 cap bits) */ | 520 | #define CEPH_CAP_SFILE 8 |
| 521 | #define CEPH_CAP_SFLOCK 20 | ||
| 493 | 522 | ||
| 494 | #define CEPH_CAP_BITS 16 | 523 | #define CEPH_CAP_BITS 22 |
| 495 | 524 | ||
| 496 | /* composed values */ | 525 | /* composed values */ |
| 497 | #define CEPH_CAP_AUTH_SHARED (CEPH_CAP_GSHARED << CEPH_CAP_SAUTH) | 526 | #define CEPH_CAP_AUTH_SHARED (CEPH_CAP_GSHARED << CEPH_CAP_SAUTH) |
| @@ -509,6 +538,9 @@ int ceph_flags_to_mode(int flags); | |||
| 509 | #define CEPH_CAP_FILE_BUFFER (CEPH_CAP_GBUFFER << CEPH_CAP_SFILE) | 538 | #define CEPH_CAP_FILE_BUFFER (CEPH_CAP_GBUFFER << CEPH_CAP_SFILE) |
| 510 | #define CEPH_CAP_FILE_WREXTEND (CEPH_CAP_GWREXTEND << CEPH_CAP_SFILE) | 539 | #define CEPH_CAP_FILE_WREXTEND (CEPH_CAP_GWREXTEND << CEPH_CAP_SFILE) |
| 511 | #define CEPH_CAP_FILE_LAZYIO (CEPH_CAP_GLAZYIO << CEPH_CAP_SFILE) | 540 | #define CEPH_CAP_FILE_LAZYIO (CEPH_CAP_GLAZYIO << CEPH_CAP_SFILE) |
| 541 | #define CEPH_CAP_FLOCK_SHARED (CEPH_CAP_GSHARED << CEPH_CAP_SFLOCK) | ||
| 542 | #define CEPH_CAP_FLOCK_EXCL (CEPH_CAP_GEXCL << CEPH_CAP_SFLOCK) | ||
| 543 | |||
| 512 | 544 | ||
| 513 | /* cap masks (for getattr) */ | 545 | /* cap masks (for getattr) */ |
| 514 | #define CEPH_STAT_CAP_INODE CEPH_CAP_PIN | 546 | #define CEPH_STAT_CAP_INODE CEPH_CAP_PIN |
diff --git a/fs/ceph/ceph_strings.c b/fs/ceph/ceph_strings.c index 0f943a0a3b5e..c6179d3a26a2 100644 --- a/fs/ceph/ceph_strings.c +++ b/fs/ceph/ceph_strings.c | |||
| @@ -130,6 +130,8 @@ const char *ceph_mds_op_name(int op) | |||
| 130 | case CEPH_MDS_OP_LSSNAP: return "lssnap"; | 130 | case CEPH_MDS_OP_LSSNAP: return "lssnap"; |
| 131 | case CEPH_MDS_OP_MKSNAP: return "mksnap"; | 131 | case CEPH_MDS_OP_MKSNAP: return "mksnap"; |
| 132 | case CEPH_MDS_OP_RMSNAP: return "rmsnap"; | 132 | case CEPH_MDS_OP_RMSNAP: return "rmsnap"; |
| 133 | case CEPH_MDS_OP_SETFILELOCK: return "setfilelock"; | ||
| 134 | case CEPH_MDS_OP_GETFILELOCK: return "getfilelock"; | ||
| 133 | } | 135 | } |
| 134 | return "???"; | 136 | return "???"; |
| 135 | } | 137 | } |
