X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fmdt%2Fmdt_internal.h;h=3eb82ae9d017c18507ec50782f5fe15cca068558;hp=2283d99157e4b373bad8f217258ad13cf9b646e7;hb=9b3b6c106b53c2c391d5e4347875a1cd3e150600;hpb=4f5830f769f9cc9bacfcdfee9de5962324fb5c81 diff --git a/lustre/mdt/mdt_internal.h b/lustre/mdt/mdt_internal.h index 2283d99..3eb82ae 100644 --- a/lustre/mdt/mdt_internal.h +++ b/lustre/mdt/mdt_internal.h @@ -50,7 +50,6 @@ #if defined(__KERNEL__) -#include #include #include #include @@ -59,7 +58,6 @@ #include #include #include -#include #include #include #include @@ -94,7 +92,7 @@ struct mdt_file_data { /* when adding a new policy, do not forget to update * lustre/mdt/mdt_coordinator.c::hsm_policy_names[] */ -#define CDT_DEFAULT_POLICY 0x0000000000000000ULL +#define CDT_DEFAULT_POLICY CDT_NORETRY_ACTION enum cdt_states { CDT_STOPPED = 0, CDT_INIT, @@ -110,27 +108,26 @@ enum cdt_states { CDT_STOPPED = 0, * cdt_request_lock */ struct coordinator { - struct ptlrpc_thread *cdt_thread; /**< coordinator thread */ + struct ptlrpc_thread cdt_thread; /**< coordinator thread */ struct lu_env cdt_env; /**< coordinator lustre * env */ + struct lu_context cdt_session; /** session for lu_ucred */ struct proc_dir_entry *cdt_proc_dir; /**< cdt /proc directory */ __u64 cdt_policy; /**< flags to defined * policy */ enum cdt_states cdt_state; /**< state */ - cfs_atomic_t cdt_compound_id; /**< compound id counter */ + atomic_t cdt_compound_id; /**< compound id counter */ __u64 cdt_last_cookie; /**< last cookie allocated */ - struct semaphore cdt_counter_lock; /**< protect request - * counter */ - struct semaphore cdt_llog_lock; /**< protect llog access */ + struct mutex cdt_llog_lock; /**< protect llog access */ struct rw_semaphore cdt_agent_lock; /**< protect agent list */ struct rw_semaphore cdt_request_lock; /**< protect request list */ - struct semaphore cdt_restore_lock; /**< protect restore list */ + struct mutex cdt_restore_lock; /**< protect restore list */ cfs_time_t cdt_loop_period; /**< llog scan period */ cfs_time_t cdt_delay; /**< request grace delay */ cfs_time_t cdt_timeout; /**< request timeout */ __u64 cdt_max_request; /**< max count of started * requests */ - __u64 cdt_request_count; /**< current count of + atomic_t cdt_request_count; /**< current count of * started requests */ cfs_list_t cdt_requests; /**< list of started * requests */ @@ -299,13 +296,13 @@ struct mdt_lock_handle { }; enum { - MDT_LH_PARENT, /* parent lockh */ - MDT_LH_CHILD, /* child lockh */ - MDT_LH_OLD, /* old lockh for rename */ + MDT_LH_PARENT, /* parent lockh */ + MDT_LH_CHILD, /* child lockh */ + MDT_LH_OLD, /* old lockh for rename */ MDT_LH_LAYOUT = MDT_LH_OLD, /* layout lock */ - MDT_LH_NEW, /* new lockh for rename */ - MDT_LH_RMT, /* used for return lh to caller */ - MDT_LH_LOCAL, /* local lock never return to client */ + MDT_LH_NEW, /* new lockh for rename */ + MDT_LH_RMT, /* used for return lh to caller */ + MDT_LH_LOCAL, /* local lock never return to client */ MDT_LH_NR }; @@ -592,6 +589,7 @@ struct cdt_agent_req { struct cdt_req_progress car_progress; /**< track data mvt * progress */ }; +extern struct kmem_cache *mdt_hsm_car_kmem; struct hsm_agent { cfs_list_t ha_list; /**< to chain the agents */ @@ -611,6 +609,7 @@ struct cdt_restore_handle { struct ldlm_extent crh_extent; /**< extent of the restore */ struct mdt_lock_handle crh_lh; /**< lock handle */ }; +extern struct kmem_cache *mdt_hsm_cdt_kmem; /** restore handle slab cache */ static inline const struct md_device_operations * mdt_child_ops(struct mdt_device * m) @@ -879,7 +878,7 @@ extern struct lprocfs_vars lprocfs_mds_module_vars[]; extern struct lprocfs_vars lprocfs_mds_obd_vars[]; int mdt_hsm_attr_set(struct mdt_thread_info *info, struct mdt_object *obj, - struct md_hsm *mh); + const struct md_hsm *mh); struct mdt_handler *mdt_handler_find(__u32 opc, struct mdt_opc_slice *supported); @@ -937,7 +936,8 @@ int mdt_hsm_ct_unregister(struct mdt_thread_info *info); int mdt_hsm_request(struct mdt_thread_info *info); /* mdt/mdt_hsm_cdt_actions.c */ extern const struct file_operations mdt_agent_actions_fops; -void dump_llog_agent_req_rec(char *prefix, struct llog_agent_req_rec *larr); +void dump_llog_agent_req_rec(const char *prefix, + const struct llog_agent_req_rec *larr); int cdt_llog_process(const struct lu_env *env, struct mdt_device *mdt, llog_cb_t cb, void *data); int mdt_agent_record_add(const struct lu_env *env, struct mdt_device *mdt, @@ -978,7 +978,6 @@ int mdt_hsm_get_running(struct mdt_thread_info *mti, struct hsm_action_list *hal); bool mdt_hsm_restore_is_running(struct mdt_thread_info *mti, const struct lu_fid *fid); - /* mdt/mdt_hsm_cdt_requests.c */ extern const struct file_operations mdt_hsm_request_fops; void dump_requests(char *prefix, struct coordinator *cdt); @@ -988,75 +987,42 @@ struct cdt_agent_req *mdt_cdt_alloc_request(__u64 compound_id, __u32 archive_id, void mdt_cdt_free_request(struct cdt_agent_req *car); int mdt_cdt_add_request(struct coordinator *cdt, struct cdt_agent_req *new_car); struct cdt_agent_req *mdt_cdt_find_request(struct coordinator *cdt, - __u64 cookie, + const __u64 cookie, const struct lu_fid *fid); void mdt_cdt_get_work_done(struct cdt_agent_req *car, __u64 *done_sz); void mdt_cdt_get_request(struct cdt_agent_req *car); void mdt_cdt_put_request(struct cdt_agent_req *car); struct cdt_agent_req *mdt_cdt_update_request(struct coordinator *cdt, - struct hsm_progress_kernel *pgs); + const struct hsm_progress_kernel *pgs); int mdt_cdt_remove_request(struct coordinator *cdt, __u64 cookie); - -/* fake functions, will be remove with patch LU-3343 */ -static inline struct mdt_object *mdt_hsm_get_md_hsm(struct mdt_thread_info *mti, - struct lu_fid *fid, - struct md_hsm *hsm, - struct mdt_lock_handle *lh) -{ - return ERR_PTR(-EINVAL); -} -static inline bool mdt_hsm_is_action_compat(struct hsm_action_item *hai, - int hal_an, __u64 rq_flags, - struct md_hsm *hsm) -{ - return false; -} -static inline int mdt_hsm_cdt_init(struct mdt_device *mdt) -{ - struct coordinator *cdt = &mdt->mdt_coordinator; - - /* minimal init before final patch landing */ - sema_init(&cdt->cdt_llog_lock, 1); - init_rwsem(&cdt->cdt_agent_lock); - init_rwsem(&cdt->cdt_request_lock); - sema_init(&cdt->cdt_restore_lock, 1); - - CFS_INIT_LIST_HEAD(&cdt->cdt_requests); - CFS_INIT_LIST_HEAD(&cdt->cdt_agents); - CFS_INIT_LIST_HEAD(&cdt->cdt_restore_hdl); - - cdt->cdt_state = CDT_STOPPED; - return 0; -} -static inline int mdt_hsm_cdt_start(struct mdt_device *mdt) -{ - return 0; -} -static inline int mdt_hsm_cdt_stop(struct mdt_device *mdt) -{ - return 0; -} -static inline int mdt_hsm_cdt_fini(struct mdt_device *mdt) -{ - return 0; -} -static inline int mdt_hsm_cdt_wakeup(struct mdt_device *mdt) -{ - return 0; -} -static inline int mdt_hsm_add_hal(struct mdt_thread_info *mti, - struct hsm_action_list *hal, - const struct obd_uuid *uuid) -{ - return 0; -} -static inline int mdt_hsm_update_request_state(struct mdt_thread_info *mti, - struct hsm_progress_kernel *pgs, - bool update_record) -{ - return 0; -} -/* end of fake functions */ +/* mdt/mdt_coordinator.c */ +void mdt_hsm_dump_hal(int level, const char *prefix, + struct hsm_action_list *hal); +/* coordinator management */ +int mdt_hsm_cdt_init(struct mdt_device *mdt); +int mdt_hsm_cdt_start(struct mdt_device *mdt); +int mdt_hsm_cdt_stop(struct mdt_device *mdt); +int mdt_hsm_cdt_fini(struct mdt_device *mdt); +int mdt_hsm_cdt_wakeup(struct mdt_device *mdt); + +/* coordinator control /proc interface */ +int lprocfs_wr_hsm_cdt_control(struct file *file, const char *buffer, + unsigned long count, void *data); +int lprocfs_rd_hsm_cdt_control(char *page, char **start, off_t off, + int count, int *eof, void *data); +/* md_hsm helpers */ +struct mdt_object *mdt_hsm_get_md_hsm(struct mdt_thread_info *mti, + const struct lu_fid *fid, + struct md_hsm *hsm); +/* actions/request helpers */ +int mdt_hsm_add_hal(struct mdt_thread_info *mti, + struct hsm_action_list *hal, struct obd_uuid *uuid); +bool mdt_hsm_is_action_compat(const struct hsm_action_item *hai, + const int hal_an, const __u64 rq_flags, + const struct md_hsm *hsm); +int mdt_hsm_update_request_state(struct mdt_thread_info *mti, + struct hsm_progress_kernel *pgs, + const int update_record); extern struct lu_context_key mdt_thread_key; /* debug issues helper starts here*/ @@ -1219,45 +1185,9 @@ int mdt_ck_thread_start(struct mdt_device *mdt); void mdt_ck_thread_stop(struct mdt_device *mdt); void mdt_ck_timer_callback(unsigned long castmeharder); int mdt_capa_keys_init(const struct lu_env *env, struct mdt_device *mdt); - -static inline void mdt_set_capainfo(struct mdt_thread_info *info, int offset, - const struct lu_fid *fid, - struct lustre_capa *capa) -{ - struct md_capainfo *ci; - - LASSERT(offset >= 0 && offset < MD_CAPAINFO_MAX); - if (!info->mti_mdt->mdt_opts.mo_mds_capa || - !(exp_connect_flags(info->mti_exp) & OBD_CONNECT_MDS_CAPA)) - return; - - ci = md_capainfo(info->mti_env); - LASSERT(ci); - ci->mc_fid[offset] = *fid; - ci->mc_capa[offset] = capa; -} - -static inline void mdt_dump_capainfo(struct mdt_thread_info *info) -{ - struct md_capainfo *ci = md_capainfo(info->mti_env); - int i; - - if (!ci) - return; - for (i = 0; i < MD_CAPAINFO_MAX; i++) { - if (!ci->mc_capa[i]) { - CERROR("no capa for index %d "DFID"\n", - i, PFID(&ci->mc_fid[i])); - continue; - } - if (ci->mc_capa[i] == BYPASS_CAPA) { - CERROR("bypass for index %d "DFID"\n", - i, PFID(&ci->mc_fid[i])); - continue; - } - DEBUG_CAPA(D_ERROR, ci->mc_capa[i], "index %d", i); - } -} +void mdt_set_capainfo(struct mdt_thread_info *info, int offset, + const struct lu_fid *fid, struct lustre_capa *capa); +void mdt_dump_capainfo(struct mdt_thread_info *info); static inline struct obd_device *mdt2obd_dev(const struct mdt_device *mdt) {