22 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_SNSCM 30 uint64_t group_number, uint64_t unit_number,
31 uint32_t *device_index_out)
43 *device_index_out = ta.
ta_obj;
51 uint64_t group_number,
53 uint32_t *spare_slot_out,
54 uint32_t *spare_slot_out_prev,
57 uint32_t device_index;
58 uint32_t device_index_new;
61 M0_ENTRY(
"unit number:%d", (
int)unit_number);
66 *spare_slot_out_prev = unit_number;
80 *spare_slot_out, &device_index_new);
83 device_index_new) && !break_next) {
84 device_index = device_index_new;
85 *spare_slot_out_prev = *spare_slot_out;
95 if (*spare_slot_out_prev != unit_number)
107 uint64_t
group, uint64_t unit,
108 uint32_t *spare_slot_out,
109 uint32_t *spare_slot_out_prev)
112 spare_slot_out_prev,
false);
119 uint64_t
group, uint64_t unit,
120 uint32_t *spare_slot_out,
121 uint32_t *spare_slot_out_prev)
124 uint32_t device_index;
129 spare_slot_out_prev,
true);
134 unit = *spare_slot_out;
141 uint64_t
frame, uint32_t device_index)
159 uint64_t group_number, uint32_t device_index)
170 if (spare_frame != 0) {
171 frame = spare_frame - 1;
182 frame = spare_frame + 1;
189 return M0_RC(-ENOENT);
195 uint64_t group_number,
196 uint64_t spare_unit_number,
197 uint64_t *data_unit_id_out)
204 uint32_t device_index;
210 spare_in = spare_unit_number;
237 if (
frame == -ENOENT) {
260 *data_unit_id_out = sa.
sa_unit;
268 if (spare_unit_number == sa.
sa_unit) {
286 #undef M0_TRACE_SUBSYSTEM struct m0_poolmach_state * pm_state
static void device_index_get(struct m0_pdclust_instance *pi, uint64_t group_number, uint64_t unit_number, uint32_t *device_index_out)
M0_INTERNAL int m0_sns_repair_spare_map(struct m0_poolmach *pm, const struct m0_fid *fid, struct m0_pdclust_layout *pl, struct m0_pdclust_instance *pi, uint64_t group, uint64_t unit, uint32_t *spare_slot_out, uint32_t *spare_slot_out_prev)
M0_INTERNAL int m0_sns_repair_spare_rebalancing(struct m0_poolmach *pm, const struct m0_fid *fid, struct m0_pdclust_layout *pl, struct m0_pdclust_instance *pi, uint64_t group, uint64_t unit, uint32_t *spare_slot_out, uint32_t *spare_slot_out_prev)
M0_INTERNAL int m0_poolmach_device_state(struct m0_poolmach *pm, uint32_t device_index, enum m0_pool_nd_state *state_out)
static int _spare_next(struct m0_poolmach *pm, const struct m0_fid *fid, struct m0_pdclust_layout *pl, struct m0_pdclust_instance *pi, uint64_t group_number, uint64_t unit_number, uint32_t *spare_slot_out, uint32_t *spare_slot_out_prev, bool break_next)
return M0_ERR(-EOPNOTSUPP)
M0_INTERNAL uint32_t m0_pdclust_N(const struct m0_pdclust_layout *pl)
static bool frame_eq(struct m0_pdclust_instance *pi, uint64_t group_number, uint64_t frame, uint32_t device_index)
struct m0_pdclust_instance pi
M0_INTERNAL uint32_t m0_pdclust_K(const struct m0_pdclust_layout *pl)
M0_INTERNAL bool m0_poolmach_device_is_in_spare_usage_array(struct m0_poolmach *pm, uint32_t device_index)
M0_INTERNAL int m0_sns_repair_data_map(struct m0_poolmach *pm, struct m0_pdclust_layout *pl, struct m0_pdclust_instance *pi, uint64_t group_number, uint64_t spare_unit_number, uint64_t *data_unit_id_out)
M0_INTERNAL void m0_fd_bwd_map(struct m0_pdclust_instance *pi, const struct m0_pdclust_tgt_addr *tgt, struct m0_pdclust_src_addr *src)
static uint64_t frame_get(struct m0_pdclust_instance *pi, uint64_t spare_frame, uint64_t group_number, uint32_t device_index)
uint32_t psu_device_index
M0_INTERNAL int m0_poolmach_sns_repair_spare_query(struct m0_poolmach *pm, uint32_t device_index, uint32_t *spare_slot_out)
M0_INTERNAL enum m0_pdclust_unit_type m0_pdclust_unit_classify(const struct m0_pdclust_layout *pl, int unit)
M0_INTERNAL void m0_fd_fwd_map(struct m0_pdclust_instance *pi, const struct m0_pdclust_src_addr *src, struct m0_pdclust_tgt_addr *tgt)
struct m0_pool_spare_usage * pst_spare_usage_array