__u32 ltd_layout_gen;
__u32 ltd_namespace_gen;
unsigned int ltd_dead:1,
- ltd_for_ost:1,
ltd_retry_start:1,
ltd_layout_done:1,
ltd_namespace_done:1,
atomic_t li_ref;
atomic_t li_double_scan_count;
struct ptlrpc_thread li_thread;
+ struct task_struct *li_task;
/* The time for last checkpoint, seconds */
time64_t li_time_last_checkpoint;
int lad_prefetched;
int lad_assistant_status;
int lad_post_result;
- unsigned int lad_to_post:1,
- lad_to_double_scan:1,
- lad_in_double_scan:1,
- lad_exit:1,
- lad_incomplete:1;
+ unsigned long lad_flags;
bool lad_advance_lock;
};
+enum {
+ LAD_TO_POST = 0,
+ LAD_TO_DOUBLE_SCAN = 1,
+ LAD_IN_DOUBLE_SCAN = 2,
+ LAD_EXIT = 3,
+ LAD_INCOMPLETE = 4,
+};
#define LFSCK_TMPBUF_LEN 64
struct ldlm_res_id lti_resid;
struct filter_fid lti_ff;
struct dt_allocation_hint lti_hint;
- struct lu_orphan_rec_v2 lti_rec;
+ struct lu_orphan_rec_v3 lti_rec;
struct lov_user_md lti_lum;
struct dt_insert_rec lti_dt_rec;
struct lu_object_conf lti_conf;
struct dt_object *obj, struct lustre_handle *lh,
__u64 bits, enum ldlm_mode mode);
void lfsck_ibits_unlock(struct lustre_handle *lh, enum ldlm_mode mode);
+int lfsck_remote_lookup_lock(const struct lu_env *env,
+ struct lfsck_instance *lfsck,
+ struct dt_object *pobj, struct dt_object *obj,
+ struct lustre_handle *lh, enum ldlm_mode mode);
int lfsck_lock(const struct lu_env *env, struct lfsck_instance *lfsck,
struct dt_object *obj, const char *name,
struct lfsck_lock_handle *llh, __u64 bits, enum ldlm_mode mode);
int lfsck_async_interpret_common(const struct lu_env *env,
struct ptlrpc_request *req,
void *args, int rc);
-int lfsck_async_request(const struct lu_env *env, struct lfsck_tgt_desc *ltd,
+int lfsck_async_request(const struct lu_env *env, struct obd_export *exp,
struct lfsck_request *lr,
struct ptlrpc_request_set *set,
ptlrpc_interpterer_t interpterer,
/* lfsck_striped_dir.c */
void lfsck_lmv_put(const struct lu_env *env, struct lfsck_lmv *llmv);
-int lfsck_read_stripe_lmv(const struct lu_env *env, struct dt_object *obj,
+int lfsck_read_stripe_lmv(const struct lu_env *env,
+ struct lfsck_instance *lfsck,
+ struct dt_object *obj,
struct lmv_mds_md_v1 *lmv);
int lfsck_shard_name_to_index(const struct lu_env *env, const char *name,
int namelen, __u16 type,
struct lfsck_lmv *llmv,
const char *name, int namelen);
int lfsck_namespace_check_name(const struct lu_env *env,
+ struct lfsck_instance *lfsck,
struct dt_object *parent,
struct dt_object *child,
const struct lu_name *cname);
extern const char *lfsck_param_names[];
extern struct lu_context_key lfsck_thread_key;
-static inline bool name_is_dot_or_dotdot(const char *name, int namelen)
-{
- return name[0] == '.' &&
- (namelen == 1 || (namelen == 2 && name[1] == '.'));
-}
-
static inline struct dt_device *lfsck_obj2dev(struct dt_object *obj)
{
return container_of0(obj->do_lu.lo_dev, struct dt_device, dd_lu_dev);
if (likely(bitmap->size > index)) {
cfs_bitmap_set(bitmap, index);
- lad->lad_incomplete = 1;
+ set_bit(LAD_INCOMPLETE, &lad->lad_flags);
} else if (com->lc_type == LFSCK_TYPE_NAMESPACE) {
struct lfsck_namespace *ns = com->lc_file_ram;
dst->lmv_master_mdt_index = le32_to_cpu(src->lmv_master_mdt_index);
dst->lmv_hash_type = le32_to_cpu(src->lmv_hash_type);
dst->lmv_layout_version = le32_to_cpu(src->lmv_layout_version);
+ dst->lmv_migrate_offset = le32_to_cpu(src->lmv_migrate_offset);
+ dst->lmv_migrate_hash = le32_to_cpu(src->lmv_migrate_hash);
}
static inline void lfsck_lmv_header_cpu_to_le(struct lmv_mds_md_v1 *dst,
dst->lmv_master_mdt_index = cpu_to_le32(src->lmv_master_mdt_index);
dst->lmv_hash_type = cpu_to_le32(src->lmv_hash_type);
dst->lmv_layout_version = cpu_to_le32(src->lmv_layout_version);
+ dst->lmv_migrate_offset = cpu_to_le32(src->lmv_migrate_offset);
+ dst->lmv_migrate_hash = cpu_to_le32(src->lmv_migrate_hash);
}
static inline struct lfsck_assistant_object *