10dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* 20dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * ceph_fs.h - Ceph constants and data types to share between kernel and 30dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * user space. 40dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * 50dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * Most types in this file are defined as little-endian, and are 60dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * primarily intended to describe data structures that pass over the 70dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * wire or that are stored on disk. 80dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * 90dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * LGPL2 100dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil */ 110dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 125cd068c200795537fd78c423254389c8a07e2d20Sage Weil#ifndef CEPH_FS_H 135cd068c200795537fd78c423254389c8a07e2d20Sage Weil#define CEPH_FS_H 140dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 150dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#include "msgr.h" 160dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#include "rados.h" 170dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 180dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* 190dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * subprotocol versions. when specific messages types or high-level 200dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * protocols change, bump the affected components. we keep rev 210dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * internal cluster protocols separately from the public, 220dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * client-facing protocol. 230dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil */ 246df058c025ce343052c5516b1d8a9a7e73cddd64Sage Weil#define CEPH_OSD_PROTOCOL 8 /* cluster internal */ 25ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil#define CEPH_MDS_PROTOCOL 12 /* cluster internal */ 2613e38c8ae771d73bf6d1f0f98e35f99c0f0d48ffSage Weil#define CEPH_MON_PROTOCOL 5 /* cluster internal */ 270c948992a00d478c17042f4790b7d6b35299cf94Yehuda Sadeh#define CEPH_OSDC_PROTOCOL 24 /* server/client */ 283ea25f9441fc0951ada649105f2c57a59536b539Sage Weil#define CEPH_MDSC_PROTOCOL 32 /* server/client */ 2913e38c8ae771d73bf6d1f0f98e35f99c0f0d48ffSage Weil#define CEPH_MONC_PROTOCOL 15 /* server/client */ 300dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 310dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 320dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_INO_ROOT 1 331d1de9160e0d8aff0d67a21137b62e63ffd6f184Sage Weil#define CEPH_INO_CEPH 2 /* hidden .ceph dir */ 340dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 350dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* arbitrary limit on max # of monitors (cluster of 3 is typical) */ 360dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MAX_MON 31 370dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 380dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 3904a419f908b5291ff7e8ffd7aa351fa0ac0c08afSage Weil/* 4004a419f908b5291ff7e8ffd7aa351fa0ac0c08afSage Weil * feature bits 4104a419f908b5291ff7e8ffd7aa351fa0ac0c08afSage Weil */ 429688f19a188e5ef6ac8a4b6a5b17273028d1090eSage Weil#define CEPH_FEATURE_UID (1<<0) 439688f19a188e5ef6ac8a4b6a5b17273028d1090eSage Weil#define CEPH_FEATURE_NOSRCADDR (1<<1) 449688f19a188e5ef6ac8a4b6a5b17273028d1090eSage Weil#define CEPH_FEATURE_MONCLOCKCHECK (1<<2) 459688f19a188e5ef6ac8a4b6a5b17273028d1090eSage Weil#define CEPH_FEATURE_FLOCK (1<<3) 466c0f3af72cb1622a66962a1180c36ef8c41be8e2Sage Weil#define CEPH_FEATURE_SUBSCRIBE2 (1<<4) 476c0f3af72cb1622a66962a1180c36ef8c41be8e2Sage Weil#define CEPH_FEATURE_MONNAMES (1<<5) 486c0f3af72cb1622a66962a1180c36ef8c41be8e2Sage Weil#define CEPH_FEATURE_RECONNECT_SEQ (1<<6) 496c0f3af72cb1622a66962a1180c36ef8c41be8e2Sage Weil#define CEPH_FEATURE_DIRLAYOUTHASH (1<<7) 5004a419f908b5291ff7e8ffd7aa351fa0ac0c08afSage Weil 510dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 520dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* 530dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * ceph_file_layout - describe data layout for a file/inode 540dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil */ 550dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_file_layout { 560dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil /* file -> object mapping */ 570dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 fl_stripe_unit; /* stripe unit, in bytes. must be multiple 580dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil of page size. */ 590dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 fl_stripe_count; /* over this many objects */ 600dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 fl_object_size; /* until objects are this big, then move to 610dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil new objects */ 626c0f3af72cb1622a66962a1180c36ef8c41be8e2Sage Weil __le32 fl_cas_hash; /* UNUSED. 0 = none; 1 = sha256 */ 630dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 640dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil /* pg -> disk layout */ 656c0f3af72cb1622a66962a1180c36ef8c41be8e2Sage Weil __le32 fl_object_stripe_unit; /* UNUSED. for per-object parity, if any */ 660dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 670dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil /* object -> pg layout */ 680dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 fl_pg_preferred; /* preferred primary for pg (-1 for none) */ 690dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 fl_pg_pool; /* namespace, crush ruleset, rep level */ 700dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 710dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 72752727a1b21a462d6ef634d552f180ae692f8947Sage Weil#define CEPH_MIN_STRIPE_UNIT 65536 730dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 74752727a1b21a462d6ef634d552f180ae692f8947Sage Weilint ceph_file_layout_is_valid(const struct ceph_file_layout *layout); 750dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 766c0f3af72cb1622a66962a1180c36ef8c41be8e2Sage Weilstruct ceph_dir_layout { 776c0f3af72cb1622a66962a1180c36ef8c41be8e2Sage Weil __u8 dl_dir_hash; /* see ceph_hash.h for ids */ 786c0f3af72cb1622a66962a1180c36ef8c41be8e2Sage Weil __u8 dl_unused1; 796c0f3af72cb1622a66962a1180c36ef8c41be8e2Sage Weil __u16 dl_unused2; 806c0f3af72cb1622a66962a1180c36ef8c41be8e2Sage Weil __u32 dl_unused3; 816c0f3af72cb1622a66962a1180c36ef8c41be8e2Sage Weil} __attribute__ ((packed)); 820dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 834e7a5dcd1bbab6560fbc8ada29a840e7a20ed7bcSage Weil/* crypto algorithms */ 844e7a5dcd1bbab6560fbc8ada29a840e7a20ed7bcSage Weil#define CEPH_CRYPTO_NONE 0x0 854e7a5dcd1bbab6560fbc8ada29a840e7a20ed7bcSage Weil#define CEPH_CRYPTO_AES 0x1 864e7a5dcd1bbab6560fbc8ada29a840e7a20ed7bcSage Weil 87cbbfe499055f49c09210e04d9f88c2f483052384Sage Weil#define CEPH_AES_IV "cephsageyudagreg" 88cbbfe499055f49c09210e04d9f88c2f483052384Sage Weil 894e7a5dcd1bbab6560fbc8ada29a840e7a20ed7bcSage Weil/* security/authentication protocols */ 904e7a5dcd1bbab6560fbc8ada29a840e7a20ed7bcSage Weil#define CEPH_AUTH_UNKNOWN 0x0 914e7a5dcd1bbab6560fbc8ada29a840e7a20ed7bcSage Weil#define CEPH_AUTH_NONE 0x1 924e7a5dcd1bbab6560fbc8ada29a840e7a20ed7bcSage Weil#define CEPH_AUTH_CEPHX 0x2 934e7a5dcd1bbab6560fbc8ada29a840e7a20ed7bcSage Weil 94ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil#define CEPH_AUTH_UID_DEFAULT ((__u64) -1) 95ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil 964e7a5dcd1bbab6560fbc8ada29a840e7a20ed7bcSage Weil 970dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/********************************************* 980dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * message layer 990dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil */ 1000dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 1010dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* 1020dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * message types 1030dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil */ 1040dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 1050dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* misc */ 1060dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MSG_SHUTDOWN 1 1070dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MSG_PING 2 1080dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 1090dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* client <-> monitor */ 1100dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MSG_MON_MAP 4 1110dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MSG_MON_GET_MAP 5 1120dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MSG_STATFS 13 1130dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MSG_STATFS_REPLY 14 1140dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MSG_MON_SUBSCRIBE 15 1150dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MSG_MON_SUBSCRIBE_ACK 16 1164e7a5dcd1bbab6560fbc8ada29a840e7a20ed7bcSage Weil#define CEPH_MSG_AUTH 17 1174e7a5dcd1bbab6560fbc8ada29a840e7a20ed7bcSage Weil#define CEPH_MSG_AUTH_REPLY 18 1180dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 1190dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* client <-> mds */ 1200dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MSG_MDS_MAP 21 1210dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 1220dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MSG_CLIENT_SESSION 22 1230dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MSG_CLIENT_RECONNECT 23 1240dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 1250dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MSG_CLIENT_REQUEST 24 1260dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MSG_CLIENT_REQUEST_FORWARD 25 1270dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MSG_CLIENT_REPLY 26 1280dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MSG_CLIENT_CAPS 0x310 1290dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MSG_CLIENT_LEASE 0x311 1300dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MSG_CLIENT_SNAP 0x312 1310dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MSG_CLIENT_CAPRELEASE 0x313 1320dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 133ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil/* pool ops */ 134ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil#define CEPH_MSG_POOLOP_REPLY 48 135ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil#define CEPH_MSG_POOLOP 49 136ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil 137ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil 1380dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* osd */ 139483fac71485e5063ff4033b6dc7d91567f1b6ff1Yehuda Sadeh#define CEPH_MSG_OSD_MAP 41 140483fac71485e5063ff4033b6dc7d91567f1b6ff1Yehuda Sadeh#define CEPH_MSG_OSD_OP 42 141483fac71485e5063ff4033b6dc7d91567f1b6ff1Yehuda Sadeh#define CEPH_MSG_OSD_OPREPLY 43 142483fac71485e5063ff4033b6dc7d91567f1b6ff1Yehuda Sadeh#define CEPH_MSG_WATCH_NOTIFY 44 143483fac71485e5063ff4033b6dc7d91567f1b6ff1Yehuda Sadeh 144483fac71485e5063ff4033b6dc7d91567f1b6ff1Yehuda Sadeh 145483fac71485e5063ff4033b6dc7d91567f1b6ff1Yehuda Sadeh/* watch-notify operations */ 146483fac71485e5063ff4033b6dc7d91567f1b6ff1Yehuda Sadehenum { 147483fac71485e5063ff4033b6dc7d91567f1b6ff1Yehuda Sadeh WATCH_NOTIFY = 1, /* notifying watcher */ 148483fac71485e5063ff4033b6dc7d91567f1b6ff1Yehuda Sadeh WATCH_NOTIFY_COMPLETE = 2, /* notifier notified when done */ 149483fac71485e5063ff4033b6dc7d91567f1b6ff1Yehuda Sadeh}; 150483fac71485e5063ff4033b6dc7d91567f1b6ff1Yehuda Sadeh 1510dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 152ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil/* pool operations */ 153ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weilenum { 154ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil POOL_OP_CREATE = 0x01, 155ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil POOL_OP_DELETE = 0x02, 156ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil POOL_OP_AUID_CHANGE = 0x03, 157ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil POOL_OP_CREATE_SNAP = 0x11, 158ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil POOL_OP_DELETE_SNAP = 0x12, 159ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil POOL_OP_CREATE_UNMANAGED_SNAP = 0x21, 160ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil POOL_OP_DELETE_UNMANAGED_SNAP = 0x22, 161ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil}; 162ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil 16313e38c8ae771d73bf6d1f0f98e35f99c0f0d48ffSage Weilstruct ceph_mon_request_header { 16413e38c8ae771d73bf6d1f0f98e35f99c0f0d48ffSage Weil __le64 have_version; 16513e38c8ae771d73bf6d1f0f98e35f99c0f0d48ffSage Weil __le16 session_mon; 16613e38c8ae771d73bf6d1f0f98e35f99c0f0d48ffSage Weil __le64 session_mon_tid; 16713e38c8ae771d73bf6d1f0f98e35f99c0f0d48ffSage Weil} __attribute__ ((packed)); 1680dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 1690dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_mon_statfs { 17013e38c8ae771d73bf6d1f0f98e35f99c0f0d48ffSage Weil struct ceph_mon_request_header monhdr; 1710dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct ceph_fsid fsid; 1720dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 1730dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 1740dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_statfs { 1750dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 kb, kb_used, kb_avail; 1760dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 num_objects; 1770dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 1780dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 1790dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_mon_statfs_reply { 1800dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct ceph_fsid fsid; 1810dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 version; 1820dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct ceph_statfs st; 1830dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 1840dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 185ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weilconst char *ceph_pool_op_name(int op); 186ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil 187ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weilstruct ceph_mon_poolop { 188ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil struct ceph_mon_request_header monhdr; 189ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil struct ceph_fsid fsid; 190ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil __le32 pool; 191ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil __le32 op; 192ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil __le64 auid; 193ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil __le64 snapid; 194ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil __le32 name_len; 195ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil} __attribute__ ((packed)); 196ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil 197ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weilstruct ceph_mon_poolop_reply { 198ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil struct ceph_mon_request_header monhdr; 199ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil struct ceph_fsid fsid; 200ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil __le32 reply_code; 201ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil __le32 epoch; 202ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil char has_data; 203ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil char data[0]; 204ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil} __attribute__ ((packed)); 205ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil 206ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weilstruct ceph_mon_unmanaged_snap { 207ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil __le64 snapid; 208ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil} __attribute__ ((packed)); 209ca9d93a292e327bbcddd8f8ea4197397e35097d4Sage Weil 2100dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_osd_getmap { 21113e38c8ae771d73bf6d1f0f98e35f99c0f0d48ffSage Weil struct ceph_mon_request_header monhdr; 2120dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct ceph_fsid fsid; 2130dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 start; 2140dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 2150dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 2160dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_mds_getmap { 21713e38c8ae771d73bf6d1f0f98e35f99c0f0d48ffSage Weil struct ceph_mon_request_header monhdr; 2180dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct ceph_fsid fsid; 2190dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 2200dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 2210dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_client_mount { 22213e38c8ae771d73bf6d1f0f98e35f99c0f0d48ffSage Weil struct ceph_mon_request_header monhdr; 2230dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 2240dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 225483fac71485e5063ff4033b6dc7d91567f1b6ff1Yehuda Sadeh#define CEPH_SUBSCRIBE_ONETIME 1 /* i want only 1 update after have */ 226483fac71485e5063ff4033b6dc7d91567f1b6ff1Yehuda Sadeh 2270dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_mon_subscribe_item { 228483fac71485e5063ff4033b6dc7d91567f1b6ff1Yehuda Sadeh __le64 have_version; __le64 have; 2290dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __u8 onetime; 2300dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 2310dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 23207bd10fb9853a41a7f0bb271721cca97d15eccaeSage Weilstruct ceph_mon_subscribe_ack { 23307bd10fb9853a41a7f0bb271721cca97d15eccaeSage Weil __le32 duration; /* seconds */ 23407bd10fb9853a41a7f0bb271721cca97d15eccaeSage Weil struct ceph_fsid fsid; 23507bd10fb9853a41a7f0bb271721cca97d15eccaeSage Weil} __attribute__ ((packed)); 23607bd10fb9853a41a7f0bb271721cca97d15eccaeSage Weil 2370dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* 2380dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * mds states 2390dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * > 0 -> in 2400dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * <= 0 -> out 2410dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil */ 2420dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_STATE_DNE 0 /* down, does not exist. */ 2430dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_STATE_STOPPED -1 /* down, once existed, but no subtrees. 2440dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil empty log. */ 2450dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_STATE_BOOT -4 /* up, boot announcement. */ 2460dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_STATE_STANDBY -5 /* up, idle. waiting for assignment. */ 2470dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_STATE_CREATING -6 /* up, creating MDS instance. */ 2480dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_STATE_STARTING -7 /* up, starting previously stopped mds */ 2490dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_STATE_STANDBY_REPLAY -8 /* up, tailing active node's journal */ 2500dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 2510dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_STATE_REPLAY 8 /* up, replaying journal. */ 2520dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_STATE_RESOLVE 9 /* up, disambiguating distributed 2530dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil operations (import, rename, etc.) */ 2540dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_STATE_RECONNECT 10 /* up, reconnect to clients */ 2550dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_STATE_REJOIN 11 /* up, rejoining distributed cache */ 2560dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_STATE_CLIENTREPLAY 12 /* up, replaying client operations */ 2570dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_STATE_ACTIVE 13 /* up, active */ 2580dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_STATE_STOPPING 14 /* up, but exporting metadata */ 2590dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 2600dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilextern const char *ceph_mds_state_name(int s); 2610dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 2620dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 2630dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* 2640dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * metadata lock types. 2650dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * - these are bitmasks.. we can compose them 2660dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * - they also define the lock ordering by the MDS 2670dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * - a few of these are internal to the mds 2680dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil */ 269dd1c9057366f329911180e9000e2b425f23fc287Sage Weil#define CEPH_LOCK_DVERSION 1 270dd1c9057366f329911180e9000e2b425f23fc287Sage Weil#define CEPH_LOCK_DN 2 271dd1c9057366f329911180e9000e2b425f23fc287Sage Weil#define CEPH_LOCK_ISNAP 16 272dd1c9057366f329911180e9000e2b425f23fc287Sage Weil#define CEPH_LOCK_IVERSION 32 /* mds internal */ 273dd1c9057366f329911180e9000e2b425f23fc287Sage Weil#define CEPH_LOCK_IFILE 64 274dd1c9057366f329911180e9000e2b425f23fc287Sage Weil#define CEPH_LOCK_IAUTH 128 275dd1c9057366f329911180e9000e2b425f23fc287Sage Weil#define CEPH_LOCK_ILINK 256 276dd1c9057366f329911180e9000e2b425f23fc287Sage Weil#define CEPH_LOCK_IDFT 512 /* dir frag tree */ 277dd1c9057366f329911180e9000e2b425f23fc287Sage Weil#define CEPH_LOCK_INEST 1024 /* mds internal */ 278dd1c9057366f329911180e9000e2b425f23fc287Sage Weil#define CEPH_LOCK_IXATTR 2048 279f0b18d9f22ea4e50955945661b7e165a47705249Sage Weil#define CEPH_LOCK_IFLOCK 4096 /* advisory file locks */ 280dd1c9057366f329911180e9000e2b425f23fc287Sage Weil#define CEPH_LOCK_INO 8192 /* immutable inode bits; not a lock */ 2810dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 2820dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* client_session ops */ 2830dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilenum { 2840dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_SESSION_REQUEST_OPEN, 2850dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_SESSION_OPEN, 2860dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_SESSION_REQUEST_CLOSE, 2870dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_SESSION_CLOSE, 2880dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_SESSION_REQUEST_RENEWCAPS, 2890dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_SESSION_RENEWCAPS, 2900dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_SESSION_STALE, 2910dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_SESSION_RECALL_STATE, 2920dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil}; 2930dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 2940dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilextern const char *ceph_session_op_name(int op); 2950dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 2960dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_mds_session_head { 2970dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 op; 2980dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 seq; 2990dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct ceph_timespec stamp; 3000dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 max_caps, max_leases; 3010dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 3020dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 3030dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* client_request */ 3040dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* 3050dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * metadata ops. 3060dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * & 0x001000 -> write op 3070dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * & 0x010000 -> follow symlink (e.g. stat(), not lstat()). 3080dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil & & 0x100000 -> use weird ino/path trace 3090dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil */ 3100dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_OP_WRITE 0x001000 3110dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilenum { 3120dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_LOOKUP = 0x00100, 3130dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_GETATTR = 0x00101, 3140dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_LOOKUPHASH = 0x00102, 3150dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_LOOKUPPARENT = 0x00103, 3163c454cf21645bc96668e286f6352ac2c4c895fa2Sage Weil CEPH_MDS_OP_LOOKUPINO = 0x00104, 3170dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 3180dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_SETXATTR = 0x01105, 3190dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_RMXATTR = 0x01106, 3200dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_SETLAYOUT = 0x01107, 3210dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_SETATTR = 0x01108, 322fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum CEPH_MDS_OP_SETFILELOCK= 0x01109, 323fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum CEPH_MDS_OP_GETFILELOCK= 0x00110, 324571dba52a34015a5a7aa5d480a86936878444a6fGreg Farnum CEPH_MDS_OP_SETDIRLAYOUT=0x0110a, 3250dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 3260dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_MKNOD = 0x01201, 3270dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_LINK = 0x01202, 3280dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_UNLINK = 0x01203, 3290dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_RENAME = 0x01204, 3300dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_MKDIR = 0x01220, 3310dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_RMDIR = 0x01221, 3320dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_SYMLINK = 0x01222, 3330dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 3343ea25f9441fc0951ada649105f2c57a59536b539Sage Weil CEPH_MDS_OP_CREATE = 0x01301, 3350dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_OPEN = 0x00302, 3360dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_READDIR = 0x00305, 3370dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 3380dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_LOOKUPSNAP = 0x00400, 3390dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_MKSNAP = 0x01400, 3400dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_RMSNAP = 0x01401, 3410dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_MDS_OP_LSSNAP = 0x00402, 3420dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil}; 3430dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 3440dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilextern const char *ceph_mds_op_name(int op); 3450dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 3460dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 3470dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_SETATTR_MODE 1 3480dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_SETATTR_UID 2 3490dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_SETATTR_GID 4 3500dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_SETATTR_MTIME 8 3510dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_SETATTR_ATIME 16 3520dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_SETATTR_SIZE 32 3530dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_SETATTR_CTIME 64 3540dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 3550dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilunion ceph_mds_request_args { 3560dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct { 3570dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 mask; /* CEPH_CAP_* */ 3580dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil } __attribute__ ((packed)) getattr; 3590dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct { 3600dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 mode; 3610dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 uid; 3620dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 gid; 3630dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct ceph_timespec mtime; 3640dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct ceph_timespec atime; 3650dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 size, old_size; /* old_size needed by truncate */ 3660dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 mask; /* CEPH_SETATTR_* */ 3670dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil } __attribute__ ((packed)) setattr; 3680dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct { 3690dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 frag; /* which dir fragment */ 3700dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 max_entries; /* how many dentries to grab */ 37123804d91f112df09b832cd091b71af4dc2831aa8Sage Weil __le32 max_bytes; 3720dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil } __attribute__ ((packed)) readdir; 3730dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct { 3740dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 mode; 3750dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 rdev; 3760dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil } __attribute__ ((packed)) mknod; 3770dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct { 3780dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 mode; 3790dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil } __attribute__ ((packed)) mkdir; 3800dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct { 3810dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 flags; 3820dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 mode; 3830dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 stripe_unit; /* layout for newly created file */ 3840dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 stripe_count; /* ... */ 3850dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 object_size; 3860dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 file_replication; 3870dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 preferred; 3880dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil } __attribute__ ((packed)) open; 3890dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct { 3900dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 flags; 3910dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil } __attribute__ ((packed)) setxattr; 3920dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct { 3930dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct ceph_file_layout layout; 3940dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil } __attribute__ ((packed)) setlayout; 395fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum struct { 396fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum __u8 rule; /* currently fcntl or flock */ 397fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum __u8 type; /* shared, exclusive, remove*/ 398fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum __le64 pid; /* process id requesting the lock */ 399fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum __le64 pid_namespace; 400fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum __le64 start; /* initial location to lock */ 401fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum __le64 length; /* num bytes to lock from start */ 402fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum __u8 wait; /* will caller wait for lock to become available? */ 403fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum } __attribute__ ((packed)) filelock_change; 4040dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 4050dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 4060dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_FLAG_REPLAY 1 /* this is a replayed op */ 4070dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_FLAG_WANT_DENTRY 2 /* want dentry in reply */ 4080dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 4090dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_mds_request_head { 4106df058c025ce343052c5516b1d8a9a7e73cddd64Sage Weil __le64 oldest_client_tid; 4110dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 mdsmap_epoch; /* on client */ 4120dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 flags; /* CEPH_MDS_FLAG_* */ 4130dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __u8 num_retry, num_fwd; /* count retry, fwd attempts */ 4140dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le16 num_releases; /* # include cap/lease release records */ 4150dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 op; /* mds op code */ 4160dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 caller_uid, caller_gid; 4170dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 ino; /* use this ino for openc, mkdir, mknod, 4180dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil etc. (if replaying) */ 4190dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil union ceph_mds_request_args args; 4200dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 4210dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 4220dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* cap/lease release record */ 4230dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_mds_request_release { 4240dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 ino, cap_id; /* ino and unique cap id */ 4250dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 caps, wanted; /* new issued, wanted */ 4260dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 seq, issue_seq, mseq; 4270dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 dname_seq; /* if releasing a dentry lease, a */ 4280dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 dname_len; /* string follows. */ 4290dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 4300dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 4310dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* client reply */ 4320dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_mds_reply_head { 4330dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 op; 4340dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 result; 4350dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 mdsmap_epoch; 4360dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __u8 safe; /* true if committed to disk */ 4370dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __u8 is_dentry, is_target; /* true if dentry, target inode records 4380dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil are included with reply */ 4390dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 4400dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 4410dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* one for each node split */ 4420dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_frag_tree_split { 4430dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 frag; /* this frag splits... */ 4440dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 by; /* ...by this many bits */ 4450dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 4460dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 4470dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_frag_tree_head { 4480dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 nsplits; /* num ceph_frag_tree_split records */ 4490dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct ceph_frag_tree_split splits[]; 4500dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 4510dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 4520dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* capability issue, for bundling with mds reply */ 4530dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_mds_reply_cap { 4540dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 caps, wanted; /* caps issued, wanted */ 4550dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 cap_id; 4560dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 seq, mseq; 4570dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 realm; /* snap realm */ 4580dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __u8 flags; /* CEPH_CAP_FLAG_* */ 4590dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 4600dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 4610dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_FLAG_AUTH 1 /* cap is issued by auth mds */ 4620dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 4630dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* inode record, for bundling with mds reply */ 4640dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_mds_reply_inode { 4650dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 ino; 4660dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 snapid; 4670dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 rdev; 4680dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 version; /* inode version */ 4690dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 xattr_version; /* version for xattr blob */ 4700dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct ceph_mds_reply_cap cap; /* caps issued for this inode */ 4710dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct ceph_file_layout layout; 4720dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct ceph_timespec ctime, mtime, atime; 4730dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 time_warp_seq; 4740dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 size, max_size, truncate_size; 4750dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 truncate_seq; 4760dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 mode, uid, gid; 4770dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 nlink; 4780dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 files, subdirs, rbytes, rfiles, rsubdirs; /* dir stats */ 4790dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct ceph_timespec rctime; 4800dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct ceph_frag_tree_head fragtree; /* (must be at end of struct) */ 4810dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 4826c0f3af72cb1622a66962a1180c36ef8c41be8e2Sage Weil/* followed by frag array, symlink string, dir layout, xattr blob */ 4830dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 4840dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* reply_lease follows dname, and reply_inode */ 4850dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_mds_reply_lease { 4860dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le16 mask; /* lease type(s) */ 4870dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 duration_ms; /* lease duration */ 4880dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 seq; 4890dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 4900dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 4910dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_mds_reply_dirfrag { 4920dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 frag; /* fragment */ 4930dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 auth; /* auth mds, if this is a delegation point */ 4940dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 ndist; /* number of mds' this is replicated on */ 4950dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 dist[]; 4960dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 4970dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 498fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum#define CEPH_LOCK_FCNTL 1 499fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum#define CEPH_LOCK_FLOCK 2 500fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum 501fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum#define CEPH_LOCK_SHARED 1 502fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum#define CEPH_LOCK_EXCL 2 503fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum#define CEPH_LOCK_UNLOCK 4 504fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum 505fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnumstruct ceph_filelock { 506fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum __le64 start;/* file offset to start lock at */ 507fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum __le64 length; /* num bytes to lock; 0 for all following start */ 508fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum __le64 client; /* which client holds the lock */ 509fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum __le64 pid; /* process id holding the lock on the client */ 510fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum __le64 pid_namespace; 511fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum __u8 type; /* shared lock, exclusive lock, or unlock */ 512fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum} __attribute__ ((packed)); 513fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum 514fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum 5150dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* file access modes */ 5160dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_FILE_MODE_PIN 0 5170dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_FILE_MODE_RD 1 5180dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_FILE_MODE_WR 2 5190dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_FILE_MODE_RDWR 3 /* RD | WR */ 5200dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_FILE_MODE_LAZY 4 /* lazy io */ 5210dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_FILE_MODE_NUM 8 /* bc these are bit fields.. mostly */ 5220dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 5230dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilint ceph_flags_to_mode(int flags); 5240dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 5250dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 5260dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* capability bits */ 5270dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_PIN 1 /* no specific capabilities beyond the pin */ 5280dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 5290dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* generic cap bits */ 5300dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_GSHARED 1 /* client can reads */ 5310dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_GEXCL 2 /* client can read and update */ 5320dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_GCACHE 4 /* (file) client can cache reads */ 5330dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_GRD 8 /* (file) client can read */ 5340dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_GWR 16 /* (file) client can write */ 5350dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_GBUFFER 32 /* (file) client can buffer writes */ 5360dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_GWREXTEND 64 /* (file) client can extend EOF */ 5370dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_GLAZYIO 128 /* (file) client can perform lazy io */ 5380dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 5390dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* per-lock shift */ 5400dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_SAUTH 2 5410dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_SLINK 4 5420dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_SXATTR 6 543fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum#define CEPH_CAP_SFILE 8 544fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum#define CEPH_CAP_SFLOCK 20 5450dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 546fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum#define CEPH_CAP_BITS 22 5470dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 5480dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* composed values */ 5490dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_AUTH_SHARED (CEPH_CAP_GSHARED << CEPH_CAP_SAUTH) 5500dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_AUTH_EXCL (CEPH_CAP_GEXCL << CEPH_CAP_SAUTH) 5510dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_LINK_SHARED (CEPH_CAP_GSHARED << CEPH_CAP_SLINK) 5520dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_LINK_EXCL (CEPH_CAP_GEXCL << CEPH_CAP_SLINK) 5530dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_XATTR_SHARED (CEPH_CAP_GSHARED << CEPH_CAP_SXATTR) 5540dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_XATTR_EXCL (CEPH_CAP_GEXCL << CEPH_CAP_SXATTR) 5550dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_FILE(x) (x << CEPH_CAP_SFILE) 5560dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_FILE_SHARED (CEPH_CAP_GSHARED << CEPH_CAP_SFILE) 5570dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_FILE_EXCL (CEPH_CAP_GEXCL << CEPH_CAP_SFILE) 5580dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_FILE_CACHE (CEPH_CAP_GCACHE << CEPH_CAP_SFILE) 5590dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_FILE_RD (CEPH_CAP_GRD << CEPH_CAP_SFILE) 5600dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_FILE_WR (CEPH_CAP_GWR << CEPH_CAP_SFILE) 5610dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_FILE_BUFFER (CEPH_CAP_GBUFFER << CEPH_CAP_SFILE) 5620dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_FILE_WREXTEND (CEPH_CAP_GWREXTEND << CEPH_CAP_SFILE) 5630dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_FILE_LAZYIO (CEPH_CAP_GLAZYIO << CEPH_CAP_SFILE) 564fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum#define CEPH_CAP_FLOCK_SHARED (CEPH_CAP_GSHARED << CEPH_CAP_SFLOCK) 565fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum#define CEPH_CAP_FLOCK_EXCL (CEPH_CAP_GEXCL << CEPH_CAP_SFLOCK) 566fbaad9797a761c2d5ff6e755bbb4c046207a1ca2Greg Farnum 5670dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 5680dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* cap masks (for getattr) */ 5690dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_STAT_CAP_INODE CEPH_CAP_PIN 5700dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_STAT_CAP_TYPE CEPH_CAP_PIN /* mode >> 12 */ 5710dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_STAT_CAP_SYMLINK CEPH_CAP_PIN 5720dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_STAT_CAP_UID CEPH_CAP_AUTH_SHARED 5730dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_STAT_CAP_GID CEPH_CAP_AUTH_SHARED 5740dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_STAT_CAP_MODE CEPH_CAP_AUTH_SHARED 5750dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_STAT_CAP_NLINK CEPH_CAP_LINK_SHARED 5760dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_STAT_CAP_LAYOUT CEPH_CAP_FILE_SHARED 5770dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_STAT_CAP_MTIME CEPH_CAP_FILE_SHARED 5780dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_STAT_CAP_SIZE CEPH_CAP_FILE_SHARED 5790dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_STAT_CAP_ATIME CEPH_CAP_FILE_SHARED /* fixme */ 5800dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_STAT_CAP_XATTR CEPH_CAP_XATTR_SHARED 5810dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_STAT_CAP_INODE_ALL (CEPH_CAP_PIN | \ 5820dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_AUTH_SHARED | \ 5830dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_LINK_SHARED | \ 5840dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_FILE_SHARED | \ 5850dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_XATTR_SHARED) 5860dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 5870dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_ANY_SHARED (CEPH_CAP_AUTH_SHARED | \ 5880dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_LINK_SHARED | \ 5890dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_XATTR_SHARED | \ 5900dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_FILE_SHARED) 5910dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_ANY_RD (CEPH_CAP_ANY_SHARED | CEPH_CAP_FILE_RD | \ 5920dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_FILE_CACHE) 5930dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 5940dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_ANY_EXCL (CEPH_CAP_AUTH_EXCL | \ 5950dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_LINK_EXCL | \ 5960dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_XATTR_EXCL | \ 5970dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_FILE_EXCL) 5980dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_ANY_FILE_WR (CEPH_CAP_FILE_WR | CEPH_CAP_FILE_BUFFER | \ 5990dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_FILE_EXCL) 6000dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_ANY_WR (CEPH_CAP_ANY_EXCL | CEPH_CAP_ANY_FILE_WR) 6010dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_ANY (CEPH_CAP_ANY_RD | CEPH_CAP_ANY_EXCL | \ 60284d9509234c46481aded977193fcf23f892d715fSage Weil CEPH_CAP_ANY_FILE_WR | CEPH_CAP_FILE_LAZYIO | \ 60384d9509234c46481aded977193fcf23f892d715fSage Weil CEPH_CAP_PIN) 6040dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 6050dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_CAP_LOCKS (CEPH_LOCK_IFILE | CEPH_LOCK_IAUTH | CEPH_LOCK_ILINK | \ 6060dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_LOCK_IXATTR) 6070dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 6080dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilint ceph_caps_for_mode(int mode); 6090dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 6100dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilenum { 6110dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_OP_GRANT, /* mds->client grant */ 6120dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_OP_REVOKE, /* mds->client revoke */ 6130dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_OP_TRUNC, /* mds->client trunc notify */ 6140dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_OP_EXPORT, /* mds has exported the cap */ 6150dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_OP_IMPORT, /* mds has imported the cap */ 6160dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_OP_UPDATE, /* client->mds update */ 6170dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_OP_DROP, /* client->mds drop cap bits */ 6180dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_OP_FLUSH, /* client->mds cap writeback */ 6190dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_OP_FLUSH_ACK, /* mds->client flushed */ 6200dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_OP_FLUSHSNAP, /* client->mds flush snapped metadata */ 6210dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_OP_FLUSHSNAP_ACK, /* mds->client flushed snapped metadata */ 6220dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_OP_RELEASE, /* client->mds release (clean) cap */ 6230dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_CAP_OP_RENEW, /* client->mds renewal request */ 6240dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil}; 6250dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 6260dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilextern const char *ceph_cap_op_name(int op); 6270dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 6280dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* 6290dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * caps message, used for capability callbacks, acks, requests, etc. 6300dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil */ 6310dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_mds_caps { 6320dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 op; /* CEPH_CAP_OP_* */ 6330dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 ino, realm; 6340dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 cap_id; 6350dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 seq, issue_seq; 6360dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 caps, wanted, dirty; /* latest issued/wanted/dirty */ 6370dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 migrate_seq; 6380dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 snap_follows; 6390dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 snap_trace_len; 6400dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 6410dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil /* authlock */ 6420dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 uid, gid, mode; 6430dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 6440dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil /* linklock */ 6450dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 nlink; 6460dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 6470dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil /* xattrlock */ 6480dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 xattr_len; 6490dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 xattr_version; 6500dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 6510dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil /* filelock */ 6520dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 size, max_size, truncate_size; 6530dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 truncate_seq; 6540dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct ceph_timespec mtime, atime, ctime; 6550dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct ceph_file_layout layout; 6560dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 time_warp_seq; 6570dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 6580dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 6590dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* cap release msg head */ 6600dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_mds_cap_release { 6610dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 num; /* number of cap_items that follow */ 6620dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 6630dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 6640dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_mds_cap_item { 6650dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 ino; 6660dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 cap_id; 6670dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 migrate_seq, seq; 6680dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 6690dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 6700dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_LEASE_REVOKE 1 /* mds -> client */ 6710dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_LEASE_RELEASE 2 /* client -> mds */ 6720dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_LEASE_RENEW 3 /* client <-> mds */ 6730dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#define CEPH_MDS_LEASE_REVOKE_ACK 4 /* client -> mds */ 6740dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 6750dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilextern const char *ceph_lease_op_name(int o); 6760dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 6770dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* lease msg header */ 6780dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_mds_lease { 6790dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __u8 action; /* CEPH_MDS_LEASE_* */ 6800dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le16 mask; /* which lease */ 6810dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 ino; 6820dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 first, last; /* snap range */ 6830dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 seq; 6840dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 duration_ms; /* duration of renewal */ 6850dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 6860dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* followed by a __le32+string for dname */ 6870dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 6880dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* client reconnect */ 6890dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_mds_cap_reconnect { 6900dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 cap_id; 6910dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 wanted; 6920dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 issued; 69320cb34ae9e4b008a8789a48d52f5aa279dc400b6Sage Weil __le64 snaprealm; 69420cb34ae9e4b008a8789a48d52f5aa279dc400b6Sage Weil __le64 pathbase; /* base ino for our path to this ino */ 69520cb34ae9e4b008a8789a48d52f5aa279dc400b6Sage Weil __le32 flock_len; /* size of flock state blob, if any */ 69620cb34ae9e4b008a8789a48d52f5aa279dc400b6Sage Weil} __attribute__ ((packed)); 69720cb34ae9e4b008a8789a48d52f5aa279dc400b6Sage Weil/* followed by flock blob */ 69820cb34ae9e4b008a8789a48d52f5aa279dc400b6Sage Weil 69920cb34ae9e4b008a8789a48d52f5aa279dc400b6Sage Weilstruct ceph_mds_cap_reconnect_v1 { 70020cb34ae9e4b008a8789a48d52f5aa279dc400b6Sage Weil __le64 cap_id; 70120cb34ae9e4b008a8789a48d52f5aa279dc400b6Sage Weil __le32 wanted; 70220cb34ae9e4b008a8789a48d52f5aa279dc400b6Sage Weil __le32 issued; 7030dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 size; 7040dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil struct ceph_timespec mtime, atime; 7050dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 snaprealm; 7060dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 pathbase; /* base ino for our path to this ino */ 7070dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 7080dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 7090dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_mds_snaprealm_reconnect { 7100dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 ino; /* snap realm base */ 7110dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 seq; /* snap seq for this snap realm */ 7120dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 parent; /* parent realm */ 7130dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 7140dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 7150dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* 7160dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * snaps 7170dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil */ 7180dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilenum { 7190dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_SNAP_OP_UPDATE, /* CREATE or DESTROY */ 7200dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_SNAP_OP_CREATE, 7210dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_SNAP_OP_DESTROY, 7220dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil CEPH_SNAP_OP_SPLIT, 7230dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil}; 7240dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 7250dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilextern const char *ceph_snap_op_name(int o); 7260dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 7270dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* snap msg header */ 7280dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_mds_snap_head { 7290dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 op; /* CEPH_SNAP_OP_* */ 7300dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 split; /* ino to split off, if any */ 7310dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 num_split_inos; /* # inos belonging to new child realm */ 7320dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 num_split_realms; /* # child realms udner new child realm */ 7330dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 trace_len; /* size of snap trace blob */ 7340dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 7350dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* followed by split ino list, then split realms, then the trace blob */ 7360dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 7370dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* 7380dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil * encode info about a snaprealm, as viewed by a client 7390dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil */ 7400dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weilstruct ceph_mds_snap_realm { 7410dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 ino; /* ino */ 7420dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 created; /* snap: when created */ 7430dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 parent; /* ino: parent realm */ 7440dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 parent_since; /* snap: same parent since */ 7450dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le64 seq; /* snap: version */ 7460dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 num_snaps; 7470dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil __le32 num_prior_parent_snaps; 7480dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil} __attribute__ ((packed)); 7490dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil/* followed by my snap list, then prior parent snap list */ 7500dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil 7510dee3c28af2fbe22ca62739a7f57da5435d35793Sage Weil#endif 752