+
+ void (*lfsck_data_release)(const struct lu_env *env,
+ struct lfsck_component *com);
+
+ void (*lfsck_quit)(const struct lu_env *env,
+ struct lfsck_component *com);
+
+ int (*lfsck_in_notify)(const struct lu_env *env,
+ struct lfsck_component *com,
+ struct lfsck_request *lr);
+
+ int (*lfsck_query)(const struct lu_env *env,
+ struct lfsck_component *com);
+
+ int (*lfsck_stop_notify)(const struct lu_env *env,
+ struct lfsck_component *com,
+ struct lfsck_tgt_descs *ltds,
+ struct lfsck_tgt_desc *ltd,
+ struct ptlrpc_request_set *set);
+};
+
+#define TGT_PTRS 256 /* number of pointers at 1st level */
+#define TGT_PTRS_PER_BLOCK 256 /* number of pointers at 2nd level */
+
+struct lfsck_tgt_desc {
+ struct list_head ltd_orphan_list;
+ struct dt_device *ltd_tgt;
+ struct dt_device *ltd_key;
+ struct obd_export *ltd_exp;
+ struct list_head ltd_layout_list;
+ struct list_head ltd_layout_phase_list;
+ atomic_t ltd_ref;
+ __u32 ltd_index;
+ __u32 ltd_layout_gen;
+ unsigned int ltd_dead:1,
+ ltd_layout_done:1;
+};
+
+struct lfsck_tgt_desc_idx {
+ struct lfsck_tgt_desc *ldi_tgts[TGT_PTRS_PER_BLOCK];
+};
+
+struct lfsck_tgt_descs {
+ /* list of known TGTs */
+ struct lfsck_tgt_desc_idx *ltd_tgts_idx[TGT_PTRS];
+
+ /* bitmap of TGTs available */
+ cfs_bitmap_t *ltd_tgts_bitmap;
+
+ /* for lfsck_tgt_desc::ltd_xxx_list */
+ spinlock_t ltd_lock;
+
+ /* for tgts table accessing and changes */
+ struct rw_semaphore ltd_rw_sem;
+
+ /* Temporary list for orphan targets. */
+ struct list_head ltd_orphan;
+
+ /* number of registered TGTs */
+ int ltd_tgtnr;