X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Flustre_lfsck.h;h=4c86cfe48b2358e94a59324326266d635fdaa9d0;hb=c740130066cf618f4fd31eae716affbb98ecf308;hp=a8330182d886f07e3f02a85dd3cf03b8c4030e69;hpb=0347ad57ee875b730c3ec0da203857a5c86fc394;p=fs%2Flustre-release.git diff --git a/lustre/include/lustre_lfsck.h b/lustre/include/lustre_lfsck.h index a833018..4c86cfe 100644 --- a/lustre/include/lustre_lfsck.h +++ b/lustre/include/lustre_lfsck.h @@ -20,7 +20,7 @@ * GPL HEADER END */ /* - * Copyright (c) 2013, Intel Corporation. + * Copyright (c) 2013, 2014, Intel Corporation. */ /* * lustre/include/lustre_lfsck.h @@ -38,6 +38,35 @@ #include #include +/** + * status machine: + * + * LS_INIT + * | + * (lfsck|start) + * | + * v + * LS_SCANNING_PHASE1 + * | ^ + * | : + * | (lfsck:restart) + * | : + * v : + * ----------------------------------------------------------------- + * | |^ |^ |^ |^ |^ + * | |: |: |: |: |: + * v v: v: v: v: v: + * LS_SCANNING_PHASE2 LS_FAILED LS_STOPPED LS_PAUSED LS_CRASHED LS_PARTIAL + * (CO_) (CO_) (CO_) + * | ^ ^: ^: ^: ^: ^: + * | : |: |: |: |: |: + * | (lfsck:restart) |: |: |: |: |: + * v : |v |v |v |v |v + * ----------------------------------------------------------------- + * | + * v + * LS_COMPLETED + */ enum lfsck_status { /* The lfsck file is new created, for new MDT, upgrading from old disk, * or re-creating the lfsck file manually. */ @@ -69,26 +98,71 @@ enum lfsck_status { /* Some OST/MDT failed during the LFSCK, or not join the LFSCK. */ LS_PARTIAL = 8, + /* The LFSCK is failed because its controller is failed. */ + LS_CO_FAILED = 9, + + /* The LFSCK is stopped because its controller is stopped. */ + LS_CO_STOPPED = 10, + + /* The LFSCK is paused because its controller is paused. */ + LS_CO_PAUSED = 11, + LS_MAX }; struct lfsck_start_param { struct lfsck_start *lsp_start; - struct ldlm_namespace *lsp_namespace; + __u32 lsp_index; + unsigned int lsp_index_valid:1; }; +/* For LE_PAIRS_VERIFY returned status */ +enum lfsck_pv_status { + LPVS_INIT = 0, + LPVS_INCONSISTENT = 1, + LPVS_INCONSISTENT_TOFIX = 2, +}; + +typedef int (*lfsck_out_notify)(const struct lu_env *env, void *data, + enum lfsck_events event); + +int lfsck_register_namespace(const struct lu_env *env, struct dt_device *key, + struct ldlm_namespace *ns); int lfsck_register(const struct lu_env *env, struct dt_device *key, - struct dt_device *next, bool master); + struct dt_device *next, struct obd_device *obd, + lfsck_out_notify notify, void *notify_data, bool master); void lfsck_degister(const struct lu_env *env, struct dt_device *key); +int lfsck_add_target(const struct lu_env *env, struct dt_device *key, + struct dt_device *tgt, struct obd_export *exp, + __u32 index, bool for_ost); +void lfsck_del_target(const struct lu_env *env, struct dt_device *key, + struct dt_device *tgt, __u32 index, bool for_ost); + int lfsck_start(const struct lu_env *env, struct dt_device *key, struct lfsck_start_param *lsp); int lfsck_stop(const struct lu_env *env, struct dt_device *key, - bool pause); + struct lfsck_stop *stop); +int lfsck_in_notify(const struct lu_env *env, struct dt_device *key, + struct lfsck_request *lr, struct thandle *th); +int lfsck_query(const struct lu_env *env, struct dt_device *key, + struct lfsck_request *lr); -int lfsck_get_speed(struct dt_device *key, void *buf, int len); +int lfsck_get_speed(struct seq_file *m, struct dt_device *key); int lfsck_set_speed(struct dt_device *key, int val); - -int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type); +int lfsck_get_windows(struct seq_file *m, struct dt_device *key); +int lfsck_set_windows(struct dt_device *key, int val); + +int lfsck_dump(struct seq_file *m, struct dt_device *key, enum lfsck_type type); + +static inline void lfsck_pack_rfa(struct lfsck_request *lr, + const struct lu_fid *fid, + __u32 event, __u16 com) +{ + memset(lr, 0, sizeof(*lr)); + lr->lr_fid = *fid; + lr->lr_event = event; + lr->lr_active = com; +} #endif /* _LUSTRE_LFSCK_H */