diff options
Diffstat (limited to 'xlators/cluster/ec/src')
-rw-r--r-- | xlators/cluster/ec/src/ec-code-c.h | 13 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-code-intel.h | 167 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-combine.h | 38 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-common.h | 239 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-data.h | 29 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-fops.h | 424 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-galois.h | 18 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-heald.h | 4 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-helpers.h | 234 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-mem-types.h | 3 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-messages.h | 111 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-method.h | 5 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-types.h | 773 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec.h | 16 |
14 files changed, 1056 insertions, 1018 deletions
diff --git a/xlators/cluster/ec/src/ec-code-c.h b/xlators/cluster/ec/src/ec-code-c.h index 92e8070e514..42b5a064eb8 100644 --- a/xlators/cluster/ec/src/ec-code-c.h +++ b/xlators/cluster/ec/src/ec-code-c.h @@ -13,12 +13,15 @@ #include "ec-types.h" -void ec_code_c_prepare(ec_gf_t *gf, uint32_t *values, uint32_t count); +void +ec_code_c_prepare(ec_gf_t *gf, uint32_t *values, uint32_t count); -void ec_code_c_linear(void *dst, void *src, uint64_t offset, uint32_t *values, - uint32_t count); +void +ec_code_c_linear(void *dst, void *src, uint64_t offset, uint32_t *values, + uint32_t count); -void ec_code_c_interleaved(void *dst, void **src, uint64_t offset, - uint32_t *values, uint32_t count); +void +ec_code_c_interleaved(void *dst, void **src, uint64_t offset, uint32_t *values, + uint32_t count); #endif /* __EC_CODE_C_H__ */ diff --git a/xlators/cluster/ec/src/ec-code-intel.h b/xlators/cluster/ec/src/ec-code-intel.h index 903d023f962..3fa4a174765 100644 --- a/xlators/cluster/ec/src/ec-code-intel.h +++ b/xlators/cluster/ec/src/ec-code-intel.h @@ -76,109 +76,116 @@ enum _ec_code_vex_opcode { struct _ec_code_intel_buffer { uint32_t bytes; union { - uint8_t data[4]; + uint8_t data[4]; uint32_t value; }; }; struct _ec_code_intel_sib { gf_boolean_t present; - uint32_t base; - uint32_t index; - uint32_t scale; + uint32_t base; + uint32_t index; + uint32_t scale; }; struct _ec_code_intel_modrm { gf_boolean_t present; - uint32_t mod; - uint32_t rm; - uint32_t reg; + uint32_t mod; + uint32_t rm; + uint32_t reg; }; struct _ec_code_intel_rex { gf_boolean_t present; - uint32_t w; - uint32_t r; - uint32_t x; - uint32_t b; + uint32_t w; + uint32_t r; + uint32_t x; + uint32_t b; }; struct _ec_code_intel { - gf_boolean_t invalid; + gf_boolean_t invalid; ec_code_intel_buffer_t prefix; ec_code_intel_buffer_t opcode; ec_code_intel_buffer_t offset; ec_code_intel_buffer_t immediate; ec_code_intel_buffer_t vex; - ec_code_intel_rex_t rex; - ec_code_intel_modrm_t modrm; - ec_code_intel_sib_t sib; - uint32_t reg; + ec_code_intel_rex_t rex; + ec_code_intel_modrm_t modrm; + ec_code_intel_sib_t sib; + uint32_t reg; }; -void ec_code_intel_op_push_r(ec_code_builder_t *builder, - ec_code_intel_reg_t reg); -void ec_code_intel_op_pop_r(ec_code_builder_t *builder, - ec_code_intel_reg_t reg); -void ec_code_intel_op_ret(ec_code_builder_t *builder, uint32_t size); - -void ec_code_intel_op_mov_r2r(ec_code_builder_t *builder, - ec_code_intel_reg_t src, - ec_code_intel_reg_t dst); -void ec_code_intel_op_mov_r2m(ec_code_builder_t *builder, - ec_code_intel_reg_t src, - ec_code_intel_reg_t base, - ec_code_intel_reg_t index, uint32_t scale, - int32_t offset); -void ec_code_intel_op_mov_m2r(ec_code_builder_t *builder, - ec_code_intel_reg_t base, - ec_code_intel_reg_t index, uint32_t scale, - int32_t offset, ec_code_intel_reg_t dst); -void ec_code_intel_op_xor_r2r(ec_code_builder_t *builder, - ec_code_intel_reg_t src, - ec_code_intel_reg_t dst); -void ec_code_intel_op_xor_m2r(ec_code_builder_t *builder, - ec_code_intel_reg_t base, - ec_code_intel_reg_t index, uint32_t scale, - int32_t offset, ec_code_intel_reg_t dst); -void ec_code_intel_op_add_i2r(ec_code_builder_t *builder, int32_t value, - ec_code_intel_reg_t reg); -void ec_code_intel_op_test_i2r(ec_code_builder_t *builder, uint32_t value, - ec_code_intel_reg_t reg); -void ec_code_intel_op_jne(ec_code_builder_t *builder, uint32_t address); - -void ec_code_intel_op_mov_sse2sse(ec_code_builder_t *builder, uint32_t src, - uint32_t dst); -void ec_code_intel_op_mov_sse2m(ec_code_builder_t *builder, uint32_t src, - ec_code_intel_reg_t base, - ec_code_intel_reg_t index, uint32_t scale, - int32_t offset); -void ec_code_intel_op_mov_m2sse(ec_code_builder_t *builder, - ec_code_intel_reg_t base, - ec_code_intel_reg_t index, uint32_t scale, - int32_t offset, uint32_t dst); -void ec_code_intel_op_xor_sse2sse(ec_code_builder_t *builder, uint32_t src, - uint32_t dst); -void ec_code_intel_op_xor_m2sse(ec_code_builder_t *builder, - ec_code_intel_reg_t base, - ec_code_intel_reg_t index, uint32_t scale, - int32_t offset, uint32_t dst); - -void ec_code_intel_op_mov_avx2avx(ec_code_builder_t *builder, uint32_t src, - uint32_t dst); -void ec_code_intel_op_mov_avx2m(ec_code_builder_t *builder, uint32_t src, - ec_code_intel_reg_t base, - ec_code_intel_reg_t index, uint32_t scale, - int32_t offset); -void ec_code_intel_op_mov_m2avx(ec_code_builder_t *builder, - ec_code_intel_reg_t base, - ec_code_intel_reg_t index, uint32_t scale, - int32_t offset, uint32_t dst); -void ec_code_intel_op_xor_avx2avx(ec_code_builder_t *builder, uint32_t src, - uint32_t dst); -void ec_code_intel_op_xor_m2avx(ec_code_builder_t *builder, - ec_code_intel_reg_t base, - ec_code_intel_reg_t index, uint32_t scale, - int32_t offset, uint32_t dst); +void +ec_code_intel_op_push_r(ec_code_builder_t *builder, ec_code_intel_reg_t reg); +void +ec_code_intel_op_pop_r(ec_code_builder_t *builder, ec_code_intel_reg_t reg); +void +ec_code_intel_op_ret(ec_code_builder_t *builder, uint32_t size); + +void +ec_code_intel_op_mov_r2r(ec_code_builder_t *builder, ec_code_intel_reg_t src, + ec_code_intel_reg_t dst); +void +ec_code_intel_op_mov_r2m(ec_code_builder_t *builder, ec_code_intel_reg_t src, + ec_code_intel_reg_t base, ec_code_intel_reg_t index, + uint32_t scale, int32_t offset); +void +ec_code_intel_op_mov_m2r(ec_code_builder_t *builder, ec_code_intel_reg_t base, + ec_code_intel_reg_t index, uint32_t scale, + int32_t offset, ec_code_intel_reg_t dst); +void +ec_code_intel_op_xor_r2r(ec_code_builder_t *builder, ec_code_intel_reg_t src, + ec_code_intel_reg_t dst); +void +ec_code_intel_op_xor_m2r(ec_code_builder_t *builder, ec_code_intel_reg_t base, + ec_code_intel_reg_t index, uint32_t scale, + int32_t offset, ec_code_intel_reg_t dst); +void +ec_code_intel_op_add_i2r(ec_code_builder_t *builder, int32_t value, + ec_code_intel_reg_t reg); +void +ec_code_intel_op_test_i2r(ec_code_builder_t *builder, uint32_t value, + ec_code_intel_reg_t reg); +void +ec_code_intel_op_jne(ec_code_builder_t *builder, uint32_t address); + +void +ec_code_intel_op_mov_sse2sse(ec_code_builder_t *builder, uint32_t src, + uint32_t dst); +void +ec_code_intel_op_mov_sse2m(ec_code_builder_t *builder, uint32_t src, + ec_code_intel_reg_t base, ec_code_intel_reg_t index, + uint32_t scale, int32_t offset); +void +ec_code_intel_op_mov_m2sse(ec_code_builder_t *builder, ec_code_intel_reg_t base, + ec_code_intel_reg_t index, uint32_t scale, + int32_t offset, uint32_t dst); +void +ec_code_intel_op_xor_sse2sse(ec_code_builder_t *builder, uint32_t src, + uint32_t dst); +void +ec_code_intel_op_xor_m2sse(ec_code_builder_t *builder, ec_code_intel_reg_t base, + ec_code_intel_reg_t index, uint32_t scale, + int32_t offset, uint32_t dst); + +void +ec_code_intel_op_mov_avx2avx(ec_code_builder_t *builder, uint32_t src, + uint32_t dst); +void +ec_code_intel_op_mov_avx2m(ec_code_builder_t *builder, uint32_t src, + ec_code_intel_reg_t base, ec_code_intel_reg_t index, + uint32_t scale, int32_t offset); +void +ec_code_intel_op_mov_m2avx(ec_code_builder_t *builder, ec_code_intel_reg_t base, + ec_code_intel_reg_t index, uint32_t scale, + int32_t offset, uint32_t dst); +void +ec_code_intel_op_xor_avx2avx(ec_code_builder_t *builder, uint32_t src, + uint32_t dst); +void +ec_code_intel_op_xor_m2avx(ec_code_builder_t *builder, ec_code_intel_reg_t base, + ec_code_intel_reg_t index, uint32_t scale, + int32_t offset, uint32_t dst); #endif /* __EC_CODE_INTEL_H__ */ diff --git a/xlators/cluster/ec/src/ec-combine.h b/xlators/cluster/ec/src/ec-combine.h index 19a42ded706..1010cc3be26 100644 --- a/xlators/cluster/ec/src/ec-combine.h +++ b/xlators/cluster/ec/src/ec-combine.h @@ -11,28 +11,34 @@ #ifndef __EC_COMBINE_H__ #define __EC_COMBINE_H__ -#define EC_COMBINE_DICT 0 +#define EC_COMBINE_DICT 0 #define EC_COMBINE_XDATA 1 -typedef int32_t (* ec_combine_f)(ec_fop_data_t * fop, ec_cbk_data_t * dst, - ec_cbk_data_t * src); +typedef int32_t (*ec_combine_f)(ec_fop_data_t *fop, ec_cbk_data_t *dst, + ec_cbk_data_t *src); -void ec_iatt_rebuild(ec_t * ec, struct iatt * iatt, int32_t count, - int32_t answers); +void +ec_iatt_rebuild(ec_t *ec, struct iatt *iatt, int32_t count, int32_t answers); -int32_t ec_iatt_combine(ec_fop_data_t *fop, struct iatt *dst, struct iatt *src, - int32_t count); -int32_t ec_dict_compare(dict_t * dict1, dict_t * dict2); -int32_t ec_vector_compare(struct iovec * dst_vector, int32_t dst_count, - struct iovec * src_vector, int32_t src_count); -int32_t ec_flock_compare(struct gf_flock * dst, struct gf_flock * src); -void ec_statvfs_combine(struct statvfs * dst, struct statvfs * src); +int32_t +ec_iatt_combine(ec_fop_data_t *fop, struct iatt *dst, struct iatt *src, + int32_t count); +int32_t +ec_dict_compare(dict_t *dict1, dict_t *dict2); +int32_t +ec_vector_compare(struct iovec *dst_vector, int32_t dst_count, + struct iovec *src_vector, int32_t src_count); +int32_t +ec_flock_compare(struct gf_flock *dst, struct gf_flock *src); +void +ec_statvfs_combine(struct statvfs *dst, struct statvfs *src); -int32_t ec_dict_combine(ec_cbk_data_t * cbk, int32_t which); +int32_t +ec_dict_combine(ec_cbk_data_t *cbk, int32_t which); -void ec_combine(ec_cbk_data_t * cbk, ec_combine_f combine); +void +ec_combine(ec_cbk_data_t *cbk, ec_combine_f combine); int32_t -ec_combine_write (ec_fop_data_t *fop, ec_cbk_data_t *dst, - ec_cbk_data_t *src); +ec_combine_write(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src); #endif /* __EC_COMBINE_H__ */ diff --git a/xlators/cluster/ec/src/ec-common.h b/xlators/cluster/ec/src/ec-common.h index a92752952ad..bea0c045a47 100644 --- a/xlators/cluster/ec/src/ec-common.h +++ b/xlators/cluster/ec/src/ec-common.h @@ -15,29 +15,26 @@ #include "ec-data.h" -typedef enum { - EC_DATA_TXN, - EC_METADATA_TXN -} ec_txn_t; +typedef enum { EC_DATA_TXN, EC_METADATA_TXN } ec_txn_t; -#define EC_FOP_HEAL -1 -#define EC_FOP_FHEAL -2 +#define EC_FOP_HEAL -1 +#define EC_FOP_FHEAL -2 #define EC_CONFIG_VERSION 0 #define EC_CONFIG_ALGORITHM 0 -#define EC_FLAG_LOCK_SHARED 0x0001 +#define EC_FLAG_LOCK_SHARED 0x0001 enum _ec_xattrop_flags { - EC_FLAG_XATTROP, - EC_FLAG_DATA_DIRTY, - EC_FLAG_METADATA_DIRTY, + EC_FLAG_XATTROP, + EC_FLAG_DATA_DIRTY, + EC_FLAG_METADATA_DIRTY, - /* Add any new flag here, before EC_FLAG_MAX. The maximum number of - * flags that can be defined is 16. */ + /* Add any new flag here, before EC_FLAG_MAX. The maximum number of + * flags that can be defined is 16. */ - EC_FLAG_MAX + EC_FLAG_MAX }; /* We keep two sets of flags. One to determine what's really providing the @@ -57,57 +54,63 @@ enum _ec_xattrop_flags { #define EC_SELFHEAL_BIT 62 -#define EC_MINIMUM_ONE -1 -#define EC_MINIMUM_MIN -2 -#define EC_MINIMUM_ALL -3 - -#define EC_UPDATE_DATA 1 -#define EC_UPDATE_META 2 -#define EC_QUERY_INFO 4 -#define EC_INODE_SIZE 8 - -#define EC_STATE_START 0 -#define EC_STATE_END 0 -#define EC_STATE_INIT 1 -#define EC_STATE_LOCK 2 -#define EC_STATE_DISPATCH 3 -#define EC_STATE_PREPARE_ANSWER 4 -#define EC_STATE_REPORT 5 -#define EC_STATE_LOCK_REUSE 6 -#define EC_STATE_UNLOCK 7 - -#define EC_STATE_DELAYED_START 100 - -#define EC_STATE_HEAL_ENTRY_LOOKUP 200 -#define EC_STATE_HEAL_ENTRY_PREPARE 201 -#define EC_STATE_HEAL_PRE_INODELK_LOCK 202 -#define EC_STATE_HEAL_PRE_INODE_LOOKUP 203 -#define EC_STATE_HEAL_XATTRIBUTES_REMOVE 204 -#define EC_STATE_HEAL_XATTRIBUTES_SET 205 -#define EC_STATE_HEAL_ATTRIBUTES 206 -#define EC_STATE_HEAL_OPEN 207 -#define EC_STATE_HEAL_REOPEN_FD 208 -#define EC_STATE_HEAL_UNLOCK 209 -#define EC_STATE_HEAL_UNLOCK_ENTRY 210 -#define EC_STATE_HEAL_DATA_LOCK 211 -#define EC_STATE_HEAL_DATA_COPY 212 -#define EC_STATE_HEAL_DATA_UNLOCK 213 -#define EC_STATE_HEAL_POST_INODELK_LOCK 214 -#define EC_STATE_HEAL_POST_INODE_LOOKUP 215 -#define EC_STATE_HEAL_SETATTR 216 -#define EC_STATE_HEAL_POST_INODELK_UNLOCK 217 -#define EC_STATE_HEAL_DISPATCH 218 - -gf_boolean_t ec_dispatch_one_retry (ec_fop_data_t *fop, ec_cbk_data_t **cbk); -void ec_dispatch_next(ec_fop_data_t * fop, uint32_t idx); - -void ec_complete(ec_fop_data_t *fop); - -void ec_update_good(ec_fop_data_t *fop, uintptr_t good); - -void ec_fop_set_error(ec_fop_data_t *fop, int32_t error); - -void __ec_fop_set_error(ec_fop_data_t *fop, int32_t error); +#define EC_MINIMUM_ONE -1 +#define EC_MINIMUM_MIN -2 +#define EC_MINIMUM_ALL -3 + +#define EC_UPDATE_DATA 1 +#define EC_UPDATE_META 2 +#define EC_QUERY_INFO 4 +#define EC_INODE_SIZE 8 + +#define EC_STATE_START 0 +#define EC_STATE_END 0 +#define EC_STATE_INIT 1 +#define EC_STATE_LOCK 2 +#define EC_STATE_DISPATCH 3 +#define EC_STATE_PREPARE_ANSWER 4 +#define EC_STATE_REPORT 5 +#define EC_STATE_LOCK_REUSE 6 +#define EC_STATE_UNLOCK 7 + +#define EC_STATE_DELAYED_START 100 + +#define EC_STATE_HEAL_ENTRY_LOOKUP 200 +#define EC_STATE_HEAL_ENTRY_PREPARE 201 +#define EC_STATE_HEAL_PRE_INODELK_LOCK 202 +#define EC_STATE_HEAL_PRE_INODE_LOOKUP 203 +#define EC_STATE_HEAL_XATTRIBUTES_REMOVE 204 +#define EC_STATE_HEAL_XATTRIBUTES_SET 205 +#define EC_STATE_HEAL_ATTRIBUTES 206 +#define EC_STATE_HEAL_OPEN 207 +#define EC_STATE_HEAL_REOPEN_FD 208 +#define EC_STATE_HEAL_UNLOCK 209 +#define EC_STATE_HEAL_UNLOCK_ENTRY 210 +#define EC_STATE_HEAL_DATA_LOCK 211 +#define EC_STATE_HEAL_DATA_COPY 212 +#define EC_STATE_HEAL_DATA_UNLOCK 213 +#define EC_STATE_HEAL_POST_INODELK_LOCK 214 +#define EC_STATE_HEAL_POST_INODE_LOOKUP 215 +#define EC_STATE_HEAL_SETATTR 216 +#define EC_STATE_HEAL_POST_INODELK_UNLOCK 217 +#define EC_STATE_HEAL_DISPATCH 218 + +gf_boolean_t +ec_dispatch_one_retry(ec_fop_data_t *fop, ec_cbk_data_t **cbk); +void +ec_dispatch_next(ec_fop_data_t *fop, uint32_t idx); + +void +ec_complete(ec_fop_data_t *fop); + +void +ec_update_good(ec_fop_data_t *fop, uintptr_t good); + +void +ec_fop_set_error(ec_fop_data_t *fop, int32_t error); + +void +__ec_fop_set_error(ec_fop_data_t *fop, int32_t error); ec_cbk_data_t * ec_fop_prepare_answer(ec_fop_data_t *fop, gf_boolean_t ro); @@ -115,55 +118,73 @@ ec_fop_prepare_answer(ec_fop_data_t *fop, gf_boolean_t ro); gf_boolean_t ec_cbk_set_error(ec_cbk_data_t *cbk, int32_t error, gf_boolean_t ro); -void ec_lock_prepare_inode(ec_fop_data_t *fop, loc_t *loc, uint32_t flags, - off_t fl_start, size_t fl_size); -void ec_lock_prepare_parent_inode(ec_fop_data_t *fop, loc_t *loc, loc_t *base, - uint32_t flags); -void ec_lock_prepare_fd(ec_fop_data_t *fop, fd_t *fd, uint32_t flags, - off_t fl_start, size_t fl_size); -void ec_lock(ec_fop_data_t * fop); -void ec_lock_reuse(ec_fop_data_t *fop); -void ec_unlock(ec_fop_data_t * fop); -void ec_lock_release(ec_t *ec, inode_t *inode); - -gf_boolean_t ec_get_inode_size(ec_fop_data_t *fop, inode_t *inode, - uint64_t *size); -gf_boolean_t __ec_get_inode_size(ec_fop_data_t *fop, inode_t *inode, - uint64_t *size); -gf_boolean_t ec_set_inode_size(ec_fop_data_t *fop, inode_t *inode, - uint64_t size); -gf_boolean_t __ec_set_inode_size(ec_fop_data_t *fop, inode_t *inode, - uint64_t size); -void ec_clear_inode_info(ec_fop_data_t *fop, inode_t *inode); - -void ec_flush_size_version(ec_fop_data_t * fop); - -void ec_dispatch_all(ec_fop_data_t * fop); -void ec_dispatch_inc(ec_fop_data_t * fop); -void ec_dispatch_min(ec_fop_data_t * fop); -void ec_dispatch_one(ec_fop_data_t * fop); - -void ec_sleep(ec_fop_data_t *fop); -void ec_resume(ec_fop_data_t * fop, int32_t error); -void ec_resume_parent(ec_fop_data_t * fop, int32_t error); - -void ec_manager(ec_fop_data_t * fop, int32_t error); -gf_boolean_t ec_is_recoverable_error (int32_t op_errno); -void ec_handle_healers_done (ec_fop_data_t *fop); +void +ec_lock_prepare_inode(ec_fop_data_t *fop, loc_t *loc, uint32_t flags, + off_t fl_start, size_t fl_size); +void +ec_lock_prepare_parent_inode(ec_fop_data_t *fop, loc_t *loc, loc_t *base, + uint32_t flags); +void +ec_lock_prepare_fd(ec_fop_data_t *fop, fd_t *fd, uint32_t flags, off_t fl_start, + size_t fl_size); +void +ec_lock(ec_fop_data_t *fop); +void +ec_lock_reuse(ec_fop_data_t *fop); +void +ec_unlock(ec_fop_data_t *fop); +void +ec_lock_release(ec_t *ec, inode_t *inode); + +gf_boolean_t +ec_get_inode_size(ec_fop_data_t *fop, inode_t *inode, uint64_t *size); +gf_boolean_t +__ec_get_inode_size(ec_fop_data_t *fop, inode_t *inode, uint64_t *size); +gf_boolean_t +ec_set_inode_size(ec_fop_data_t *fop, inode_t *inode, uint64_t size); +gf_boolean_t +__ec_set_inode_size(ec_fop_data_t *fop, inode_t *inode, uint64_t size); +void +ec_clear_inode_info(ec_fop_data_t *fop, inode_t *inode); + +void +ec_flush_size_version(ec_fop_data_t *fop); + +void +ec_dispatch_all(ec_fop_data_t *fop); +void +ec_dispatch_inc(ec_fop_data_t *fop); +void +ec_dispatch_min(ec_fop_data_t *fop); +void +ec_dispatch_one(ec_fop_data_t *fop); + +void +ec_sleep(ec_fop_data_t *fop); +void +ec_resume(ec_fop_data_t *fop, int32_t error); +void +ec_resume_parent(ec_fop_data_t *fop, int32_t error); + +void +ec_manager(ec_fop_data_t *fop, int32_t error); +gf_boolean_t +ec_is_recoverable_error(int32_t op_errno); +void +ec_handle_healers_done(ec_fop_data_t *fop); int32_t -ec_heal_inspect (call_frame_t *frame, ec_t *ec, - inode_t *inode, unsigned char *locked_on, - gf_boolean_t self_locked, gf_boolean_t thorough, - ec_heal_need_t *need_heal); +ec_heal_inspect(call_frame_t *frame, ec_t *ec, inode_t *inode, + unsigned char *locked_on, gf_boolean_t self_locked, + gf_boolean_t thorough, ec_heal_need_t *need_heal); int32_t -ec_get_heal_info (xlator_t *this, loc_t *loc, dict_t **dict); +ec_get_heal_info(xlator_t *this, loc_t *loc, dict_t **dict); -int32_t ec_lock_unlocked(call_frame_t *frame, void *cookie, - xlator_t *this, int32_t op_ret, int32_t op_errno, - dict_t *xdata); +int32_t +ec_lock_unlocked(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *xdata); void -ec_update_fd_status (fd_t *fd, xlator_t *xl, - int child_index, int32_t ret_status); +ec_update_fd_status(fd_t *fd, xlator_t *xl, int child_index, + int32_t ret_status); #endif /* __EC_COMMON_H__ */ diff --git a/xlators/cluster/ec/src/ec-data.h b/xlators/cluster/ec/src/ec-data.h index 965bc1e25ef..112536d554c 100644 --- a/xlators/cluster/ec/src/ec-data.h +++ b/xlators/cluster/ec/src/ec-data.h @@ -13,20 +13,23 @@ #include "ec-types.h" -ec_cbk_data_t * ec_cbk_data_allocate(call_frame_t * frame, xlator_t * this, - ec_fop_data_t * fop, int32_t id, - int32_t idx, int32_t op_ret, - int32_t op_errno); -ec_fop_data_t * ec_fop_data_allocate(call_frame_t * frame, xlator_t * this, - int32_t id, uint32_t flags, - uintptr_t target, int32_t minimum, - ec_wind_f wind, ec_handler_f handler, - ec_cbk_t cbks, void * data); -void ec_fop_data_acquire(ec_fop_data_t * fop); -void ec_fop_data_release(ec_fop_data_t * fop); +ec_cbk_data_t * +ec_cbk_data_allocate(call_frame_t *frame, xlator_t *this, ec_fop_data_t *fop, + int32_t id, int32_t idx, int32_t op_ret, int32_t op_errno); +ec_fop_data_t * +ec_fop_data_allocate(call_frame_t *frame, xlator_t *this, int32_t id, + uint32_t flags, uintptr_t target, int32_t minimum, + ec_wind_f wind, ec_handler_f handler, ec_cbk_t cbks, + void *data); +void +ec_fop_data_acquire(ec_fop_data_t *fop); +void +ec_fop_data_release(ec_fop_data_t *fop); -void ec_fop_cleanup(ec_fop_data_t *fop); +void +ec_fop_cleanup(ec_fop_data_t *fop); -void ec_pending_fops_completed(ec_t *ec); +void +ec_pending_fops_completed(ec_t *ec); #endif /* __EC_DATA_H__ */ diff --git a/xlators/cluster/ec/src/ec-fops.h b/xlators/cluster/ec/src/ec-fops.h index 4a926cf4802..2858d829c73 100644 --- a/xlators/cluster/ec/src/ec-fops.h +++ b/xlators/cluster/ec/src/ec-fops.h @@ -16,199 +16,235 @@ #include "ec-types.h" #include "ec-common.h" -void ec_access(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_access_cbk_t func, void *data, loc_t * loc, - int32_t mask, dict_t * xdata); - -void ec_create(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_create_cbk_t func, void *data, loc_t * loc, - int32_t flags, mode_t mode, mode_t umask, fd_t * fd, - dict_t * xdata); - -void ec_entrylk(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_entrylk_cbk_t func, void *data, - const char * volume, loc_t * loc, const char * basename, - entrylk_cmd cmd, entrylk_type type, dict_t * xdata); - -void ec_fentrylk(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_fentrylk_cbk_t func, void *data, - const char * volume, fd_t * fd, const char * basename, - entrylk_cmd cmd, entrylk_type type, dict_t * xdata); - -void ec_flush(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_flush_cbk_t func, void *data, fd_t * fd, - dict_t * xdata); - -void ec_fsync(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_fsync_cbk_t func, void *data, fd_t * fd, - int32_t datasync, dict_t * xdata); - -void ec_fsyncdir(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_fsyncdir_cbk_t func, void *data, - fd_t * fd, int32_t datasync, dict_t * xdata); - -void ec_getxattr(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_getxattr_cbk_t func, void *data, - loc_t * loc, const char * name, dict_t * xdata); - -void ec_fgetxattr(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_fgetxattr_cbk_t func, void *data, - fd_t * fd, const char * name, dict_t * xdata); - -void ec_heal(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_heal_cbk_t func, void *data, loc_t * loc, - int32_t partial, dict_t *xdata); - -void ec_fheal(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_fheal_cbk_t func, void *data, fd_t * fd, - int32_t partial, dict_t *xdata); - -void ec_inodelk (call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner, - uintptr_t target, int32_t minimum, fop_inodelk_cbk_t func, - void *data, const char *volume, loc_t *loc, int32_t cmd, - struct gf_flock * flock, dict_t * xdata); - -void ec_finodelk(call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner, - uintptr_t target, int32_t minimum, fop_finodelk_cbk_t func, - void *data, const char *volume, fd_t *fd, int32_t cmd, - struct gf_flock *flock, dict_t *xdata); - -void ec_link(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_link_cbk_t func, void *data, loc_t * oldloc, - loc_t * newloc, dict_t * xdata); - -void ec_lk(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_lk_cbk_t func, void *data, fd_t * fd, - int32_t cmd, struct gf_flock * flock, dict_t * xdata); - -void ec_lookup(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_lookup_cbk_t func, void *data, loc_t * loc, - dict_t * xdata); - -void ec_mkdir(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_mkdir_cbk_t func, void *data, loc_t * loc, - mode_t mode, mode_t umask, dict_t * xdata); - -void ec_mknod(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_mknod_cbk_t func, void *data, loc_t * loc, - mode_t mode, dev_t rdev, mode_t umask, dict_t * xdata); - -void ec_open(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_open_cbk_t func, void *data, loc_t * loc, - int32_t flags, fd_t * fd, dict_t * xdata); - -void ec_opendir(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_opendir_cbk_t func, void *data, - loc_t * loc, fd_t * fd, dict_t * xdata); - -void ec_readdir(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_readdir_cbk_t func, void *data, fd_t * fd, - size_t size, off_t offset, dict_t * xdata); - -void ec_readdirp(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_readdirp_cbk_t func, void *data, - fd_t * fd, size_t size, off_t offset, dict_t * xdata); - -void ec_readlink(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_readlink_cbk_t func, void *data, - loc_t * loc, size_t size, dict_t * xdata); - -void ec_readv(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_readv_cbk_t func, void *data, fd_t * fd, - size_t size, off_t offset, uint32_t flags, dict_t * xdata); - -void ec_removexattr(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_removexattr_cbk_t func, void *data, - loc_t * loc, const char * name, dict_t * xdata); - -void ec_fremovexattr(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_fremovexattr_cbk_t func, void *data, - fd_t * fd, const char * name, dict_t * xdata); - -void ec_rename(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_rename_cbk_t func, void *data, - loc_t * oldloc, loc_t * newloc, dict_t * xdata); - -void ec_rmdir(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_rmdir_cbk_t func, void *data, loc_t * loc, - int xflags, dict_t * xdata); - -void ec_setattr(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_setattr_cbk_t func, void *data, - loc_t * loc, struct iatt * stbuf, int32_t valid, - dict_t * xdata); - -void ec_fsetattr(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_fsetattr_cbk_t func, void *data, - fd_t * fd, struct iatt * stbuf, int32_t valid, - dict_t * xdata); - -void ec_setxattr(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_setxattr_cbk_t func, void *data, - loc_t * loc, dict_t * dict, int32_t flags, dict_t * xdata); - -void ec_fsetxattr(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_fsetxattr_cbk_t func, void *data, - fd_t * fd, dict_t * dict, int32_t flags, dict_t * xdata); - -void ec_stat(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_stat_cbk_t func, void *data, loc_t * loc, - dict_t * xdata); - -void ec_fstat(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_fstat_cbk_t func, void *data, fd_t * fd, - dict_t * xdata); - -void ec_statfs(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_statfs_cbk_t func, void *data, loc_t * loc, - dict_t * xdata); - -void ec_symlink(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_symlink_cbk_t func, void *data, - const char * linkname, loc_t * loc, mode_t umask, - dict_t * xdata); - -void ec_fallocate(call_frame_t *frame, xlator_t *this, uintptr_t target, - int32_t minimum, fop_fallocate_cbk_t func, void *data, fd_t *fd, - int32_t mode, off_t offset, size_t len, dict_t *xdata); - -void ec_discard(call_frame_t *frame, xlator_t *this, uintptr_t target, - int32_t minimum, fop_discard_cbk_t func, void *data, fd_t *fd, - off_t offset, size_t len, dict_t *xdata); - -void ec_truncate(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_truncate_cbk_t func, void *data, - loc_t * loc, off_t offset, dict_t * xdata); - -void ec_ftruncate(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_ftruncate_cbk_t func, void *data, - fd_t * fd, off_t offset, dict_t * xdata); - -void ec_unlink(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_unlink_cbk_t func, void *data, loc_t * loc, - int xflags, dict_t * xdata); - -void ec_writev(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_writev_cbk_t func, void *data, fd_t * fd, - struct iovec * vector, int32_t count, off_t offset, - uint32_t flags, struct iobref * iobref, dict_t * xdata); - -void ec_xattrop(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_xattrop_cbk_t func, void *data, - loc_t * loc, gf_xattrop_flags_t optype, dict_t * xattr, - dict_t * xdata); - -void ec_fxattrop(call_frame_t * frame, xlator_t * this, uintptr_t target, - int32_t minimum, fop_fxattrop_cbk_t func, void *data, - fd_t * fd, gf_xattrop_flags_t optype, dict_t * xattr, - dict_t * xdata); - -void ec_seek(call_frame_t *frame, xlator_t *this, uintptr_t target, - int32_t minimum, fop_seek_cbk_t func, void *data, fd_t *fd, - off_t offset, gf_seek_what_t what, dict_t *xdata); - -void ec_ipc(call_frame_t *frame, xlator_t *this, uintptr_t target, - int32_t minimum, fop_ipc_cbk_t func, void *data, int32_t op, - dict_t *xdata); +void +ec_access(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_access_cbk_t func, void *data, loc_t *loc, + int32_t mask, dict_t *xdata); + +void +ec_create(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_create_cbk_t func, void *data, loc_t *loc, + int32_t flags, mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata); + +void +ec_entrylk(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_entrylk_cbk_t func, void *data, + const char *volume, loc_t *loc, const char *basename, + entrylk_cmd cmd, entrylk_type type, dict_t *xdata); + +void +ec_fentrylk(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_fentrylk_cbk_t func, void *data, + const char *volume, fd_t *fd, const char *basename, entrylk_cmd cmd, + entrylk_type type, dict_t *xdata); + +void +ec_flush(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_flush_cbk_t func, void *data, fd_t *fd, dict_t *xdata); + +void +ec_fsync(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_fsync_cbk_t func, void *data, fd_t *fd, int32_t datasync, + dict_t *xdata); + +void +ec_fsyncdir(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_fsyncdir_cbk_t func, void *data, fd_t *fd, + int32_t datasync, dict_t *xdata); + +void +ec_getxattr(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_getxattr_cbk_t func, void *data, loc_t *loc, + const char *name, dict_t *xdata); + +void +ec_fgetxattr(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_fgetxattr_cbk_t func, void *data, fd_t *fd, + const char *name, dict_t *xdata); + +void +ec_heal(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_heal_cbk_t func, void *data, loc_t *loc, int32_t partial, + dict_t *xdata); + +void +ec_fheal(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_fheal_cbk_t func, void *data, fd_t *fd, int32_t partial, + dict_t *xdata); + +void +ec_inodelk(call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner, + uintptr_t target, int32_t minimum, fop_inodelk_cbk_t func, + void *data, const char *volume, loc_t *loc, int32_t cmd, + struct gf_flock *flock, dict_t *xdata); + +void +ec_finodelk(call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner, + uintptr_t target, int32_t minimum, fop_finodelk_cbk_t func, + void *data, const char *volume, fd_t *fd, int32_t cmd, + struct gf_flock *flock, dict_t *xdata); + +void +ec_link(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_link_cbk_t func, void *data, loc_t *oldloc, loc_t *newloc, + dict_t *xdata); + +void +ec_lk(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_lk_cbk_t func, void *data, fd_t *fd, int32_t cmd, + struct gf_flock *flock, dict_t *xdata); + +void +ec_lookup(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_lookup_cbk_t func, void *data, loc_t *loc, + dict_t *xdata); + +void +ec_mkdir(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_mkdir_cbk_t func, void *data, loc_t *loc, mode_t mode, + mode_t umask, dict_t *xdata); + +void +ec_mknod(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_mknod_cbk_t func, void *data, loc_t *loc, mode_t mode, dev_t rdev, + mode_t umask, dict_t *xdata); + +void +ec_open(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_open_cbk_t func, void *data, loc_t *loc, int32_t flags, fd_t *fd, + dict_t *xdata); + +void +ec_opendir(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_opendir_cbk_t func, void *data, loc_t *loc, + fd_t *fd, dict_t *xdata); + +void +ec_readdir(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_readdir_cbk_t func, void *data, fd_t *fd, + size_t size, off_t offset, dict_t *xdata); + +void +ec_readdirp(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_readdirp_cbk_t func, void *data, fd_t *fd, + size_t size, off_t offset, dict_t *xdata); + +void +ec_readlink(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_readlink_cbk_t func, void *data, loc_t *loc, + size_t size, dict_t *xdata); + +void +ec_readv(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_readv_cbk_t func, void *data, fd_t *fd, size_t size, off_t offset, + uint32_t flags, dict_t *xdata); + +void +ec_removexattr(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_removexattr_cbk_t func, void *data, + loc_t *loc, const char *name, dict_t *xdata); + +void +ec_fremovexattr(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_fremovexattr_cbk_t func, void *data, + fd_t *fd, const char *name, dict_t *xdata); + +void +ec_rename(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_rename_cbk_t func, void *data, loc_t *oldloc, + loc_t *newloc, dict_t *xdata); + +void +ec_rmdir(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_rmdir_cbk_t func, void *data, loc_t *loc, int xflags, + dict_t *xdata); + +void +ec_setattr(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_setattr_cbk_t func, void *data, loc_t *loc, + struct iatt *stbuf, int32_t valid, dict_t *xdata); + +void +ec_fsetattr(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_fsetattr_cbk_t func, void *data, fd_t *fd, + struct iatt *stbuf, int32_t valid, dict_t *xdata); + +void +ec_setxattr(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_setxattr_cbk_t func, void *data, loc_t *loc, + dict_t *dict, int32_t flags, dict_t *xdata); + +void +ec_fsetxattr(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_fsetxattr_cbk_t func, void *data, fd_t *fd, + dict_t *dict, int32_t flags, dict_t *xdata); + +void +ec_stat(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_stat_cbk_t func, void *data, loc_t *loc, dict_t *xdata); + +void +ec_fstat(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_fstat_cbk_t func, void *data, fd_t *fd, dict_t *xdata); + +void +ec_statfs(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_statfs_cbk_t func, void *data, loc_t *loc, + dict_t *xdata); + +void +ec_symlink(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_symlink_cbk_t func, void *data, + const char *linkname, loc_t *loc, mode_t umask, dict_t *xdata); + +void +ec_fallocate(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_fallocate_cbk_t func, void *data, fd_t *fd, + int32_t mode, off_t offset, size_t len, dict_t *xdata); + +void +ec_discard(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_discard_cbk_t func, void *data, fd_t *fd, + off_t offset, size_t len, dict_t *xdata); + +void +ec_truncate(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_truncate_cbk_t func, void *data, loc_t *loc, + off_t offset, dict_t *xdata); + +void +ec_ftruncate(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_ftruncate_cbk_t func, void *data, fd_t *fd, + off_t offset, dict_t *xdata); + +void +ec_unlink(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_unlink_cbk_t func, void *data, loc_t *loc, + int xflags, dict_t *xdata); + +void +ec_writev(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_writev_cbk_t func, void *data, fd_t *fd, + struct iovec *vector, int32_t count, off_t offset, uint32_t flags, + struct iobref *iobref, dict_t *xdata); + +void +ec_xattrop(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_xattrop_cbk_t func, void *data, loc_t *loc, + gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata); + +void +ec_fxattrop(call_frame_t *frame, xlator_t *this, uintptr_t target, + int32_t minimum, fop_fxattrop_cbk_t func, void *data, fd_t *fd, + gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata); + +void +ec_seek(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_seek_cbk_t func, void *data, fd_t *fd, off_t offset, + gf_seek_what_t what, dict_t *xdata); + +void +ec_ipc(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum, + fop_ipc_cbk_t func, void *data, int32_t op, dict_t *xdata); #endif /* __EC_FOPS_H__ */ diff --git a/xlators/cluster/ec/src/ec-galois.h b/xlators/cluster/ec/src/ec-galois.h index 02e6b6c1bc2..ed55d53e419 100644 --- a/xlators/cluster/ec/src/ec-galois.h +++ b/xlators/cluster/ec/src/ec-galois.h @@ -15,12 +15,18 @@ #include "ec-types.h" -ec_gf_t *ec_gf_prepare(uint32_t bits, uint32_t mod); -void ec_gf_destroy(ec_gf_t *gf); +ec_gf_t * +ec_gf_prepare(uint32_t bits, uint32_t mod); +void +ec_gf_destroy(ec_gf_t *gf); -uint32_t ec_gf_add(ec_gf_t *gf, uint32_t a, uint32_t b); -uint32_t ec_gf_mul(ec_gf_t *gf, uint32_t a, uint32_t b); -uint32_t ec_gf_div(ec_gf_t *gf, uint32_t a, uint32_t b); -uint32_t ec_gf_exp(ec_gf_t *gf, uint32_t a, uint32_t b); +uint32_t +ec_gf_add(ec_gf_t *gf, uint32_t a, uint32_t b); +uint32_t +ec_gf_mul(ec_gf_t *gf, uint32_t a, uint32_t b); +uint32_t +ec_gf_div(ec_gf_t *gf, uint32_t a, uint32_t b); +uint32_t +ec_gf_exp(ec_gf_t *gf, uint32_t a, uint32_t b); #endif /* __EC_GALOIS_H__ */ diff --git a/xlators/cluster/ec/src/ec-heald.h b/xlators/cluster/ec/src/ec-heald.h index 2a8488124c4..4d141d767e5 100644 --- a/xlators/cluster/ec/src/ec-heald.h +++ b/xlators/cluster/ec/src/ec-heald.h @@ -16,10 +16,10 @@ #include "ec-types.h" int -ec_xl_op (xlator_t *this, dict_t *input, dict_t *output); +ec_xl_op(xlator_t *this, dict_t *input, dict_t *output); int -ec_selfheal_daemon_init (xlator_t *this); +ec_selfheal_daemon_init(xlator_t *this); void ec_shd_index_healer_wake(ec_t *ec); diff --git a/xlators/cluster/ec/src/ec-helpers.h b/xlators/cluster/ec/src/ec-helpers.h index b548f802361..015db514e05 100644 --- a/xlators/cluster/ec/src/ec-helpers.h +++ b/xlators/cluster/ec/src/ec-helpers.h @@ -17,60 +17,77 @@ #define EC_IS_ERR(_x) (((uintptr_t)(_x) & ~0xfffULL) == ~0xfffULL) #define EC_GET_ERR(_x) ((int32_t)(intptr_t)(_x)) -#define EC_ALIGN_CHECK(_ptr, _align) \ - ((((uintptr_t)(_ptr)) & ((_align) - 1)) == 0) - -const char * ec_bin(char * str, size_t size, uint64_t value, int32_t digits); -const char * ec_fop_name(int32_t id); -void ec_trace(const char * event, ec_fop_data_t * fop, const char * fmt, ...); -int32_t ec_bits_consume(uint64_t * n); -size_t ec_iov_copy_to(void * dst, struct iovec * vector, int32_t count, - off_t offset, size_t size); -int32_t ec_buffer_alloc(xlator_t *xl, size_t size, struct iobref **piobref, - void **ptr); -int32_t ec_dict_set_array(dict_t *dict, char *key, - uint64_t *value, int32_t size); -int32_t ec_dict_get_array (dict_t *dict, char *key, uint64_t value[], - int32_t size); - -int32_t ec_dict_del_array(dict_t *dict, char *key, - uint64_t *value, int32_t size); -int32_t ec_dict_set_number(dict_t * dict, char * key, uint64_t value); -int32_t ec_dict_del_number(dict_t * dict, char * key, uint64_t * value); -int32_t ec_dict_set_config(dict_t * dict, char * key, ec_config_t * config); -int32_t ec_dict_del_config(dict_t * dict, char * key, ec_config_t * config); - -int32_t ec_loc_parent(xlator_t *xl, loc_t *loc, loc_t *parent); -int32_t ec_loc_update(xlator_t *xl, loc_t *loc, inode_t *inode, - struct iatt *iatt); - -int32_t ec_loc_from_fd(xlator_t * xl, loc_t * loc, fd_t * fd); -int32_t ec_loc_from_loc(xlator_t * xl, loc_t * dst, loc_t * src); - -void ec_owner_set(call_frame_t * frame, void * owner); -void ec_owner_copy(call_frame_t * frame, gf_lkowner_t * owner); - -ec_inode_t * __ec_inode_get(inode_t * inode, xlator_t * xl); -ec_inode_t * ec_inode_get(inode_t * inode, xlator_t * xl); -ec_fd_t * __ec_fd_get(fd_t * fd, xlator_t * xl); -ec_fd_t * ec_fd_get(fd_t * fd, xlator_t * xl); +#define EC_ALIGN_CHECK(_ptr, _align) ((((uintptr_t)(_ptr)) & ((_align)-1)) == 0) + +const char * +ec_bin(char *str, size_t size, uint64_t value, int32_t digits); +const char * +ec_fop_name(int32_t id); +void +ec_trace(const char *event, ec_fop_data_t *fop, const char *fmt, ...); +int32_t +ec_bits_consume(uint64_t *n); +size_t +ec_iov_copy_to(void *dst, struct iovec *vector, int32_t count, off_t offset, + size_t size); +int32_t +ec_buffer_alloc(xlator_t *xl, size_t size, struct iobref **piobref, void **ptr); +int32_t +ec_dict_set_array(dict_t *dict, char *key, uint64_t *value, int32_t size); +int32_t +ec_dict_get_array(dict_t *dict, char *key, uint64_t value[], int32_t size); + +int32_t +ec_dict_del_array(dict_t *dict, char *key, uint64_t *value, int32_t size); +int32_t +ec_dict_set_number(dict_t *dict, char *key, uint64_t value); +int32_t +ec_dict_del_number(dict_t *dict, char *key, uint64_t *value); +int32_t +ec_dict_set_config(dict_t *dict, char *key, ec_config_t *config); +int32_t +ec_dict_del_config(dict_t *dict, char *key, ec_config_t *config); + +int32_t +ec_loc_parent(xlator_t *xl, loc_t *loc, loc_t *parent); +int32_t +ec_loc_update(xlator_t *xl, loc_t *loc, inode_t *inode, struct iatt *iatt); + +int32_t +ec_loc_from_fd(xlator_t *xl, loc_t *loc, fd_t *fd); +int32_t +ec_loc_from_loc(xlator_t *xl, loc_t *dst, loc_t *src); + +void +ec_owner_set(call_frame_t *frame, void *owner); +void +ec_owner_copy(call_frame_t *frame, gf_lkowner_t *owner); + +ec_inode_t * +__ec_inode_get(inode_t *inode, xlator_t *xl); +ec_inode_t * +ec_inode_get(inode_t *inode, xlator_t *xl); +ec_fd_t * +__ec_fd_get(fd_t *fd, xlator_t *xl); +ec_fd_t * +ec_fd_get(fd_t *fd, xlator_t *xl); static inline uint32_t ec_adjust_size_down(ec_t *ec, uint64_t *value, gf_boolean_t scale) { - uint64_t head, tmp; + uint64_t head, tmp; - tmp = *value; - head = tmp % ec->stripe_size; - tmp -= head; + tmp = *value; + head = tmp % ec->stripe_size; + tmp -= head; - if (scale) { - tmp /= ec->fragments; - } + if (scale) { + tmp /= ec->fragments; + } - *value = tmp; + *value = tmp; - return (uint32_t)head; + return (uint32_t)head; } /* This function can cause an overflow if the passed value is too near to the @@ -79,35 +96,35 @@ ec_adjust_size_down(ec_t *ec, uint64_t *value, gf_boolean_t scale) static inline int32_t ec_adjust_size_up(ec_t *ec, uint64_t *value, gf_boolean_t scale) { - uint64_t tmp; - int32_t tail; - - tmp = *value; - /* We first adjust the value down. This never causes overflow. */ - tail = ec_adjust_size_down(ec, &tmp, scale); - - /* If the value was already aligned, tail will be 0 and nothing else - * needs to be done. */ - if (tail != 0) { - /* Otherwise, we need to compute the real tail and adjust the - * returned value to the next stripe. */ - tail = ec->stripe_size - tail; - if (scale) { - tmp += ec->fragment_size; - } else { - tmp += ec->stripe_size; - /* If no scaling is requested there's a possibility of - * overflow. */ - if (tmp < ec->stripe_size) { - tmp = UINT64_MAX; - tail = -tail; - } - } + uint64_t tmp; + int32_t tail; + + tmp = *value; + /* We first adjust the value down. This never causes overflow. */ + tail = ec_adjust_size_down(ec, &tmp, scale); + + /* If the value was already aligned, tail will be 0 and nothing else + * needs to be done. */ + if (tail != 0) { + /* Otherwise, we need to compute the real tail and adjust the + * returned value to the next stripe. */ + tail = ec->stripe_size - tail; + if (scale) { + tmp += ec->fragment_size; + } else { + tmp += ec->stripe_size; + /* If no scaling is requested there's a possibility of + * overflow. */ + if (tmp < ec->stripe_size) { + tmp = UINT64_MAX; + tail = -tail; + } } + } - *value = tmp; + *value = tmp; - return tail; + return tail; } /* This function is equivalent to ec_adjust_size_down() but with a potentially @@ -115,19 +132,19 @@ ec_adjust_size_up(ec_t *ec, uint64_t *value, gf_boolean_t scale) static inline uint32_t ec_adjust_offset_down(ec_t *ec, off_t *value, gf_boolean_t scale) { - off_t head, tmp; + off_t head, tmp; - tmp = *value; - head = tmp % ec->stripe_size; - tmp -= head; + tmp = *value; + head = tmp % ec->stripe_size; + tmp -= head; - if (scale) { - tmp /= ec->fragments; - } + if (scale) { + tmp /= ec->fragments; + } - *value = tmp; + *value = tmp; - return (uint32_t)head; + return (uint32_t)head; } /* This function is equivalent to ec_adjust_size_up() but with a potentially @@ -135,48 +152,49 @@ ec_adjust_offset_down(ec_t *ec, off_t *value, gf_boolean_t scale) static inline int32_t ec_adjust_offset_up(ec_t *ec, off_t *value, gf_boolean_t scale) { - uint64_t tail, tmp; - - /* An offset is a signed type that can only have positive values, so - * we take advantage of this to avoid overflows. We simply convert it - * to an unsigned integer and operate normally. This won't cause an - * overflow. Overflow is only checked when converting back to an - * off_t. */ - tmp = *value; - tail = ec->stripe_size; - tail -= (tmp + tail - 1) % tail + 1; - tmp += tail; - if (scale) { - /* If we are scaling, we'll never get an overflow. */ - tmp /= ec->fragments; - } else { - /* Check if there has been an overflow. */ - if ((off_t)tmp < 0) { - tmp = GF_OFF_MAX; - tail = -tail; - } + uint64_t tail, tmp; + + /* An offset is a signed type that can only have positive values, so + * we take advantage of this to avoid overflows. We simply convert it + * to an unsigned integer and operate normally. This won't cause an + * overflow. Overflow is only checked when converting back to an + * off_t. */ + tmp = *value; + tail = ec->stripe_size; + tail -= (tmp + tail - 1) % tail + 1; + tmp += tail; + if (scale) { + /* If we are scaling, we'll never get an overflow. */ + tmp /= ec->fragments; + } else { + /* Check if there has been an overflow. */ + if ((off_t)tmp < 0) { + tmp = GF_OFF_MAX; + tail = -tail; } + } - *value = (off_t)tmp; + *value = (off_t)tmp; - return (int32_t)tail; + return (int32_t)tail; } -static inline int32_t ec_is_power_of_2(uint32_t value) +static inline int32_t +ec_is_power_of_2(uint32_t value) { return (value != 0) && ((value & (value - 1)) == 0); } gf_boolean_t -ec_is_internal_xattr (dict_t *dict, char *key, data_t *value, void *data); +ec_is_internal_xattr(dict_t *dict, char *key, data_t *value, void *data); void -ec_filter_internal_xattrs (dict_t *xattr); +ec_filter_internal_xattrs(dict_t *xattr); gf_boolean_t -ec_is_data_fop (glusterfs_fop_t fop); +ec_is_data_fop(glusterfs_fop_t fop); int32_t -ec_launch_replace_heal (ec_t *ec); +ec_launch_replace_heal(ec_t *ec); #endif /* __EC_HELPERS_H__ */ diff --git a/xlators/cluster/ec/src/ec-mem-types.h b/xlators/cluster/ec/src/ec-mem-types.h index 8109a422d9d..fc33d09ea33 100644 --- a/xlators/cluster/ec/src/ec-mem-types.h +++ b/xlators/cluster/ec/src/ec-mem-types.h @@ -13,8 +13,7 @@ #include "mem-types.h" -enum gf_ec_mem_types_ -{ +enum gf_ec_mem_types_ { ec_mt_ec_t = gf_common_mt_end + 1, ec_mt_xlator_t, ec_mt_ec_inode_t, diff --git a/xlators/cluster/ec/src/ec-messages.h b/xlators/cluster/ec/src/ec-messages.h index f5138ad8e57..5f673d69aa4 100644 --- a/xlators/cluster/ec/src/ec-messages.h +++ b/xlators/cluster/ec/src/ec-messages.h @@ -23,83 +23,38 @@ * glfs-message-id.h. */ -GLFS_MSGID(EC, - EC_MSG_INVALID_CONFIG, - EC_MSG_HEAL_FAIL, - EC_MSG_DICT_COMBINE_FAIL, - EC_MSG_STIME_COMBINE_FAIL, - EC_MSG_INVALID_DICT_NUMS, - EC_MSG_IATT_COMBINE_FAIL, - EC_MSG_INVALID_FORMAT, - EC_MSG_DICT_GET_FAILED, - EC_MSG_UNHANDLED_STATE, - EC_MSG_FILE_DESC_REF_FAIL, - EC_MSG_LOC_COPY_FAIL, - EC_MSG_BUF_REF_FAIL, - EC_MSG_DICT_REF_FAIL, - EC_MSG_LK_UNLOCK_FAILED, - EC_MSG_UNLOCK_FAILED, - EC_MSG_LOC_PARENT_INODE_MISSING, - EC_MSG_INVALID_LOC_NAME, - EC_MSG_NO_MEMORY, - EC_MSG_GFID_MISMATCH, - EC_MSG_UNSUPPORTED_VERSION, - EC_MSG_FD_CREATE_FAIL, - EC_MSG_READDIRP_REQ_PREP_FAIL, - EC_MSG_LOOKUP_REQ_PREP_FAIL, - EC_MSG_INODE_REF_FAIL, - EC_MSG_LOOKUP_READAHEAD_FAIL, - EC_MSG_FRAME_MISMATCH, - EC_MSG_XLATOR_MISMATCH, - EC_MSG_VECTOR_MISMATCH, - EC_MSG_IATT_MISMATCH, - EC_MSG_FD_MISMATCH, - EC_MSG_DICT_MISMATCH, - EC_MSG_INDEX_DIR_GET_FAIL, - EC_MSG_PREOP_LOCK_FAILED, - EC_MSG_CHILDS_INSUFFICIENT, - EC_MSG_OP_EXEC_UNAVAIL, - EC_MSG_UNLOCK_DELAY_FAILED, - EC_MSG_SIZE_VERS_UPDATE_FAIL, - EC_MSG_INVALID_REQUEST, - EC_MSG_INVALID_LOCK_TYPE, - EC_MSG_SIZE_VERS_GET_FAIL, - EC_MSG_FILE_SIZE_GET_FAIL, - EC_MSG_FOP_MISMATCH, - EC_MSG_SUBVOL_ID_DICT_SET_FAIL, - EC_MSG_SUBVOL_BUILD_FAIL, - EC_MSG_XLATOR_INIT_FAIL, - EC_MSG_NO_PARENTS, - EC_MSG_TIMER_CREATE_FAIL, - EC_MSG_TOO_MANY_SUBVOLS, - EC_MSG_DATA_UNAVAILABLE, - EC_MSG_INODE_REMOVE_FAIL, - EC_MSG_INVALID_REDUNDANCY, - EC_MSG_XLATOR_PARSE_OPT_FAIL, - EC_MSG_OP_FAIL_ON_SUBVOLS, - EC_MSG_INVALID_INODE, - EC_MSG_LOCK_MISMATCH, - EC_MSG_XDATA_MISMATCH, - EC_MSG_HEALING_INFO, - EC_MSG_HEAL_SUCCESS, - EC_MSG_FULL_SWEEP_START, - EC_MSG_FULL_SWEEP_STOP, - EC_MSG_INVALID_FOP, - EC_MSG_EC_UP, - EC_MSG_EC_DOWN, - EC_MSG_SIZE_XATTR_GET_FAIL, - EC_MSG_VER_XATTR_GET_FAIL, - EC_MSG_CONFIG_XATTR_GET_FAIL, - EC_MSG_CONFIG_XATTR_INVALID, - EC_MSG_EXTENSION, - EC_MSG_EXTENSION_NONE, - EC_MSG_EXTENSION_UNKNOWN, - EC_MSG_EXTENSION_UNSUPPORTED, - EC_MSG_EXTENSION_FAILED, - EC_MSG_NO_GF, - EC_MSG_MATRIX_FAILED, - EC_MSG_DYN_CREATE_FAILED, - EC_MSG_DYN_CODEGEN_FAILED -); +GLFS_MSGID(EC, EC_MSG_INVALID_CONFIG, EC_MSG_HEAL_FAIL, + EC_MSG_DICT_COMBINE_FAIL, EC_MSG_STIME_COMBINE_FAIL, + EC_MSG_INVALID_DICT_NUMS, EC_MSG_IATT_COMBINE_FAIL, + EC_MSG_INVALID_FORMAT, EC_MSG_DICT_GET_FAILED, + EC_MSG_UNHANDLED_STATE, EC_MSG_FILE_DESC_REF_FAIL, + EC_MSG_LOC_COPY_FAIL, EC_MSG_BUF_REF_FAIL, EC_MSG_DICT_REF_FAIL, + EC_MSG_LK_UNLOCK_FAILED, EC_MSG_UNLOCK_FAILED, + EC_MSG_LOC_PARENT_INODE_MISSING, EC_MSG_INVALID_LOC_NAME, + EC_MSG_NO_MEMORY, EC_MSG_GFID_MISMATCH, EC_MSG_UNSUPPORTED_VERSION, + EC_MSG_FD_CREATE_FAIL, EC_MSG_READDIRP_REQ_PREP_FAIL, + EC_MSG_LOOKUP_REQ_PREP_FAIL, EC_MSG_INODE_REF_FAIL, + EC_MSG_LOOKUP_READAHEAD_FAIL, EC_MSG_FRAME_MISMATCH, + EC_MSG_XLATOR_MISMATCH, EC_MSG_VECTOR_MISMATCH, EC_MSG_IATT_MISMATCH, + EC_MSG_FD_MISMATCH, EC_MSG_DICT_MISMATCH, EC_MSG_INDEX_DIR_GET_FAIL, + EC_MSG_PREOP_LOCK_FAILED, EC_MSG_CHILDS_INSUFFICIENT, + EC_MSG_OP_EXEC_UNAVAIL, EC_MSG_UNLOCK_DELAY_FAILED, + EC_MSG_SIZE_VERS_UPDATE_FAIL, EC_MSG_INVALID_REQUEST, + EC_MSG_INVALID_LOCK_TYPE, EC_MSG_SIZE_VERS_GET_FAIL, + EC_MSG_FILE_SIZE_GET_FAIL, EC_MSG_FOP_MISMATCH, + EC_MSG_SUBVOL_ID_DICT_SET_FAIL, EC_MSG_SUBVOL_BUILD_FAIL, + EC_MSG_XLATOR_INIT_FAIL, EC_MSG_NO_PARENTS, EC_MSG_TIMER_CREATE_FAIL, + EC_MSG_TOO_MANY_SUBVOLS, EC_MSG_DATA_UNAVAILABLE, + EC_MSG_INODE_REMOVE_FAIL, EC_MSG_INVALID_REDUNDANCY, + EC_MSG_XLATOR_PARSE_OPT_FAIL, EC_MSG_OP_FAIL_ON_SUBVOLS, + EC_MSG_INVALID_INODE, EC_MSG_LOCK_MISMATCH, EC_MSG_XDATA_MISMATCH, + EC_MSG_HEALING_INFO, EC_MSG_HEAL_SUCCESS, EC_MSG_FULL_SWEEP_START, + EC_MSG_FULL_SWEEP_STOP, EC_MSG_INVALID_FOP, EC_MSG_EC_UP, + EC_MSG_EC_DOWN, EC_MSG_SIZE_XATTR_GET_FAIL, + EC_MSG_VER_XATTR_GET_FAIL, EC_MSG_CONFIG_XATTR_GET_FAIL, + EC_MSG_CONFIG_XATTR_INVALID, EC_MSG_EXTENSION, EC_MSG_EXTENSION_NONE, + EC_MSG_EXTENSION_UNKNOWN, EC_MSG_EXTENSION_UNSUPPORTED, + EC_MSG_EXTENSION_FAILED, EC_MSG_NO_GF, EC_MSG_MATRIX_FAILED, + EC_MSG_DYN_CREATE_FAILED, EC_MSG_DYN_CODEGEN_FAILED); #endif /* !_EC_MESSAGES_H_ */ diff --git a/xlators/cluster/ec/src/ec-method.h b/xlators/cluster/ec/src/ec-method.h index 9ba5069ff0e..3d6393bed06 100644 --- a/xlators/cluster/ec/src/ec-method.h +++ b/xlators/cluster/ec/src/ec-method.h @@ -24,7 +24,7 @@ /* Determines the maximum size of the matrix used to encode/decode data */ #define EC_METHOD_MAX_FRAGMENTS 16 /* Determines the maximum number of usable elements in the Galois Field */ -#define EC_METHOD_MAX_NODES (EC_GF_SIZE - 1) +#define EC_METHOD_MAX_NODES (EC_GF_SIZE - 1) #define EC_METHOD_WORD_SIZE 64 @@ -34,7 +34,8 @@ int32_t ec_method_init(xlator_t *xl, ec_matrix_list_t *list, uint32_t columns, uint32_t rows, uint32_t max, const char *gen); -void ec_method_fini(ec_matrix_list_t *list); +void +ec_method_fini(ec_matrix_list_t *list); int32_t ec_method_update(xlator_t *xl, ec_matrix_list_t *list, const char *gen); diff --git a/xlators/cluster/ec/src/ec-types.h b/xlators/cluster/ec/src/ec-types.h index 3a0267bf176..80d9c0d4014 100644 --- a/xlators/cluster/ec/src/ec-types.h +++ b/xlators/cluster/ec/src/ec-types.h @@ -128,75 +128,59 @@ typedef void (*ec_wind_f)(ec_t *, ec_fop_data_t *, int32_t); typedef int32_t (*ec_handler_f)(ec_fop_data_t *, int32_t); typedef void (*ec_resume_f)(ec_fop_data_t *, int32_t); -enum _ec_read_policy { - EC_ROUND_ROBIN, - EC_GFID_HASH, - EC_READ_POLICY_MAX -}; +enum _ec_read_policy { EC_ROUND_ROBIN, EC_GFID_HASH, EC_READ_POLICY_MAX }; -enum _ec_heal_need { - EC_HEAL_NONEED, - EC_HEAL_MAYBE, - EC_HEAL_MUST -}; +enum _ec_heal_need { EC_HEAL_NONEED, EC_HEAL_MAYBE, EC_HEAL_MUST }; -enum _ec_stripe_part { - EC_STRIPE_HEAD, - EC_STRIPE_TAIL -}; +enum _ec_stripe_part { EC_STRIPE_HEAD, EC_STRIPE_TAIL }; /* Enumartions to indicate FD status. */ -typedef enum { - EC_FD_NOT_OPENED, - EC_FD_OPENED, - EC_FD_OPENING -} ec_fd_status_t; +typedef enum { EC_FD_NOT_OPENED, EC_FD_OPENED, EC_FD_OPENING } ec_fd_status_t; struct _ec_config { uint32_t version; - uint8_t algorithm; - uint8_t gf_word_size; - uint8_t bricks; - uint8_t redundancy; + uint8_t algorithm; + uint8_t gf_word_size; + uint8_t bricks; + uint8_t redundancy; uint32_t chunk_size; }; struct _ec_fd { - loc_t loc; + loc_t loc; uintptr_t open; - int32_t flags; + int32_t flags; ec_fd_status_t fd_status[0]; }; struct _ec_stripe { - struct list_head lru; /* LRU list member */ - uint64_t frag_offset; /* Fragment offset of this stripe */ - char data[]; /* Contents of the stripe */ + struct list_head lru; /* LRU list member */ + uint64_t frag_offset; /* Fragment offset of this stripe */ + char data[]; /* Contents of the stripe */ }; struct _ec_stripe_list { - struct list_head lru; - uint32_t count; - uint32_t max; + struct list_head lru; + uint32_t count; + uint32_t max; }; struct _ec_inode { - ec_lock_t *inode_lock; - gf_boolean_t have_info; - gf_boolean_t have_config; - gf_boolean_t have_version; - gf_boolean_t have_size; - ec_config_t config; - uint64_t pre_version[2]; - uint64_t post_version[2]; - uint64_t pre_size; - uint64_t post_size; - uint64_t dirty[2]; - struct list_head heal; - ec_stripe_list_t stripe_cache; + ec_lock_t *inode_lock; + gf_boolean_t have_info; + gf_boolean_t have_config; + gf_boolean_t have_version; + gf_boolean_t have_size; + ec_config_t config; + uint64_t pre_version[2]; + uint64_t post_version[2]; + uint64_t pre_size; + uint64_t post_size; + uint64_t dirty[2]; + struct list_head heal; + ec_stripe_list_t stripe_cache; }; - typedef int32_t (*fop_heal_cbk_t)(call_frame_t *, void *, xlator_t *, int32_t, int32_t, uintptr_t, uintptr_t, uintptr_t, dict_t *); @@ -205,105 +189,105 @@ typedef int32_t (*fop_fheal_cbk_t)(call_frame_t *, void *, xlator_t *, int32_t, dict_t *); union _ec_cbk { - fop_access_cbk_t access; - fop_create_cbk_t create; - fop_discard_cbk_t discard; - fop_entrylk_cbk_t entrylk; - fop_fentrylk_cbk_t fentrylk; - fop_fallocate_cbk_t fallocate; - fop_flush_cbk_t flush; - fop_fsync_cbk_t fsync; - fop_fsyncdir_cbk_t fsyncdir; - fop_getxattr_cbk_t getxattr; - fop_fgetxattr_cbk_t fgetxattr; - fop_heal_cbk_t heal; - fop_fheal_cbk_t fheal; - fop_inodelk_cbk_t inodelk; - fop_finodelk_cbk_t finodelk; - fop_link_cbk_t link; - fop_lk_cbk_t lk; - fop_lookup_cbk_t lookup; - fop_mkdir_cbk_t mkdir; - fop_mknod_cbk_t mknod; - fop_open_cbk_t open; - fop_opendir_cbk_t opendir; - fop_readdir_cbk_t readdir; - fop_readdirp_cbk_t readdirp; - fop_readlink_cbk_t readlink; - fop_readv_cbk_t readv; - fop_removexattr_cbk_t removexattr; + fop_access_cbk_t access; + fop_create_cbk_t create; + fop_discard_cbk_t discard; + fop_entrylk_cbk_t entrylk; + fop_fentrylk_cbk_t fentrylk; + fop_fallocate_cbk_t fallocate; + fop_flush_cbk_t flush; + fop_fsync_cbk_t fsync; + fop_fsyncdir_cbk_t fsyncdir; + fop_getxattr_cbk_t getxattr; + fop_fgetxattr_cbk_t fgetxattr; + fop_heal_cbk_t heal; + fop_fheal_cbk_t fheal; + fop_inodelk_cbk_t inodelk; + fop_finodelk_cbk_t finodelk; + fop_link_cbk_t link; + fop_lk_cbk_t lk; + fop_lookup_cbk_t lookup; + fop_mkdir_cbk_t mkdir; + fop_mknod_cbk_t mknod; + fop_open_cbk_t open; + fop_opendir_cbk_t opendir; + fop_readdir_cbk_t readdir; + fop_readdirp_cbk_t readdirp; + fop_readlink_cbk_t readlink; + fop_readv_cbk_t readv; + fop_removexattr_cbk_t removexattr; fop_fremovexattr_cbk_t fremovexattr; - fop_rename_cbk_t rename; - fop_rmdir_cbk_t rmdir; - fop_setattr_cbk_t setattr; - fop_fsetattr_cbk_t fsetattr; - fop_setxattr_cbk_t setxattr; - fop_fsetxattr_cbk_t fsetxattr; - fop_stat_cbk_t stat; - fop_fstat_cbk_t fstat; - fop_statfs_cbk_t statfs; - fop_symlink_cbk_t symlink; - fop_truncate_cbk_t truncate; - fop_ftruncate_cbk_t ftruncate; - fop_unlink_cbk_t unlink; - fop_writev_cbk_t writev; - fop_xattrop_cbk_t xattrop; - fop_fxattrop_cbk_t fxattrop; - fop_zerofill_cbk_t zerofill; - fop_seek_cbk_t seek; - fop_ipc_cbk_t ipc; + fop_rename_cbk_t rename; + fop_rmdir_cbk_t rmdir; + fop_setattr_cbk_t setattr; + fop_fsetattr_cbk_t fsetattr; + fop_setxattr_cbk_t setxattr; + fop_fsetxattr_cbk_t fsetxattr; + fop_stat_cbk_t stat; + fop_fstat_cbk_t fstat; + fop_statfs_cbk_t statfs; + fop_symlink_cbk_t symlink; + fop_truncate_cbk_t truncate; + fop_ftruncate_cbk_t ftruncate; + fop_unlink_cbk_t unlink; + fop_writev_cbk_t writev; + fop_xattrop_cbk_t xattrop; + fop_fxattrop_cbk_t fxattrop; + fop_zerofill_cbk_t zerofill; + fop_seek_cbk_t seek; + fop_ipc_cbk_t ipc; }; struct _ec_lock { - ec_inode_t *ctx; - gf_timer_t *timer; + ec_inode_t *ctx; + gf_timer_t *timer; /* List of owners of this lock. All fops added to this list are running * concurrently. */ - struct list_head owners; + struct list_head owners; /* List of fops waiting to be an owner of the lock. Fops are added to this * list when the current owner has an incompatible access (conflicting lock) * or the lock is not acquired yet. */ - struct list_head waiting; + struct list_head waiting; /* List of fops that will wait until the next unlock/lock cycle. This * happens when the currently acquired lock is decided to be released as * soon as possible. In this case, all frozen fops will be continued only * after the lock is reacquired. */ - struct list_head frozen; - - uintptr_t mask; - uintptr_t good_mask; - uintptr_t healing; - uint32_t refs_owners; /* Refs for fops owning the lock */ - uint32_t refs_pending; /* Refs assigned to fops being prepared */ - uint32_t waiting_flags; /*Track xattrop/dirty marking*/ - gf_boolean_t acquired; - gf_boolean_t unlock_now; - gf_boolean_t release; - gf_boolean_t query; - fd_t *fd; - loc_t loc; + struct list_head frozen; + + uintptr_t mask; + uintptr_t good_mask; + uintptr_t healing; + uint32_t refs_owners; /* Refs for fops owning the lock */ + uint32_t refs_pending; /* Refs assigned to fops being prepared */ + uint32_t waiting_flags; /*Track xattrop/dirty marking*/ + gf_boolean_t acquired; + gf_boolean_t unlock_now; + gf_boolean_t release; + gf_boolean_t query; + fd_t *fd; + loc_t loc; union { - entrylk_type type; - struct gf_flock flock; + entrylk_type type; + struct gf_flock flock; }; }; struct _ec_lock_link { - ec_lock_t *lock; - ec_fop_data_t *fop; - struct list_head owner_list; - struct list_head wait_list; - gf_boolean_t update[2]; - gf_boolean_t dirty[2]; - gf_boolean_t optimistic_changelog; - loc_t *base; - uint64_t size; - uint32_t waiting_flags; - off_t fl_start; - off_t fl_end; + ec_lock_t *lock; + ec_fop_data_t *fop; + struct list_head owner_list; + struct list_head wait_list; + gf_boolean_t update[2]; + gf_boolean_t dirty[2]; + gf_boolean_t optimistic_changelog; + loc_t *base; + uint64_t size; + uint32_t waiting_flags; + off_t fl_start; + off_t fl_end; }; /* This structure keeps a range of fragment offsets affected by a fop. Since @@ -320,113 +304,113 @@ struct _ec_fragment_range { /* EC xlator data structure to collect all the data required to perform * the file operation.*/ struct _ec_fop_data { - int32_t id; /* ID of the file operation */ - int32_t refs; - int32_t state; - int32_t minimum; /* Minimum number of successful - operation required to conclude a - fop as successful */ - int32_t expected; - int32_t winds; - int32_t jobs; - int32_t error; - ec_fop_data_t *parent; - xlator_t *xl; /* points to EC xlator */ - call_frame_t *req_frame; /* frame of the calling xlator */ - call_frame_t *frame; /* frame used by this fop */ - struct list_head cbk_list; /* sorted list of groups of answers */ - struct list_head answer_list; /* list of answers */ - struct list_head pending_list; /* member of ec_t.pending_fops */ - ec_cbk_data_t *answer; /* accepted answer */ - int32_t lock_count; - int32_t locked; - ec_lock_link_t locks[2]; - int32_t first_lock; - gf_lock_t lock; - - uint32_t flags; - uint32_t first; - uintptr_t mask; - uintptr_t healing; /*Dispatch is done but call is successful only - if fop->minimum number of subvolumes succeed - which are not healing*/ - uintptr_t remaining; - uintptr_t received; /* Mask of responses */ - uintptr_t good; - - uid_t uid; - gid_t gid; - - ec_wind_f wind; /* Function to wind to */ - ec_handler_f handler; /* FOP manager function */ - ec_resume_f resume; - ec_cbk_t cbks; /* Callback function for this FOP */ - void *data; - ec_heal_t *heal; - struct list_head healer; - - uint64_t user_size; - uint32_t head; - - int32_t use_fd; /* Indicates whether this FOP uses FD or - not */ - - dict_t *xdata; - dict_t *dict; - int32_t int32; - uint32_t uint32; - uint64_t size; - off_t offset; - mode_t mode[2]; - entrylk_cmd entrylk_cmd; - entrylk_type entrylk_type; + int32_t id; /* ID of the file operation */ + int32_t refs; + int32_t state; + int32_t minimum; /* Minimum number of successful + operation required to conclude a + fop as successful */ + int32_t expected; + int32_t winds; + int32_t jobs; + int32_t error; + ec_fop_data_t *parent; + xlator_t *xl; /* points to EC xlator */ + call_frame_t *req_frame; /* frame of the calling xlator */ + call_frame_t *frame; /* frame used by this fop */ + struct list_head cbk_list; /* sorted list of groups of answers */ + struct list_head answer_list; /* list of answers */ + struct list_head pending_list; /* member of ec_t.pending_fops */ + ec_cbk_data_t *answer; /* accepted answer */ + int32_t lock_count; + int32_t locked; + ec_lock_link_t locks[2]; + int32_t first_lock; + gf_lock_t lock; + + uint32_t flags; + uint32_t first; + uintptr_t mask; + uintptr_t healing; /*Dispatch is done but call is successful only + if fop->minimum number of subvolumes succeed + which are not healing*/ + uintptr_t remaining; + uintptr_t received; /* Mask of responses */ + uintptr_t good; + + uid_t uid; + gid_t gid; + + ec_wind_f wind; /* Function to wind to */ + ec_handler_f handler; /* FOP manager function */ + ec_resume_f resume; + ec_cbk_t cbks; /* Callback function for this FOP */ + void *data; + ec_heal_t *heal; + struct list_head healer; + + uint64_t user_size; + uint32_t head; + + int32_t use_fd; /* Indicates whether this FOP uses FD or + not */ + + dict_t *xdata; + dict_t *dict; + int32_t int32; + uint32_t uint32; + uint64_t size; + off_t offset; + mode_t mode[2]; + entrylk_cmd entrylk_cmd; + entrylk_type entrylk_type; gf_xattrop_flags_t xattrop_flags; - dev_t dev; - inode_t *inode; - fd_t *fd; /* FD of the file on which FOP is - being carried upon */ - struct iatt iatt; - char *str[2]; - loc_t loc[2]; /* Holds the location details for - the file */ - struct gf_flock flock; - struct iovec *vector; - struct iobref *buffers; - gf_seek_what_t seek; - ec_fragment_range_t frag_range; /* This will hold the range of stripes - affected by the fop. */ - char *errstr; /*String of fop name, path and gfid + dev_t dev; + inode_t *inode; + fd_t *fd; /* FD of the file on which FOP is + being carried upon */ + struct iatt iatt; + char *str[2]; + loc_t loc[2]; /* Holds the location details for + the file */ + struct gf_flock flock; + struct iovec *vector; + struct iobref *buffers; + gf_seek_what_t seek; + ec_fragment_range_t frag_range; /* This will hold the range of stripes + affected by the fop. */ + char *errstr; /*String of fop name, path and gfid to be used in gf_msg. */ }; struct _ec_cbk_data { - struct list_head list; /* item in the sorted list of groups */ - struct list_head answer_list; /* item in the list of answers */ - ec_fop_data_t *fop; - ec_cbk_data_t *next; /* next answer in the same group */ - uint32_t idx; - int32_t op_ret; - int32_t op_errno; - int32_t count; - uintptr_t mask; - - dict_t *xdata; - dict_t *dict; - int32_t int32; - uintptr_t uintptr[3]; - uint64_t size; - uint64_t version[2]; - inode_t *inode; - fd_t *fd; - struct statvfs statvfs; - struct iatt iatt[5]; - struct gf_flock flock; - struct iovec *vector; - struct iobref *buffers; - char *str; - gf_dirent_t entries; - off_t offset; - gf_seek_what_t what; + struct list_head list; /* item in the sorted list of groups */ + struct list_head answer_list; /* item in the list of answers */ + ec_fop_data_t *fop; + ec_cbk_data_t *next; /* next answer in the same group */ + uint32_t idx; + int32_t op_ret; + int32_t op_errno; + int32_t count; + uintptr_t mask; + + dict_t *xdata; + dict_t *dict; + int32_t int32; + uintptr_t uintptr[3]; + uint64_t size; + uint64_t version[2]; + inode_t *inode; + fd_t *fd; + struct statvfs statvfs; + struct iatt iatt[5]; + struct gf_flock flock; + struct iovec *vector; + struct iobref *buffers; + char *str; + gf_dirent_t entries; + off_t offset; + gf_seek_what_t what; }; enum _ec_gf_opcode { @@ -441,26 +425,26 @@ enum _ec_gf_opcode { struct _ec_gf_op { ec_gf_opcode_t op; - uint32_t arg1; - uint32_t arg2; - uint32_t arg3; + uint32_t arg1; + uint32_t arg2; + uint32_t arg3; }; struct _ec_gf_mul { - uint32_t regs; - uint32_t map[EC_GF_MAX_REGS]; + uint32_t regs; + uint32_t map[EC_GF_MAX_REGS]; ec_gf_op_t *ops; }; struct _ec_gf { - uint32_t bits; - uint32_t size; - uint32_t mod; - uint32_t min_ops; - uint32_t max_ops; - uint32_t avg_ops; - uint32_t *log; - uint32_t *pow; + uint32_t bits; + uint32_t size; + uint32_t mod; + uint32_t min_ops; + uint32_t max_ops; + uint32_t avg_ops; + uint32_t *log; + uint32_t *pow; ec_gf_mul_t **table; }; @@ -483,207 +467,206 @@ struct _ec_code_gen { }; struct _ec_code { - gf_lock_t lock; - struct list_head spaces; - ec_gf_t *gf; - ec_code_gen_t *gen; + gf_lock_t lock; + struct list_head spaces; + ec_gf_t *gf; + ec_code_gen_t *gen; }; struct _ec_code_arg { - uint32_t value; + uint32_t value; }; struct _ec_code_op { - ec_gf_opcode_t op; - ec_code_arg_t arg1; - ec_code_arg_t arg2; - ec_code_arg_t arg3; + ec_gf_opcode_t op; + ec_code_arg_t arg1; + ec_code_arg_t arg2; + ec_code_arg_t arg3; }; struct _ec_code_builder { - ec_code_t *code; - uint64_t address; - uint8_t *data; - uint32_t size; - int32_t error; - uint32_t regs; - uint32_t bits; - uint32_t width; - uint32_t count; - uint32_t base; - uint32_t map[EC_GF_MAX_REGS]; - gf_boolean_t linear; - uint64_t loop; - ec_code_op_t ops[0]; + ec_code_t *code; + uint64_t address; + uint8_t *data; + uint32_t size; + int32_t error; + uint32_t regs; + uint32_t bits; + uint32_t width; + uint32_t count; + uint32_t base; + uint32_t map[EC_GF_MAX_REGS]; + gf_boolean_t linear; + uint64_t loop; + ec_code_op_t ops[0]; }; struct _ec_code_chunk { - struct list_head list; - size_t size; - ec_code_space_t *space; + struct list_head list; + size_t size; + ec_code_space_t *space; }; struct _ec_code_space { - struct list_head list; - struct list_head chunks; - ec_code_t *code; - void *exec; - size_t size; + struct list_head list; + struct list_head chunks; + ec_code_t *code; + void *exec; + size_t size; }; - union _ec_code_func { - ec_code_func_linear_t linear; + ec_code_func_linear_t linear; ec_code_func_interleaved_t interleaved; }; struct _ec_matrix_row { - ec_code_func_t func; - uint32_t *values; + ec_code_func_t func; + uint32_t *values; }; struct _ec_matrix { struct list_head lru; - uint32_t refs; - uint32_t columns; - uint32_t rows; - uintptr_t mask; - ec_code_t *code; - uint32_t *values; - ec_matrix_row_t row_data[0]; + uint32_t refs; + uint32_t columns; + uint32_t rows; + uintptr_t mask; + ec_code_t *code; + uint32_t *values; + ec_matrix_row_t row_data[0]; }; struct _ec_matrix_list { - struct list_head lru; - gf_lock_t lock; - uint32_t columns; - uint32_t rows; - uint32_t max; - uint32_t count; - uint32_t stripe; - struct mem_pool *pool; - ec_gf_t *gf; - ec_code_t *code; - ec_matrix_t *encode; - ec_matrix_t **objects; + struct list_head lru; + gf_lock_t lock; + uint32_t columns; + uint32_t rows; + uint32_t max; + uint32_t count; + uint32_t stripe; + struct mem_pool *pool; + ec_gf_t *gf; + ec_code_t *code; + ec_matrix_t *encode; + ec_matrix_t **objects; }; struct _ec_heal { - struct list_head list; - gf_lock_t lock; - xlator_t *xl; - ec_fop_data_t *fop; - void *data; - ec_fop_data_t *lookup; - loc_t loc; - struct iatt iatt; - char *symlink; - fd_t *fd; - int32_t partial; - int32_t done; - int32_t error; - gf_boolean_t nameheal; - uintptr_t available; - uintptr_t good; - uintptr_t bad; - uintptr_t open; - uintptr_t fixed; - uint64_t offset; - uint64_t size; - uint64_t total_size; - uint64_t version[2]; - uint64_t raw_size; + struct list_head list; + gf_lock_t lock; + xlator_t *xl; + ec_fop_data_t *fop; + void *data; + ec_fop_data_t *lookup; + loc_t loc; + struct iatt iatt; + char *symlink; + fd_t *fd; + int32_t partial; + int32_t done; + int32_t error; + gf_boolean_t nameheal; + uintptr_t available; + uintptr_t good; + uintptr_t bad; + uintptr_t open; + uintptr_t fixed; + uint64_t offset; + uint64_t size; + uint64_t total_size; + uint64_t version[2]; + uint64_t raw_size; }; struct subvol_healer { - xlator_t *this; - int subvol; - gf_boolean_t running; - gf_boolean_t rerun; - pthread_mutex_t mutex; - pthread_cond_t cond; - pthread_t thread; + xlator_t *this; + int subvol; + gf_boolean_t running; + gf_boolean_t rerun; + pthread_mutex_t mutex; + pthread_cond_t cond; + pthread_t thread; }; struct _ec_self_heald { - gf_boolean_t iamshd; - gf_boolean_t enabled; - int timeout; - uint32_t max_threads; - uint32_t wait_qlength; - struct subvol_healer *index_healers; - struct subvol_healer *full_healers; + gf_boolean_t iamshd; + gf_boolean_t enabled; + int timeout; + uint32_t max_threads; + uint32_t wait_qlength; + struct subvol_healer *index_healers; + struct subvol_healer *full_healers; }; struct _ec_statistics { - struct { - gf_atomic_t hits; /* Cache hits. */ - gf_atomic_t misses; /* Cache misses. */ - gf_atomic_t updates; /* Number of times an existing stripe has - been updated with new content. */ - gf_atomic_t invals; /* Number of times an existing stripe has - been invalidated because of truncates - or discards. */ - gf_atomic_t evicts; /* Number of times that an existing entry - has been evicted to make room for newer - entries. */ - gf_atomic_t allocs; /* Number of memory allocations made to - store stripes. */ - gf_atomic_t errors; /* Number of errors that have caused extra - requests. (Basically memory allocation - errors). */ - } stripe_cache; + struct { + gf_atomic_t hits; /* Cache hits. */ + gf_atomic_t misses; /* Cache misses. */ + gf_atomic_t updates; /* Number of times an existing stripe has + been updated with new content. */ + gf_atomic_t invals; /* Number of times an existing stripe has + been invalidated because of truncates + or discards. */ + gf_atomic_t evicts; /* Number of times that an existing entry + has been evicted to make room for newer + entries. */ + gf_atomic_t allocs; /* Number of memory allocations made to + store stripes. */ + gf_atomic_t errors; /* Number of errors that have caused extra + requests. (Basically memory allocation + errors). */ + } stripe_cache; }; struct _ec { - xlator_t *xl; - int32_t healers; - int32_t heal_waiters; - int32_t nodes; /* Total number of bricks(n) */ - int32_t bits_for_nodes; - int32_t fragments; /* Data bricks(k) */ - int32_t redundancy; /* Redundant bricks(m) */ - uint32_t fragment_size; /* Size of fragment/chunk on a - brick. */ - uint32_t stripe_size; /* (fragment_size * fragments) - maximum size of user data - stored in one stripe. */ - int32_t up; /* Represents whether EC volume is - up or not. */ - uint32_t idx; - uint32_t xl_up_count; /* Number of UP bricks. */ - uintptr_t xl_up; /* Bit flag representing UP - bricks */ - uint32_t xl_notify_count; /* Number of notifications. */ - uintptr_t xl_notify; /* Bit flag representing - notification for bricks. */ - uintptr_t node_mask; - xlator_t **xl_list; - gf_lock_t lock; - gf_timer_t *timer; - gf_boolean_t shutdown; - gf_boolean_t eager_lock; - gf_boolean_t other_eager_lock; - gf_boolean_t optimistic_changelog; - gf_boolean_t parallel_writes; - uint32_t stripe_cache; - uint32_t background_heals; - uint32_t heal_wait_qlen; - uint32_t self_heal_window_size; /* max size of read/writes */ - uint32_t eager_lock_timeout; - uint32_t other_eager_lock_timeout; - struct list_head pending_fops; - struct list_head heal_waiting; - struct list_head healing; - struct mem_pool *fop_pool; - struct mem_pool *cbk_pool; - struct mem_pool *lock_pool; - ec_self_heald_t shd; - char vol_uuid[UUID_SIZE + 1]; - dict_t *leaf_to_subvolid; - ec_read_policy_t read_policy; - ec_matrix_list_t matrix; - ec_statistics_t stats; + xlator_t *xl; + int32_t healers; + int32_t heal_waiters; + int32_t nodes; /* Total number of bricks(n) */ + int32_t bits_for_nodes; + int32_t fragments; /* Data bricks(k) */ + int32_t redundancy; /* Redundant bricks(m) */ + uint32_t fragment_size; /* Size of fragment/chunk on a + brick. */ + uint32_t stripe_size; /* (fragment_size * fragments) + maximum size of user data + stored in one stripe. */ + int32_t up; /* Represents whether EC volume is + up or not. */ + uint32_t idx; + uint32_t xl_up_count; /* Number of UP bricks. */ + uintptr_t xl_up; /* Bit flag representing UP + bricks */ + uint32_t xl_notify_count; /* Number of notifications. */ + uintptr_t xl_notify; /* Bit flag representing + notification for bricks. */ + uintptr_t node_mask; + xlator_t **xl_list; + gf_lock_t lock; + gf_timer_t *timer; + gf_boolean_t shutdown; + gf_boolean_t eager_lock; + gf_boolean_t other_eager_lock; + gf_boolean_t optimistic_changelog; + gf_boolean_t parallel_writes; + uint32_t stripe_cache; + uint32_t background_heals; + uint32_t heal_wait_qlen; + uint32_t self_heal_window_size; /* max size of read/writes */ + uint32_t eager_lock_timeout; + uint32_t other_eager_lock_timeout; + struct list_head pending_fops; + struct list_head heal_waiting; + struct list_head healing; + struct mem_pool *fop_pool; + struct mem_pool *cbk_pool; + struct mem_pool *lock_pool; + ec_self_heald_t shd; + char vol_uuid[UUID_SIZE + 1]; + dict_t *leaf_to_subvolid; + ec_read_policy_t read_policy; + ec_matrix_list_t matrix; + ec_statistics_t stats; }; #endif /* __EC_TYPES_H__ */ diff --git a/xlators/cluster/ec/src/ec.h b/xlators/cluster/ec/src/ec.h index e2ec9cf04f5..1b210d9adc1 100644 --- a/xlators/cluster/ec/src/ec.h +++ b/xlators/cluster/ec/src/ec.h @@ -13,15 +13,15 @@ #include "ec-method.h" -#define EC_XATTR_PREFIX "trusted.ec." -#define EC_XATTR_CONFIG EC_XATTR_PREFIX"config" -#define EC_XATTR_SIZE EC_XATTR_PREFIX"size" -#define EC_XATTR_VERSION EC_XATTR_PREFIX"version" -#define EC_XATTR_HEAL EC_XATTR_PREFIX"heal" -#define EC_XATTR_DIRTY EC_XATTR_PREFIX"dirty" -#define EC_STRIPE_CACHE_MAX_SIZE 10 +#define EC_XATTR_PREFIX "trusted.ec." +#define EC_XATTR_CONFIG EC_XATTR_PREFIX "config" +#define EC_XATTR_SIZE EC_XATTR_PREFIX "size" +#define EC_XATTR_VERSION EC_XATTR_PREFIX "version" +#define EC_XATTR_HEAL EC_XATTR_PREFIX "heal" +#define EC_XATTR_DIRTY EC_XATTR_PREFIX "dirty" +#define EC_STRIPE_CACHE_MAX_SIZE 10 #define EC_VERSION_SIZE 2 -#define EC_SHD_INODE_LRU_LIMIT 10 +#define EC_SHD_INODE_LRU_LIMIT 10 #define EC_MAX_FRAGMENTS EC_METHOD_MAX_FRAGMENTS /* The maximum number of nodes is derived from the maximum allowed fragments |