0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #ifndef CEPH_FS_H
0014 #define CEPH_FS_H
0015
0016 #include <linux/ceph/msgr.h>
0017 #include <linux/ceph/rados.h>
0018
0019
0020
0021
0022
0023
0024
0025 #define CEPH_OSDC_PROTOCOL 24
0026 #define CEPH_MDSC_PROTOCOL 32
0027 #define CEPH_MONC_PROTOCOL 15
0028
0029
0030 #define CEPH_INO_ROOT 1
0031 #define CEPH_INO_CEPH 2
0032 #define CEPH_INO_GLOBAL_SNAPREALM 3
0033
0034
0035 #define CEPH_MAX_MON 31
0036
0037
0038
0039
0040 struct ceph_file_layout_legacy {
0041
0042 __le32 fl_stripe_unit;
0043
0044 __le32 fl_stripe_count;
0045 __le32 fl_object_size;
0046
0047 __le32 fl_cas_hash;
0048
0049
0050 __le32 fl_object_stripe_unit;
0051
0052
0053 __le32 fl_unused;
0054 __le32 fl_pg_pool;
0055 } __attribute__ ((packed));
0056
0057 struct ceph_string;
0058
0059
0060
0061 struct ceph_file_layout {
0062
0063 u32 stripe_unit;
0064 u32 stripe_count;
0065 u32 object_size;
0066 s64 pool_id;
0067 struct ceph_string __rcu *pool_ns;
0068 };
0069
0070 extern int ceph_file_layout_is_valid(const struct ceph_file_layout *layout);
0071 extern void ceph_file_layout_from_legacy(struct ceph_file_layout *fl,
0072 struct ceph_file_layout_legacy *legacy);
0073 extern void ceph_file_layout_to_legacy(struct ceph_file_layout *fl,
0074 struct ceph_file_layout_legacy *legacy);
0075
0076 #define CEPH_MIN_STRIPE_UNIT 65536
0077
0078 struct ceph_dir_layout {
0079 __u8 dl_dir_hash;
0080 __u8 dl_unused1;
0081 __u16 dl_unused2;
0082 __u32 dl_unused3;
0083 } __attribute__ ((packed));
0084
0085
0086 #define CEPH_CRYPTO_NONE 0x0
0087 #define CEPH_CRYPTO_AES 0x1
0088
0089 #define CEPH_AES_IV "cephsageyudagreg"
0090
0091
0092 #define CEPH_AUTH_UNKNOWN 0x0
0093 #define CEPH_AUTH_NONE 0x1
0094 #define CEPH_AUTH_CEPHX 0x2
0095
0096 #define CEPH_AUTH_MODE_NONE 0
0097 #define CEPH_AUTH_MODE_AUTHORIZER 1
0098 #define CEPH_AUTH_MODE_MON 10
0099
0100
0101 #define CEPH_CON_MODE_UNKNOWN 0x0
0102 #define CEPH_CON_MODE_CRC 0x1
0103 #define CEPH_CON_MODE_SECURE 0x2
0104
0105 #define CEPH_AUTH_UID_DEFAULT ((__u64) -1)
0106
0107 const char *ceph_auth_proto_name(int proto);
0108 const char *ceph_con_mode_name(int mode);
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119 #define CEPH_MSG_SHUTDOWN 1
0120 #define CEPH_MSG_PING 2
0121
0122
0123 #define CEPH_MSG_MON_MAP 4
0124 #define CEPH_MSG_MON_GET_MAP 5
0125 #define CEPH_MSG_STATFS 13
0126 #define CEPH_MSG_STATFS_REPLY 14
0127 #define CEPH_MSG_MON_SUBSCRIBE 15
0128 #define CEPH_MSG_MON_SUBSCRIBE_ACK 16
0129 #define CEPH_MSG_AUTH 17
0130 #define CEPH_MSG_AUTH_REPLY 18
0131 #define CEPH_MSG_MON_GET_VERSION 19
0132 #define CEPH_MSG_MON_GET_VERSION_REPLY 20
0133
0134
0135 #define CEPH_MSG_MDS_MAP 21
0136 #define CEPH_MSG_FS_MAP_USER 103
0137
0138 #define CEPH_MSG_CLIENT_SESSION 22
0139 #define CEPH_MSG_CLIENT_RECONNECT 23
0140
0141 #define CEPH_MSG_CLIENT_REQUEST 24
0142 #define CEPH_MSG_CLIENT_REQUEST_FORWARD 25
0143 #define CEPH_MSG_CLIENT_REPLY 26
0144 #define CEPH_MSG_CLIENT_METRICS 29
0145 #define CEPH_MSG_CLIENT_CAPS 0x310
0146 #define CEPH_MSG_CLIENT_LEASE 0x311
0147 #define CEPH_MSG_CLIENT_SNAP 0x312
0148 #define CEPH_MSG_CLIENT_CAPRELEASE 0x313
0149 #define CEPH_MSG_CLIENT_QUOTA 0x314
0150
0151
0152 #define CEPH_MSG_POOLOP_REPLY 48
0153 #define CEPH_MSG_POOLOP 49
0154
0155
0156 #define CEPH_MSG_MON_COMMAND 50
0157 #define CEPH_MSG_MON_COMMAND_ACK 51
0158
0159
0160 #define CEPH_MSG_OSD_MAP 41
0161 #define CEPH_MSG_OSD_OP 42
0162 #define CEPH_MSG_OSD_OPREPLY 43
0163 #define CEPH_MSG_WATCH_NOTIFY 44
0164 #define CEPH_MSG_OSD_BACKOFF 61
0165
0166
0167
0168 enum {
0169 CEPH_WATCH_EVENT_NOTIFY = 1,
0170 CEPH_WATCH_EVENT_NOTIFY_COMPLETE = 2,
0171 CEPH_WATCH_EVENT_DISCONNECT = 3,
0172 };
0173
0174
0175 struct ceph_mon_request_header {
0176 __le64 have_version;
0177 __le16 session_mon;
0178 __le64 session_mon_tid;
0179 } __attribute__ ((packed));
0180
0181 struct ceph_mon_statfs {
0182 struct ceph_mon_request_header monhdr;
0183 struct ceph_fsid fsid;
0184 __u8 contains_data_pool;
0185 __le64 data_pool;
0186 } __attribute__ ((packed));
0187
0188 struct ceph_statfs {
0189 __le64 kb, kb_used, kb_avail;
0190 __le64 num_objects;
0191 } __attribute__ ((packed));
0192
0193 struct ceph_mon_statfs_reply {
0194 struct ceph_fsid fsid;
0195 __le64 version;
0196 struct ceph_statfs st;
0197 } __attribute__ ((packed));
0198
0199 struct ceph_mon_command {
0200 struct ceph_mon_request_header monhdr;
0201 struct ceph_fsid fsid;
0202 __le32 num_strs;
0203 __le32 str_len;
0204 char str[];
0205 } __attribute__ ((packed));
0206
0207 struct ceph_osd_getmap {
0208 struct ceph_mon_request_header monhdr;
0209 struct ceph_fsid fsid;
0210 __le32 start;
0211 } __attribute__ ((packed));
0212
0213 struct ceph_mds_getmap {
0214 struct ceph_mon_request_header monhdr;
0215 struct ceph_fsid fsid;
0216 } __attribute__ ((packed));
0217
0218 struct ceph_client_mount {
0219 struct ceph_mon_request_header monhdr;
0220 } __attribute__ ((packed));
0221
0222 #define CEPH_SUBSCRIBE_ONETIME 1
0223
0224 struct ceph_mon_subscribe_item {
0225 __le64 start;
0226 __u8 flags;
0227 } __attribute__ ((packed));
0228
0229 struct ceph_mon_subscribe_ack {
0230 __le32 duration;
0231 struct ceph_fsid fsid;
0232 } __attribute__ ((packed));
0233
0234 #define CEPH_FS_CLUSTER_ID_NONE -1
0235
0236
0237
0238
0239 #define CEPH_MDSMAP_DOWN (1<<0)
0240
0241
0242
0243
0244
0245
0246 #define CEPH_MDS_STATE_DNE 0
0247 #define CEPH_MDS_STATE_STOPPED -1
0248
0249 #define CEPH_MDS_STATE_BOOT -4
0250 #define CEPH_MDS_STATE_STANDBY -5
0251 #define CEPH_MDS_STATE_CREATING -6
0252 #define CEPH_MDS_STATE_STARTING -7
0253 #define CEPH_MDS_STATE_STANDBY_REPLAY -8
0254 #define CEPH_MDS_STATE_REPLAYONCE -9
0255
0256 #define CEPH_MDS_STATE_REPLAY 8
0257 #define CEPH_MDS_STATE_RESOLVE 9
0258
0259 #define CEPH_MDS_STATE_RECONNECT 10
0260 #define CEPH_MDS_STATE_REJOIN 11
0261 #define CEPH_MDS_STATE_CLIENTREPLAY 12
0262 #define CEPH_MDS_STATE_ACTIVE 13
0263 #define CEPH_MDS_STATE_STOPPING 14
0264
0265 extern const char *ceph_mds_state_name(int s);
0266
0267
0268
0269
0270
0271
0272
0273
0274 #define CEPH_LOCK_DVERSION 1
0275 #define CEPH_LOCK_DN 2
0276 #define CEPH_LOCK_ISNAP 16
0277 #define CEPH_LOCK_IVERSION 32
0278 #define CEPH_LOCK_IFILE 64
0279 #define CEPH_LOCK_IAUTH 128
0280 #define CEPH_LOCK_ILINK 256
0281 #define CEPH_LOCK_IDFT 512
0282 #define CEPH_LOCK_INEST 1024
0283 #define CEPH_LOCK_IXATTR 2048
0284 #define CEPH_LOCK_IFLOCK 4096
0285 #define CEPH_LOCK_INO 8192
0286 #define CEPH_LOCK_IPOLICY 16384
0287
0288
0289 enum {
0290 CEPH_SESSION_REQUEST_OPEN,
0291 CEPH_SESSION_OPEN,
0292 CEPH_SESSION_REQUEST_CLOSE,
0293 CEPH_SESSION_CLOSE,
0294 CEPH_SESSION_REQUEST_RENEWCAPS,
0295 CEPH_SESSION_RENEWCAPS,
0296 CEPH_SESSION_STALE,
0297 CEPH_SESSION_RECALL_STATE,
0298 CEPH_SESSION_FLUSHMSG,
0299 CEPH_SESSION_FLUSHMSG_ACK,
0300 CEPH_SESSION_FORCE_RO,
0301 CEPH_SESSION_REJECT,
0302 CEPH_SESSION_REQUEST_FLUSH_MDLOG,
0303 };
0304
0305 #define CEPH_SESSION_BLOCKLISTED (1 << 0)
0306
0307 extern const char *ceph_session_op_name(int op);
0308
0309 struct ceph_mds_session_head {
0310 __le32 op;
0311 __le64 seq;
0312 struct ceph_timespec stamp;
0313 __le32 max_caps, max_leases;
0314 } __attribute__ ((packed));
0315
0316
0317
0318
0319
0320
0321
0322
0323 #define CEPH_MDS_OP_WRITE 0x001000
0324 enum {
0325 CEPH_MDS_OP_LOOKUP = 0x00100,
0326 CEPH_MDS_OP_GETATTR = 0x00101,
0327 CEPH_MDS_OP_LOOKUPHASH = 0x00102,
0328 CEPH_MDS_OP_LOOKUPPARENT = 0x00103,
0329 CEPH_MDS_OP_LOOKUPINO = 0x00104,
0330 CEPH_MDS_OP_LOOKUPNAME = 0x00105,
0331 CEPH_MDS_OP_GETVXATTR = 0x00106,
0332
0333 CEPH_MDS_OP_SETXATTR = 0x01105,
0334 CEPH_MDS_OP_RMXATTR = 0x01106,
0335 CEPH_MDS_OP_SETLAYOUT = 0x01107,
0336 CEPH_MDS_OP_SETATTR = 0x01108,
0337 CEPH_MDS_OP_SETFILELOCK= 0x01109,
0338 CEPH_MDS_OP_GETFILELOCK= 0x00110,
0339 CEPH_MDS_OP_SETDIRLAYOUT=0x0110a,
0340
0341 CEPH_MDS_OP_MKNOD = 0x01201,
0342 CEPH_MDS_OP_LINK = 0x01202,
0343 CEPH_MDS_OP_UNLINK = 0x01203,
0344 CEPH_MDS_OP_RENAME = 0x01204,
0345 CEPH_MDS_OP_MKDIR = 0x01220,
0346 CEPH_MDS_OP_RMDIR = 0x01221,
0347 CEPH_MDS_OP_SYMLINK = 0x01222,
0348
0349 CEPH_MDS_OP_CREATE = 0x01301,
0350 CEPH_MDS_OP_OPEN = 0x00302,
0351 CEPH_MDS_OP_READDIR = 0x00305,
0352
0353 CEPH_MDS_OP_LOOKUPSNAP = 0x00400,
0354 CEPH_MDS_OP_MKSNAP = 0x01400,
0355 CEPH_MDS_OP_RMSNAP = 0x01401,
0356 CEPH_MDS_OP_LSSNAP = 0x00402,
0357 CEPH_MDS_OP_RENAMESNAP = 0x01403,
0358 };
0359
0360 extern const char *ceph_mds_op_name(int op);
0361
0362
0363 #define CEPH_SETATTR_MODE 1
0364 #define CEPH_SETATTR_UID 2
0365 #define CEPH_SETATTR_GID 4
0366 #define CEPH_SETATTR_MTIME 8
0367 #define CEPH_SETATTR_ATIME 16
0368 #define CEPH_SETATTR_SIZE 32
0369 #define CEPH_SETATTR_CTIME 64
0370
0371
0372
0373
0374 #define CEPH_XATTR_CREATE (1 << 0)
0375 #define CEPH_XATTR_REPLACE (1 << 1)
0376 #define CEPH_XATTR_REMOVE (1 << 31)
0377
0378
0379
0380
0381 #define CEPH_READDIR_REPLY_BITFLAGS (1<<0)
0382
0383
0384
0385
0386 #define CEPH_READDIR_FRAG_END (1<<0)
0387 #define CEPH_READDIR_FRAG_COMPLETE (1<<8)
0388 #define CEPH_READDIR_HASH_ORDER (1<<9)
0389 #define CEPH_READDIR_OFFSET_HASH (1<<10)
0390
0391
0392
0393
0394 #define CEPH_O_RDONLY 00000000
0395 #define CEPH_O_WRONLY 00000001
0396 #define CEPH_O_RDWR 00000002
0397 #define CEPH_O_CREAT 00000100
0398 #define CEPH_O_EXCL 00000200
0399 #define CEPH_O_TRUNC 00001000
0400 #define CEPH_O_DIRECTORY 00200000
0401 #define CEPH_O_NOFOLLOW 00400000
0402
0403 union ceph_mds_request_args {
0404 struct {
0405 __le32 mask;
0406 } __attribute__ ((packed)) getattr;
0407 struct {
0408 __le32 mode;
0409 __le32 uid;
0410 __le32 gid;
0411 struct ceph_timespec mtime;
0412 struct ceph_timespec atime;
0413 __le64 size, old_size;
0414 __le32 mask;
0415 } __attribute__ ((packed)) setattr;
0416 struct {
0417 __le32 frag;
0418 __le32 max_entries;
0419 __le32 max_bytes;
0420 __le16 flags;
0421 __le32 offset_hash;
0422 } __attribute__ ((packed)) readdir;
0423 struct {
0424 __le32 mode;
0425 __le32 rdev;
0426 } __attribute__ ((packed)) mknod;
0427 struct {
0428 __le32 mode;
0429 } __attribute__ ((packed)) mkdir;
0430 struct {
0431 __le32 flags;
0432 __le32 mode;
0433 __le32 stripe_unit;
0434 __le32 stripe_count;
0435 __le32 object_size;
0436 __le32 pool;
0437 __le32 mask;
0438 __le64 old_size;
0439 } __attribute__ ((packed)) open;
0440 struct {
0441 __le32 flags;
0442 __le32 osdmap_epoch;
0443 } __attribute__ ((packed)) setxattr;
0444 struct {
0445 struct ceph_file_layout_legacy layout;
0446 } __attribute__ ((packed)) setlayout;
0447 struct {
0448 __u8 rule;
0449 __u8 type;
0450 __le64 owner;
0451 __le64 pid;
0452 __le64 start;
0453 __le64 length;
0454 __u8 wait;
0455 } __attribute__ ((packed)) filelock_change;
0456 struct {
0457 __le32 mask;
0458 __le64 snapid;
0459 __le64 parent;
0460 __le32 hash;
0461 } __attribute__ ((packed)) lookupino;
0462 } __attribute__ ((packed));
0463
0464 union ceph_mds_request_args_ext {
0465 union ceph_mds_request_args old;
0466 struct {
0467 __le32 mode;
0468 __le32 uid;
0469 __le32 gid;
0470 struct ceph_timespec mtime;
0471 struct ceph_timespec atime;
0472 __le64 size, old_size;
0473 __le32 mask;
0474 struct ceph_timespec btime;
0475 } __attribute__ ((packed)) setattr_ext;
0476 };
0477
0478 #define CEPH_MDS_FLAG_REPLAY 1
0479 #define CEPH_MDS_FLAG_WANT_DENTRY 2
0480 #define CEPH_MDS_FLAG_ASYNC 4
0481
0482 struct ceph_mds_request_head_old {
0483 __le64 oldest_client_tid;
0484 __le32 mdsmap_epoch;
0485 __le32 flags;
0486 __u8 num_retry, num_fwd;
0487 __le16 num_releases;
0488 __le32 op;
0489 __le32 caller_uid, caller_gid;
0490 __le64 ino;
0491
0492 union ceph_mds_request_args args;
0493 } __attribute__ ((packed));
0494
0495 #define CEPH_MDS_REQUEST_HEAD_VERSION 1
0496
0497 struct ceph_mds_request_head {
0498 __le16 version;
0499 __le64 oldest_client_tid;
0500 __le32 mdsmap_epoch;
0501 __le32 flags;
0502 __u8 num_retry, num_fwd;
0503 __le16 num_releases;
0504 __le32 op;
0505 __le32 caller_uid, caller_gid;
0506 __le64 ino;
0507
0508 union ceph_mds_request_args_ext args;
0509 } __attribute__ ((packed));
0510
0511
0512 struct ceph_mds_request_release {
0513 __le64 ino, cap_id;
0514 __le32 caps, wanted;
0515 __le32 seq, issue_seq, mseq;
0516 __le32 dname_seq;
0517 __le32 dname_len;
0518 } __attribute__ ((packed));
0519
0520
0521 struct ceph_mds_reply_head {
0522 __le32 op;
0523 __le32 result;
0524 __le32 mdsmap_epoch;
0525 __u8 safe;
0526 __u8 is_dentry, is_target;
0527
0528 } __attribute__ ((packed));
0529
0530
0531 struct ceph_frag_tree_split {
0532 __le32 frag;
0533 __le32 by;
0534 } __attribute__ ((packed));
0535
0536 struct ceph_frag_tree_head {
0537 __le32 nsplits;
0538 struct ceph_frag_tree_split splits[];
0539 } __attribute__ ((packed));
0540
0541
0542 struct ceph_mds_reply_cap {
0543 __le32 caps, wanted;
0544 __le64 cap_id;
0545 __le32 seq, mseq;
0546 __le64 realm;
0547 __u8 flags;
0548 } __attribute__ ((packed));
0549
0550 #define CEPH_CAP_FLAG_AUTH (1 << 0)
0551 #define CEPH_CAP_FLAG_RELEASE (1 << 1)
0552
0553
0554 struct ceph_mds_reply_inode {
0555 __le64 ino;
0556 __le64 snapid;
0557 __le32 rdev;
0558 __le64 version;
0559 __le64 xattr_version;
0560 struct ceph_mds_reply_cap cap;
0561 struct ceph_file_layout_legacy layout;
0562 struct ceph_timespec ctime, mtime, atime;
0563 __le32 time_warp_seq;
0564 __le64 size, max_size, truncate_size;
0565 __le32 truncate_seq;
0566 __le32 mode, uid, gid;
0567 __le32 nlink;
0568 __le64 files, subdirs, rbytes, rfiles, rsubdirs;
0569 struct ceph_timespec rctime;
0570 struct ceph_frag_tree_head fragtree;
0571 } __attribute__ ((packed));
0572
0573
0574
0575 struct ceph_mds_reply_lease {
0576 __le16 mask;
0577 __le32 duration_ms;
0578 __le32 seq;
0579 } __attribute__ ((packed));
0580
0581 #define CEPH_LEASE_VALID (1 | 2)
0582 #define CEPH_LEASE_PRIMARY_LINK 4
0583
0584 struct ceph_mds_reply_dirfrag {
0585 __le32 frag;
0586 __le32 auth;
0587 __le32 ndist;
0588 __le32 dist[];
0589 } __attribute__ ((packed));
0590
0591 #define CEPH_LOCK_FCNTL 1
0592 #define CEPH_LOCK_FLOCK 2
0593 #define CEPH_LOCK_FCNTL_INTR 3
0594 #define CEPH_LOCK_FLOCK_INTR 4
0595
0596
0597 #define CEPH_LOCK_SHARED 1
0598 #define CEPH_LOCK_EXCL 2
0599 #define CEPH_LOCK_UNLOCK 4
0600
0601 struct ceph_filelock {
0602 __le64 start;
0603 __le64 length;
0604 __le64 client;
0605 __le64 owner;
0606 __le64 pid;
0607 __u8 type;
0608 } __attribute__ ((packed));
0609
0610
0611
0612 #define CEPH_FILE_MODE_PIN 0
0613 #define CEPH_FILE_MODE_RD 1
0614 #define CEPH_FILE_MODE_WR 2
0615 #define CEPH_FILE_MODE_RDWR 3
0616 #define CEPH_FILE_MODE_LAZY 4
0617 #define CEPH_FILE_MODE_BITS 4
0618 #define CEPH_FILE_MODE_MASK ((1 << CEPH_FILE_MODE_BITS) - 1)
0619
0620 int ceph_flags_to_mode(int flags);
0621
0622 #define CEPH_INLINE_NONE ((__u64)-1)
0623
0624
0625 #define CEPH_CAP_PIN 1
0626
0627
0628 #define CEPH_CAP_GSHARED 1
0629 #define CEPH_CAP_GEXCL 2
0630 #define CEPH_CAP_GCACHE 4
0631 #define CEPH_CAP_GRD 8
0632 #define CEPH_CAP_GWR 16
0633 #define CEPH_CAP_GBUFFER 32
0634 #define CEPH_CAP_GWREXTEND 64
0635 #define CEPH_CAP_GLAZYIO 128
0636
0637 #define CEPH_CAP_SIMPLE_BITS 2
0638 #define CEPH_CAP_FILE_BITS 8
0639
0640
0641 #define CEPH_CAP_SAUTH 2
0642 #define CEPH_CAP_SLINK 4
0643 #define CEPH_CAP_SXATTR 6
0644 #define CEPH_CAP_SFILE 8
0645 #define CEPH_CAP_SFLOCK 20
0646
0647 #define CEPH_CAP_BITS 22
0648
0649
0650 #define CEPH_CAP_AUTH_SHARED (CEPH_CAP_GSHARED << CEPH_CAP_SAUTH)
0651 #define CEPH_CAP_AUTH_EXCL (CEPH_CAP_GEXCL << CEPH_CAP_SAUTH)
0652 #define CEPH_CAP_LINK_SHARED (CEPH_CAP_GSHARED << CEPH_CAP_SLINK)
0653 #define CEPH_CAP_LINK_EXCL (CEPH_CAP_GEXCL << CEPH_CAP_SLINK)
0654 #define CEPH_CAP_XATTR_SHARED (CEPH_CAP_GSHARED << CEPH_CAP_SXATTR)
0655 #define CEPH_CAP_XATTR_EXCL (CEPH_CAP_GEXCL << CEPH_CAP_SXATTR)
0656 #define CEPH_CAP_FILE(x) (x << CEPH_CAP_SFILE)
0657 #define CEPH_CAP_FILE_SHARED (CEPH_CAP_GSHARED << CEPH_CAP_SFILE)
0658 #define CEPH_CAP_FILE_EXCL (CEPH_CAP_GEXCL << CEPH_CAP_SFILE)
0659 #define CEPH_CAP_FILE_CACHE (CEPH_CAP_GCACHE << CEPH_CAP_SFILE)
0660 #define CEPH_CAP_FILE_RD (CEPH_CAP_GRD << CEPH_CAP_SFILE)
0661 #define CEPH_CAP_FILE_WR (CEPH_CAP_GWR << CEPH_CAP_SFILE)
0662 #define CEPH_CAP_FILE_BUFFER (CEPH_CAP_GBUFFER << CEPH_CAP_SFILE)
0663 #define CEPH_CAP_FILE_WREXTEND (CEPH_CAP_GWREXTEND << CEPH_CAP_SFILE)
0664 #define CEPH_CAP_FILE_LAZYIO (CEPH_CAP_GLAZYIO << CEPH_CAP_SFILE)
0665 #define CEPH_CAP_FLOCK_SHARED (CEPH_CAP_GSHARED << CEPH_CAP_SFLOCK)
0666 #define CEPH_CAP_FLOCK_EXCL (CEPH_CAP_GEXCL << CEPH_CAP_SFLOCK)
0667
0668
0669
0670 #define CEPH_STAT_CAP_INODE CEPH_CAP_PIN
0671 #define CEPH_STAT_CAP_TYPE CEPH_CAP_PIN
0672 #define CEPH_STAT_CAP_SYMLINK CEPH_CAP_PIN
0673 #define CEPH_STAT_CAP_UID CEPH_CAP_AUTH_SHARED
0674 #define CEPH_STAT_CAP_GID CEPH_CAP_AUTH_SHARED
0675 #define CEPH_STAT_CAP_MODE CEPH_CAP_AUTH_SHARED
0676 #define CEPH_STAT_CAP_NLINK CEPH_CAP_LINK_SHARED
0677 #define CEPH_STAT_CAP_LAYOUT CEPH_CAP_FILE_SHARED
0678 #define CEPH_STAT_CAP_MTIME CEPH_CAP_FILE_SHARED
0679 #define CEPH_STAT_CAP_SIZE CEPH_CAP_FILE_SHARED
0680 #define CEPH_STAT_CAP_ATIME CEPH_CAP_FILE_SHARED
0681 #define CEPH_STAT_CAP_XATTR CEPH_CAP_XATTR_SHARED
0682 #define CEPH_STAT_CAP_INODE_ALL (CEPH_CAP_PIN | \
0683 CEPH_CAP_AUTH_SHARED | \
0684 CEPH_CAP_LINK_SHARED | \
0685 CEPH_CAP_FILE_SHARED | \
0686 CEPH_CAP_XATTR_SHARED)
0687 #define CEPH_STAT_CAP_INLINE_DATA (CEPH_CAP_FILE_SHARED | \
0688 CEPH_CAP_FILE_RD)
0689 #define CEPH_STAT_RSTAT CEPH_CAP_FILE_WREXTEND
0690
0691 #define CEPH_CAP_ANY_SHARED (CEPH_CAP_AUTH_SHARED | \
0692 CEPH_CAP_LINK_SHARED | \
0693 CEPH_CAP_XATTR_SHARED | \
0694 CEPH_CAP_FILE_SHARED)
0695 #define CEPH_CAP_ANY_RD (CEPH_CAP_ANY_SHARED | CEPH_CAP_FILE_RD | \
0696 CEPH_CAP_FILE_CACHE)
0697
0698 #define CEPH_CAP_ANY_EXCL (CEPH_CAP_AUTH_EXCL | \
0699 CEPH_CAP_LINK_EXCL | \
0700 CEPH_CAP_XATTR_EXCL | \
0701 CEPH_CAP_FILE_EXCL)
0702 #define CEPH_CAP_ANY_FILE_RD (CEPH_CAP_FILE_RD | CEPH_CAP_FILE_CACHE | \
0703 CEPH_CAP_FILE_SHARED)
0704 #define CEPH_CAP_ANY_FILE_WR (CEPH_CAP_FILE_WR | CEPH_CAP_FILE_BUFFER | \
0705 CEPH_CAP_FILE_EXCL)
0706 #define CEPH_CAP_ANY_WR (CEPH_CAP_ANY_EXCL | CEPH_CAP_ANY_FILE_WR)
0707 #define CEPH_CAP_ANY (CEPH_CAP_ANY_RD | CEPH_CAP_ANY_EXCL | \
0708 CEPH_CAP_ANY_FILE_WR | CEPH_CAP_FILE_LAZYIO | \
0709 CEPH_CAP_PIN)
0710 #define CEPH_CAP_ALL_FILE (CEPH_CAP_PIN | CEPH_CAP_ANY_SHARED | \
0711 CEPH_CAP_AUTH_EXCL | CEPH_CAP_XATTR_EXCL | \
0712 CEPH_CAP_ANY_FILE_RD | CEPH_CAP_ANY_FILE_WR)
0713
0714 #define CEPH_CAP_LOCKS (CEPH_LOCK_IFILE | CEPH_LOCK_IAUTH | CEPH_LOCK_ILINK | \
0715 CEPH_LOCK_IXATTR)
0716
0717
0718 #define CEPH_CAP_DIR_CREATE CEPH_CAP_FILE_CACHE
0719 #define CEPH_CAP_DIR_UNLINK CEPH_CAP_FILE_RD
0720 #define CEPH_CAP_ANY_DIR_OPS (CEPH_CAP_FILE_CACHE | CEPH_CAP_FILE_RD | \
0721 CEPH_CAP_FILE_WREXTEND | CEPH_CAP_FILE_LAZYIO)
0722
0723 int ceph_caps_for_mode(int mode);
0724
0725 enum {
0726 CEPH_CAP_OP_GRANT,
0727 CEPH_CAP_OP_REVOKE,
0728 CEPH_CAP_OP_TRUNC,
0729 CEPH_CAP_OP_EXPORT,
0730 CEPH_CAP_OP_IMPORT,
0731 CEPH_CAP_OP_UPDATE,
0732 CEPH_CAP_OP_DROP,
0733 CEPH_CAP_OP_FLUSH,
0734 CEPH_CAP_OP_FLUSH_ACK,
0735 CEPH_CAP_OP_FLUSHSNAP,
0736 CEPH_CAP_OP_FLUSHSNAP_ACK,
0737 CEPH_CAP_OP_RELEASE,
0738 CEPH_CAP_OP_RENEW,
0739 };
0740
0741 extern const char *ceph_cap_op_name(int op);
0742
0743
0744 #define CEPH_CLIENT_CAPS_SYNC (1<<0)
0745 #define CEPH_CLIENT_CAPS_NO_CAPSNAP (1<<1)
0746 #define CEPH_CLIENT_CAPS_PENDING_CAPSNAP (1<<2)
0747
0748
0749
0750
0751 struct ceph_mds_caps {
0752 __le32 op;
0753 __le64 ino, realm;
0754 __le64 cap_id;
0755 __le32 seq, issue_seq;
0756 __le32 caps, wanted, dirty;
0757 __le32 migrate_seq;
0758 __le64 snap_follows;
0759 __le32 snap_trace_len;
0760
0761
0762 __le32 uid, gid, mode;
0763
0764
0765 __le32 nlink;
0766
0767
0768 __le32 xattr_len;
0769 __le64 xattr_version;
0770
0771
0772 __le64 size, max_size, truncate_size;
0773 __le32 truncate_seq;
0774 struct ceph_timespec mtime, atime, ctime;
0775 struct ceph_file_layout_legacy layout;
0776 __le32 time_warp_seq;
0777 } __attribute__ ((packed));
0778
0779 struct ceph_mds_cap_peer {
0780 __le64 cap_id;
0781 __le32 seq;
0782 __le32 mseq;
0783 __le32 mds;
0784 __u8 flags;
0785 } __attribute__ ((packed));
0786
0787
0788 struct ceph_mds_cap_release {
0789 __le32 num;
0790 } __attribute__ ((packed));
0791
0792 struct ceph_mds_cap_item {
0793 __le64 ino;
0794 __le64 cap_id;
0795 __le32 migrate_seq, seq;
0796 } __attribute__ ((packed));
0797
0798 #define CEPH_MDS_LEASE_REVOKE 1
0799 #define CEPH_MDS_LEASE_RELEASE 2
0800 #define CEPH_MDS_LEASE_RENEW 3
0801 #define CEPH_MDS_LEASE_REVOKE_ACK 4
0802
0803 extern const char *ceph_lease_op_name(int o);
0804
0805
0806 struct ceph_mds_lease {
0807 __u8 action;
0808 __le16 mask;
0809 __le64 ino;
0810 __le64 first, last;
0811 __le32 seq;
0812 __le32 duration_ms;
0813 } __attribute__ ((packed));
0814
0815
0816
0817 struct ceph_mds_cap_reconnect {
0818 __le64 cap_id;
0819 __le32 wanted;
0820 __le32 issued;
0821 __le64 snaprealm;
0822 __le64 pathbase;
0823 __le32 flock_len;
0824 } __attribute__ ((packed));
0825
0826
0827 struct ceph_mds_cap_reconnect_v1 {
0828 __le64 cap_id;
0829 __le32 wanted;
0830 __le32 issued;
0831 __le64 size;
0832 struct ceph_timespec mtime, atime;
0833 __le64 snaprealm;
0834 __le64 pathbase;
0835 } __attribute__ ((packed));
0836
0837 struct ceph_mds_snaprealm_reconnect {
0838 __le64 ino;
0839 __le64 seq;
0840 __le64 parent;
0841 } __attribute__ ((packed));
0842
0843
0844
0845
0846 enum {
0847 CEPH_SNAP_OP_UPDATE,
0848 CEPH_SNAP_OP_CREATE,
0849 CEPH_SNAP_OP_DESTROY,
0850 CEPH_SNAP_OP_SPLIT,
0851 };
0852
0853 extern const char *ceph_snap_op_name(int o);
0854
0855
0856 struct ceph_mds_snap_head {
0857 __le32 op;
0858 __le64 split;
0859 __le32 num_split_inos;
0860 __le32 num_split_realms;
0861 __le32 trace_len;
0862 } __attribute__ ((packed));
0863
0864
0865
0866
0867
0868 struct ceph_mds_snap_realm {
0869 __le64 ino;
0870 __le64 created;
0871 __le64 parent;
0872 __le64 parent_since;
0873 __le64 seq;
0874 __le32 num_snaps;
0875 __le32 num_prior_parent_snaps;
0876 } __attribute__ ((packed));
0877
0878
0879
0880
0881
0882 struct ceph_mds_quota {
0883 __le64 ino;
0884 struct ceph_timespec rctime;
0885 __le64 rbytes;
0886 __le64 rfiles;
0887 __le64 rsubdirs;
0888 __u8 struct_v;
0889 __u8 struct_compat;
0890 __le32 struct_len;
0891 __le64 max_bytes;
0892 __le64 max_files;
0893 } __attribute__ ((packed));
0894
0895 #endif