X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fofd%2Fofd_internal.h;h=2e75de5c52ac056de29cb60fb8a68d46ff3afcc3;hb=0d92e17afa7ff7024d3e18268a2e1a89cba4d5bd;hp=9285a1f877c34d58a94ae87d8b438ed32e220375;hpb=9761d5c52aeef31a8c3112c3fb3ec9e24b37c800;p=fs%2Flustre-release.git diff --git a/lustre/ofd/ofd_internal.h b/lustre/ofd/ofd_internal.h index 9285a1f..2e75de5 100644 --- a/lustre/ofd/ofd_internal.h +++ b/lustre/ofd/ofd_internal.h @@ -42,13 +42,9 @@ #include #include #include -#include #include #define OFD_INIT_OBJID 0 -#define OFD_ROCOMPAT_SUPP (0) -#define OFD_INCOMPAT_SUPP (OBD_INCOMPAT_GROUPS | OBD_INCOMPAT_OST | \ - OBD_INCOMPAT_COMMON_LR) #define OFD_PRECREATE_BATCH_DEFAULT (OBJ_SUBDIR_COUNT * 4) /* on small filesystems we should not precreate too many objects in @@ -113,7 +109,7 @@ struct ofd_seq { struct ost_id os_oi; spinlock_t os_last_oid_lock; struct mutex os_create_lock; - cfs_atomic_t os_refc; + atomic_t os_refc; struct dt_object *os_lastid_obj; unsigned long os_destroys_in_progress:1; }; @@ -131,6 +127,8 @@ struct ofd_device { struct dt_object *ofd_health_check_file; int ofd_subdir_count; + __u64 ofd_inconsistency_self_detected; + __u64 ofd_inconsistency_self_repaired; cfs_list_t ofd_seq_list; rwlock_t ofd_seq_list_lock; @@ -181,10 +179,20 @@ struct ofd_device { ofd_syncjournal:1, /* shall we grant space to clients not * supporting OBD_CONNECT_GRANT_PARAM? */ - ofd_grant_compat_disable:1; + ofd_grant_compat_disable:1, + /* Protected by ofd_lastid_rwsem. */ + ofd_lastid_rebuilding:1, + ofd_record_fid_accessed:1, + ofd_lfsck_verify_pfid:1; struct seq_server_site ofd_seq_site; /* the limit of SOFT_SYNC RPCs that will trigger a soft sync */ unsigned int ofd_soft_sync_limit; + /* Protect ::ofd_lastid_rebuilding */ + struct rw_semaphore ofd_lastid_rwsem; + __u64 ofd_lastid_gen; + struct ptlrpc_thread ofd_inconsistency_thread; + struct list_head ofd_inconsistency_list; + spinlock_t ofd_inconsistency_lock; }; static inline struct ofd_device *ofd_dev(struct lu_device *d) @@ -210,7 +218,9 @@ static inline char *ofd_name(struct ofd_device *ofd) struct ofd_object { struct lu_object_header ofo_header; struct dt_object ofo_obj; - int ofo_ff_exists; + struct lu_fid ofo_pfid; + unsigned int ofo_pfid_checking:1, + ofo_pfid_verified:1; }; static inline struct ofd_object *ofd_obj(struct lu_object *o) @@ -297,7 +307,10 @@ struct ofd_thread_info { struct lu_attr fti_attr; struct lu_attr fti_attr2; struct ldlm_res_id fti_resid; - struct filter_fid fti_mds_fid; + union { + struct filter_fid fti_mds_fid; + struct filter_fid_old fti_mds_fid_old; + }; struct ost_id fti_ostid; struct ofd_object *fti_obj; union { @@ -314,6 +327,7 @@ struct ofd_thread_info { /* Space used by the I/O, used by grant code */ unsigned long fti_used; struct ost_lvb fti_lvb; + struct lfsck_request fti_lr; }; extern void target_recovery_fini(struct obd_device *obd); @@ -321,25 +335,26 @@ extern void target_recovery_init(struct lu_target *lut, svc_handler_t handler); /* ofd_capa.c */ int ofd_update_capa_key(struct ofd_device *ofd, struct lustre_capa_key *key); -int ofd_auth_capa(struct obd_export *exp, struct lu_fid *fid, obd_seq seq, - struct lustre_capa *capa, __u64 opc); +int ofd_auth_capa(struct obd_export *exp, const struct lu_fid *fid, + obd_seq seq, struct lustre_capa *capa, __u64 opc); void ofd_free_capa_keys(struct ofd_device *ofd); /* ofd_dev.c */ extern struct lu_context_key ofd_thread_key; int ofd_postrecov(const struct lu_env *env, struct ofd_device *ofd); +int ofd_fiemap_get(const struct lu_env *env, struct ofd_device *ofd, + struct lu_fid *fid, struct ll_user_fiemap *fiemap); /* ofd_obd.c */ extern struct obd_ops ofd_obd_ops; int ofd_statfs_internal(const struct lu_env *env, struct ofd_device *ofd, struct obd_statfs *osfs, __u64 max_age, int *from_cache); -int ofd_orphans_destroy(const struct lu_env *env, struct obd_export *exp, - struct ofd_device *ofd, struct obdo *oa); int ofd_destroy_by_fid(const struct lu_env *env, struct ofd_device *ofd, const struct lu_fid *fid, int orphan); int ofd_statfs(const struct lu_env *env, struct obd_export *exp, struct obd_statfs *osfs, __u64 max_age, __u32 flags); +int ofd_obd_disconnect(struct obd_export *exp); /* ofd_fs.c */ obd_id ofd_seq_last_oid(struct ofd_seq *oseq); @@ -357,8 +372,13 @@ int ofd_precreate_batch(struct ofd_device *ofd, int batch); struct ofd_seq *ofd_seq_load(const struct lu_env *env, struct ofd_device *ofd, obd_seq seq); void ofd_seqs_fini(const struct lu_env *env, struct ofd_device *ofd); +void ofd_seqs_free(const struct lu_env *env, struct ofd_device *ofd); /* ofd_io.c */ +int ofd_start_inconsistency_verification_thread(struct ofd_device *ofd); +int ofd_stop_inconsistency_verification_thread(struct ofd_device *ofd); +int ofd_verify_ff(const struct lu_env *env, struct ofd_object *fo, + struct obdo *oa); int ofd_preprw(const struct lu_env *env,int cmd, struct obd_export *exp, struct obdo *oa, int objcount, struct obd_ioobj *obj, struct niobuf_remote *rnb, int *nr_local, @@ -383,13 +403,9 @@ int ofd_txn_stop_cb(const struct lu_env *env, struct thandle *txn, /* lproc_ofd.c */ #ifdef LPROCFS -void lprocfs_ofd_init_vars(struct lprocfs_static_vars *lvars); +extern struct lprocfs_seq_vars lprocfs_ofd_obd_vars[]; void ofd_stats_counter_init(struct lprocfs_stats *stats); #else -static void lprocfs_ofd_init_vars(struct lprocfs_static_vars *lvars) -{ - memset(lvars, 0, sizeof(*lvars)); -} static inline void ofd_stats_counter_init(struct lprocfs_stats *stats) {} #endif @@ -397,11 +413,7 @@ static inline void ofd_stats_counter_init(struct lprocfs_stats *stats) {} struct ofd_object *ofd_object_find(const struct lu_env *env, struct ofd_device *ofd, const struct lu_fid *fid); -struct ofd_object *ofd_object_find_or_create(const struct lu_env *env, - struct ofd_device *ofd, - const struct lu_fid *fid, - struct lu_attr *attr); -int ofd_object_ff_check(const struct lu_env *env, struct ofd_object *fo); +int ofd_object_ff_load(const struct lu_env *env, struct ofd_object *fo); int ofd_precreate_objects(const struct lu_env *env, struct ofd_device *ofd, obd_id id, struct ofd_seq *oseq, int nr, int sync); @@ -410,7 +422,7 @@ int ofd_attr_set(const struct lu_env *env, struct ofd_object *fo, struct lu_attr *la, struct filter_fid *ff); int ofd_object_punch(const struct lu_env *env, struct ofd_object *fo, __u64 start, __u64 end, struct lu_attr *la, - struct filter_fid *ff); + struct filter_fid *ff, struct obdo *oa); int ofd_object_destroy(const struct lu_env *, struct ofd_object *, int); int ofd_attr_get(const struct lu_env *env, struct ofd_object *fo, struct lu_attr *la); @@ -420,7 +432,7 @@ int ofd_attr_handle_ugid(const struct lu_env *env, struct ofd_object *fo, static inline struct ofd_object *ofd_object_find_exists(const struct lu_env *env, struct ofd_device *ofd, - struct lu_fid *fid) + const struct lu_fid *fid) { struct ofd_object *fo; @@ -490,14 +502,14 @@ int ofd_grant_create(const struct lu_env *env, struct obd_export *exp, int *nr); int ofd_fmd_init(void); void ofd_fmd_exit(void); struct ofd_mod_data *ofd_fmd_find(struct obd_export *exp, - struct lu_fid *fid); + const struct lu_fid *fid); struct ofd_mod_data *ofd_fmd_get(struct obd_export *exp, - struct lu_fid *fid); + const struct lu_fid *fid); void ofd_fmd_put(struct obd_export *exp, struct ofd_mod_data *fmd); void ofd_fmd_expire(struct obd_export *exp); void ofd_fmd_cleanup(struct obd_export *exp); #ifdef DO_FMD_DROP -void ofd_fmd_drop(struct obd_export *exp, struct lu_fid *fid); +void ofd_fmd_drop(struct obd_export *exp, const struct lu_fid *fid); #else #define ofd_fmd_drop(exp, fid) do {} while (0) #endif