📄 lustre_idl.h
字号:
static inline int ll_inode_to_ext_flags(int iflags, int keep){ return keep ? (iflags & ~MDS_BFLAG_EXT_FLAGS) : (((iflags & S_SYNC) ? MDS_SYNC_FL : 0) | ((iflags & S_NOATIME) ? MDS_NOATIME_FL : 0) | ((iflags & S_APPEND) ? MDS_APPEND_FL : 0) |#if defined(S_DIRSYNC) ((iflags & S_DIRSYNC) ? MDS_DIRSYNC_FL : 0) |#endif ((iflags & S_IMMUTABLE) ? MDS_IMMUTABLE_FL : 0));}#endifstruct mds_body { struct ll_fid fid1; struct ll_fid fid2; struct lustre_handle handle; __u64 valid; __u64 size; /* Offset, in the case of MDS_READPAGE */ __u64 mtime; __u64 atime; __u64 ctime; __u64 blocks; /* XID, in the case of MDS_READPAGE */ __u64 io_epoch; __u64 ino; __u32 fsuid; __u32 fsgid; __u32 capability; __u32 mode; __u32 uid; __u32 gid; __u32 flags; /* from vfs for pin/unpin, MDS_BFLAG for close */ __u32 rdev; __u32 nlink; /* #bytes to read in the case of MDS_READPAGE */ __u32 generation; __u32 suppgid; __u32 eadatasize; __u32 aclsize; __u32 max_mdsize; __u32 max_cookiesize; /* also fix lustre_swab_mds_body */ __u32 padding_4; /* also fix lustre_swab_mds_body */};extern void lustre_swab_mds_body (struct mds_body *b);#define Q_QUOTACHECK 0x800100#define Q_INITQUOTA 0x800101 /* init slave limits */#define Q_GETOINFO 0x800102 /* get obd quota info */#define Q_GETOQUOTA 0x800103 /* get obd quotas */#define Q_TYPESET(oqc, type) \ ((oqc)->qc_type == type || (oqc)->qc_type == UGQUOTA)#define Q_GETOCMD(oqc) \ ((oqc)->qc_cmd == Q_GETOINFO || (oqc)->qc_cmd == Q_GETOQUOTA)struct obd_quotactl { __u32 qc_cmd; __u32 qc_type; __u32 qc_id; __u32 qc_stat; struct obd_dqinfo qc_dqinfo; struct obd_dqblk qc_dqblk;};extern void lustre_swab_obd_quotactl(struct obd_quotactl *q);struct mds_rec_setattr { __u32 sa_opcode; __u32 sa_fsuid; __u32 sa_fsgid; __u32 sa_cap; __u32 sa_suppgid; __u32 sa_mode; struct ll_fid sa_fid; __u64 sa_valid; /* MDS_ATTR_* attributes */ __u64 sa_size; __u64 sa_mtime; __u64 sa_atime; __u64 sa_ctime; __u32 sa_uid; __u32 sa_gid; __u32 sa_attr_flags; __u32 sa_padding; /* also fix lustre_swab_mds_rec_setattr */};/* * Attribute flags used in mds_rec_setattr::sa_valid. * The kernel's #defines for ATTR_* should not be used over the network * since the client and MDS may run different kernels (see bug 13828) * Therefore, we should only use MDS_ATTR_* attributes for sa_valid. */#define MDS_ATTR_MODE 0x1ULL /* = 1 */#define MDS_ATTR_UID 0x2ULL /* = 2 */#define MDS_ATTR_GID 0x4ULL /* = 4 */#define MDS_ATTR_SIZE 0x8ULL /* = 8 */#define MDS_ATTR_ATIME 0x10ULL /* = 16 */#define MDS_ATTR_MTIME 0x20ULL /* = 32 */#define MDS_ATTR_CTIME 0x40ULL /* = 64 */#define MDS_ATTR_ATIME_SET 0x80ULL /* = 128 */#define MDS_ATTR_MTIME_SET 0x100ULL /* = 256 */#define MDS_ATTR_FORCE 0x200ULL /* = 512, Not a change, but a change it */#define MDS_ATTR_ATTR_FLAG 0x400ULL /* = 1024 */#define MDS_ATTR_KILL_SUID 0x800ULL /* = 2048 */#define MDS_ATTR_KILL_SGID 0x1000ULL /* = 4096 */#define MDS_ATTR_CTIME_SET 0x2000ULL /* = 8192 */#define MDS_ATTR_FROM_OPEN 0x4000ULL /* = 16384, called from open path, ie O_TRUNC */extern void lustre_swab_mds_rec_setattr (struct mds_rec_setattr *sa);#ifndef FMODE_READ#define FMODE_READ 00000001#define FMODE_WRITE 00000002#endif#define MDS_FMODE_EXEC 00000004#define MDS_OPEN_CREAT 00000100#define MDS_OPEN_EXCL 00000200#define MDS_OPEN_TRUNC 00001000#define MDS_OPEN_APPEND 00002000#define MDS_OPEN_SYNC 00010000#define MDS_OPEN_DIRECTORY 00200000#define MDS_OPEN_DELAY_CREATE 0100000000 /* delay initial object create */#define MDS_OPEN_OWNEROVERRIDE 0200000000 /* NFSD rw-reopen ro file for owner */#define MDS_OPEN_JOIN_FILE 0400000000 /* open for join file*/#define MDS_OPEN_LOCK 04000000000 /* This open requires open lock */#define MDS_OPEN_HAS_EA 010000000000 /* specify object create pattern */#define MDS_OPEN_HAS_OBJS 020000000000 /* Just set the EA the obj exist */struct mds_rec_create { __u32 cr_opcode; __u32 cr_fsuid; __u32 cr_fsgid; __u32 cr_cap; __u32 cr_flags; /* for use with open */ __u32 cr_mode; struct ll_fid cr_fid; struct ll_fid cr_replayfid; __u64 cr_time; __u64 cr_rdev; __u32 cr_suppgid; __u32 cr_padding_1; /* also fix lustre_swab_mds_rec_create */ __u32 cr_padding_2; /* also fix lustre_swab_mds_rec_create */ __u32 cr_padding_3; /* also fix lustre_swab_mds_rec_create */ __u32 cr_padding_4; /* also fix lustre_swab_mds_rec_create */ __u32 cr_padding_5; /* also fix lustre_swab_mds_rec_create */};extern void lustre_swab_mds_rec_create (struct mds_rec_create *cr);struct mds_rec_join { struct ll_fid jr_fid; __u64 jr_headsize;};extern void lustre_swab_mds_rec_join (struct mds_rec_join *jr);struct mds_rec_link { __u32 lk_opcode; __u32 lk_fsuid; __u32 lk_fsgid; __u32 lk_cap; __u32 lk_suppgid1; __u32 lk_suppgid2; struct ll_fid lk_fid1; struct ll_fid lk_fid2; __u64 lk_time; __u32 lk_padding_1; /* also fix lustre_swab_mds_rec_link */ __u32 lk_padding_2; /* also fix lustre_swab_mds_rec_link */ __u32 lk_padding_3; /* also fix lustre_swab_mds_rec_link */ __u32 lk_padding_4; /* also fix lustre_swab_mds_rec_link */};extern void lustre_swab_mds_rec_link (struct mds_rec_link *lk);struct mds_rec_unlink { __u32 ul_opcode; __u32 ul_fsuid; __u32 ul_fsgid; __u32 ul_cap; __u32 ul_suppgid; __u32 ul_mode; struct ll_fid ul_fid1; struct ll_fid ul_fid2; __u64 ul_time; __u32 ul_padding_1; /* also fix lustre_swab_mds_rec_unlink */ __u32 ul_padding_2; /* also fix lustre_swab_mds_rec_unlink */ __u32 ul_padding_3; /* also fix lustre_swab_mds_rec_unlink */ __u32 ul_padding_4; /* also fix lustre_swab_mds_rec_unlink */};extern void lustre_swab_mds_rec_unlink (struct mds_rec_unlink *ul);struct mds_rec_rename { __u32 rn_opcode; __u32 rn_fsuid; __u32 rn_fsgid; __u32 rn_cap; __u32 rn_suppgid1; __u32 rn_suppgid2; struct ll_fid rn_fid1; struct ll_fid rn_fid2; __u64 rn_time; __u32 rn_padding_1; /* also fix lustre_swab_mds_rec_rename */ __u32 rn_padding_2; /* also fix lustre_swab_mds_rec_rename */ __u32 rn_padding_3; /* also fix lustre_swab_mds_rec_rename */ __u32 rn_padding_4; /* also fix lustre_swab_mds_rec_rename */};extern void lustre_swab_mds_rec_rename (struct mds_rec_rename *rn);/* * LOV data structures */#define LOV_MIN_STRIPE_SIZE 65536 /* maximum PAGE_SIZE (ia64), power of 2 */#define LOV_MAX_STRIPE_COUNT 160 /* until bug 4424 is fixed */#define LOV_MAX_UUID_BUFFER_SIZE 8192/* The size of the buffer the lov/mdc reserves for the * array of UUIDs returned by the MDS. With the current * protocol, this will limit the max number of OSTs per LOV */#define LOV_DESC_MAGIC 0xB0CCDE5C/* LOV settings descriptor (should only contain static info) */struct lov_desc { __u32 ld_tgt_count; /* how many OBD's */ __u32 ld_active_tgt_count; /* how many active */ __u32 ld_default_stripe_count; /* how many objects are used */ __u32 ld_pattern; /* default PATTERN_RAID0 */ __u64 ld_default_stripe_size; /* in bytes */ __u64 ld_default_stripe_offset; /* in bytes */ __u32 ld_padding_0; /* unused */ __u32 ld_qos_maxage; /* in second */ __u32 ld_padding_1; /* also fix lustre_swab_lov_desc */ __u32 ld_padding_2; /* also fix lustre_swab_lov_desc */ struct obd_uuid ld_uuid;};#define ld_magic ld_active_tgt_count /* for swabbing from llogs */extern void lustre_swab_lov_desc (struct lov_desc *ld);/* * LDLM requests: *//* opcodes -- MUST be distinct from OST/MDS opcodes */typedef enum { LDLM_ENQUEUE = 101, LDLM_CONVERT = 102, LDLM_CANCEL = 103, LDLM_BL_CALLBACK = 104, LDLM_CP_CALLBACK = 105, LDLM_GL_CALLBACK = 106, LDLM_LAST_OPC} ldlm_cmd_t;#define LDLM_FIRST_OPC LDLM_ENQUEUE#define RES_NAME_SIZE 4struct ldlm_res_id { __u64 name[RES_NAME_SIZE];};extern void lustre_swab_ldlm_res_id (struct ldlm_res_id *id);/* lock types */typedef enum { LCK_MINMODE = 0, LCK_EX = 1, LCK_PW = 2, LCK_PR = 4, LCK_CW = 8, LCK_CR = 16, LCK_NL = 32, LCK_GROUP = 64, LCK_MAXMODE} ldlm_mode_t;typedef enum { LDLM_PLAIN = 10, LDLM_EXTENT = 11, LDLM_FLOCK = 12, LDLM_IBITS = 13, LDLM_MAX_TYPE} ldlm_type_t;#define LDLM_MIN_TYPE LDLM_PLAINstruct ldlm_extent { __u64 start; __u64 end; __u64 gid;};struct ldlm_inodebits { __u64 bits;};struct ldlm_flock { __u64 start; __u64 end; __u64 blocking_export; /* not actually used over the wire */ __u32 blocking_pid; /* not actually used over the wire */ __u32 pid;};/* it's important that the fields of the ldlm_extent structure match * the first fields of the ldlm_flock structure because there is only * one ldlm_swab routine to process the ldlm_policy_data_t union. if * this ever changes we will need to swab the union differently based * on the resource type. */typedef union { struct ldlm_extent l_extent; struct ldlm_flock l_flock; struct ldlm_inodebits l_inodebits;} ldlm_policy_data_t;extern void lustre_swab_ldlm_policy_data (ldlm_policy_data_t *d);struct ldlm_intent { __u64 opc;};extern void lustre_swab_ldlm_intent (struct ldlm_intent *i);struct ldlm_resource_desc { ldlm_type_t lr_type; __u32 lr_padding; /* also fix lustre_swab_ldlm_resource_desc */ struct ldlm_res_id lr_name;};extern void lustre_swab_ldlm_resource_desc (struct ldlm_resource_desc *r);struct ldlm_lock_desc { struct ldlm_resource_desc l_resource; ldlm_mode_t l_req_mode; ldlm_mode_t l_granted_mode; ldlm_policy_data_t l_policy_data;};extern void lustre_swab_ldlm_lock_desc (struct ldlm_lock_desc *l);#define LDLM_LOCKREQ_HANDLES 2#define LDLM_ENQUEUE_CANCEL_OFF 1struct ldlm_request { __u32 lock_flags; __u32 lock_count; struct ldlm_lock_desc lock_desc; struct lustre_handle lock_handle[LDLM_LOCKREQ_HANDLES];};/* If LDLM_ENQUEUE, 1 slot is already occupied, 1 is available. * Otherwise, 2 are available. */#define ldlm_request_bufsize(count,type) \({ \ int _avail = LDLM_LOCKREQ_HANDLES; \ _avail -= (type == LDLM_ENQUEUE ? LDLM_ENQUEUE_CANCEL_OFF : 0); \ sizeof(struct ldlm_request) + \ (count - _avail > 0 ? count - _avail : 0) * \ sizeof(struct lustre_handle); \})extern void lustre_swab_ldlm_request (struct ldlm_request *rq);struct ldlm_reply { __u32 lock_flags; __u32 lock_padding; /* also fix lustre_swab_ldlm_reply */ struct ldlm_lock_desc lock_desc; struct lustre_handle lock_handle; __u64 lock_policy_res1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -