X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fmdt%2Fmdt_internal.h;h=ea2f66d6ea96838d8a91aaf5bb48bef7b3d878b1;hp=116d98f18c01e9cb676b501259786addc59de958;hb=ad1810a2dbea1eed5e8b5feb55bdf915a545feb3;hpb=3064318df90ce7019b83c8a7f80e93a9634c00fa diff --git a/lustre/mdt/mdt_internal.h b/lustre/mdt/mdt_internal.h index 116d98f..ea2f66d 100644 --- a/lustre/mdt/mdt_internal.h +++ b/lustre/mdt/mdt_internal.h @@ -27,7 +27,7 @@ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2011, 2013, Intel Corporation. + * Copyright (c) 2011, 2014, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -48,7 +48,6 @@ #ifndef _MDT_INTERNAL_H #define _MDT_INTERNAL_H -#if defined(__KERNEL__) #include #include @@ -78,12 +77,18 @@ struct mdt_object; /* file data for open files on MDS */ struct mdt_file_data { - struct portals_handle mfd_handle; /* must be first */ - __u64 mfd_mode; /* open mode provided by client */ - cfs_list_t mfd_list; /* protected by med_open_lock */ - __u64 mfd_xid; /* xid of the open request */ - struct lustre_handle mfd_old_handle; /* old handle in replay case */ - struct mdt_object *mfd_object; /* point to opened object */ + /** portals handle must be first */ + struct portals_handle mfd_handle; + /** open mode provided by client */ + __u64 mfd_mode; + /** protected by med_open_lock */ + struct list_head mfd_list; + /** xid of the open request */ + __u64 mfd_xid; + /** old handle in replay case */ + struct lustre_handle mfd_old_handle; + /** point to opened object */ + struct mdt_object *mfd_object; }; #define CDT_NONBLOCKING_RESTORE (1ULL << 0) @@ -307,6 +312,13 @@ enum { MDT_CROSS_LOCK }; +/* Special magical errno for communicaiton between mdt_reint_open() + * and mdt_intent_reint() which means return the lock to the client + * for subsequent cross ref open. Previously we used plain -EREMOTE + * but other functions called in that path might return it too and + * confuse us. This is not returned to the client. See LU-5370. */ +#define MDT_EREMOTE_OPEN (EREMOTE + 1024) + struct mdt_reint_record { mdt_reint_t rr_opcode; const struct lustre_handle *rr_handle; @@ -314,7 +326,7 @@ struct mdt_reint_record { const struct lu_fid *rr_fid2; struct lu_name rr_name; struct lu_name rr_tgt_name; - const void *rr_eadata; + void *rr_eadata; int rr_eadatalen; __u32 rr_flags; }; @@ -481,7 +493,7 @@ struct cdt_req_progress { }; struct cdt_agent_req { - cfs_list_t car_request_list; /**< to chain all the req. */ + struct list_head car_request_list; /**< to chain all the req. */ atomic_t car_refcount; /**< reference counter */ __u64 car_compound_id; /**< compound id */ __u64 car_flags; /**< request original flags */ @@ -497,7 +509,7 @@ struct cdt_agent_req { extern struct kmem_cache *mdt_hsm_car_kmem; struct hsm_agent { - cfs_list_t ha_list; /**< to chain the agents */ + struct list_head ha_list; /**< to chain the agents */ struct obd_uuid ha_uuid; /**< agent uuid */ __u32 *ha_archive_id; /**< archive id */ int ha_archive_cnt; /**< number of archive entries @@ -509,10 +521,10 @@ struct hsm_agent { }; struct cdt_restore_handle { - cfs_list_t crh_list; /**< to chain the handle */ - struct lu_fid crh_fid; /**< fid of the object */ - struct ldlm_extent crh_extent; /**< extent of the restore */ - struct mdt_lock_handle crh_lh; /**< lock handle */ + struct list_head crh_list; /**< to chain the handle */ + struct lu_fid crh_fid; /**< fid of the object */ + 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 */ @@ -589,11 +601,16 @@ static inline void mdt_export_evict(struct obd_export *exp) /* Here we use LVB_TYPE to check dne client, because it is * also landed on 2.4. */ -static inline int mdt_is_dne_client(struct obd_export *exp) +static inline bool mdt_is_dne_client(struct obd_export *exp) { return !!(exp_connect_flags(exp) & OBD_CONNECT_LVB_TYPE); } +static inline bool mdt_is_striped_client(struct obd_export *exp) +{ + return exp_connect_flags(exp) & OBD_CONNECT_DIR_STRIPE; +} + int mdt_get_disposition(struct ldlm_reply *rep, int flag); void mdt_set_disposition(struct mdt_thread_info *info, struct ldlm_reply *rep, int flag); @@ -611,6 +628,10 @@ int mdt_lock_setup(struct mdt_thread_info *info, struct mdt_object *o, struct mdt_lock_handle *lh); +int mdt_check_resent_lock(struct mdt_thread_info *info, + struct mdt_object *mo, + struct mdt_lock_handle *lhc); + int mdt_object_lock(struct mdt_thread_info *, struct mdt_object *, struct mdt_lock_handle *, @@ -659,6 +680,10 @@ int mdt_name_unpack(struct req_capsule *pill, int mdt_close_unpack(struct mdt_thread_info *info); int mdt_reint_unpack(struct mdt_thread_info *info, __u32 op); int mdt_reint_rec(struct mdt_thread_info *, struct mdt_lock_handle *); +#ifdef CONFIG_FS_POSIX_ACL +int mdt_pack_acl2body(struct mdt_thread_info *info, struct mdt_body *repbody, + struct mdt_object *o, struct lu_nodemap *nodemap); +#endif void mdt_pack_attr2body(struct mdt_thread_info *info, struct mdt_body *b, const struct lu_attr *attr, const struct lu_fid *fid); @@ -726,8 +751,6 @@ struct mdt_file_data *mdt_mfd_new(const struct mdt_export_data *med); int mdt_mfd_close(struct mdt_thread_info *info, struct mdt_file_data *mfd); void mdt_mfd_free(struct mdt_file_data *mfd); int mdt_close(struct tgt_session_info *tsi); -int mdt_attr_set(struct mdt_thread_info *info, struct mdt_object *mo, - struct md_attr *ma, int flags); int mdt_add_dirty_flag(struct mdt_thread_info *info, struct mdt_object *mo, struct md_attr *ma); int mdt_done_writing(struct tgt_session_info *tsi); @@ -756,9 +779,6 @@ void mdt_thread_info_init(struct ptlrpc_request *req, void mdt_thread_info_fini(struct mdt_thread_info *mti); struct mdt_thread_info *tsi2mdt_info(struct tgt_session_info *tsi); -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, const struct md_hsm *mh); @@ -815,6 +835,9 @@ __u32 mdt_identity_get_perm(struct md_identity *, __u32, lnet_nid_t); int mdt_pack_remote_perm(struct mdt_thread_info *, struct mdt_object *, void *); +/* mdt/mdt_recovery.c */ +void mdt_req_from_lcd(struct ptlrpc_request *req, struct lsd_client_data *lcd); + /* mdt/mdt_hsm.c */ int mdt_hsm_state_get(struct tgt_session_info *tsi); int mdt_hsm_state_set(struct tgt_session_info *tsi); @@ -896,13 +919,12 @@ 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); +ssize_t mdt_hsm_cdt_control_seq_write(struct file *file, const char *buffer, + size_t count, loff_t *off); +int mdt_hsm_cdt_control_seq_show(struct seq_file *m, void *data); int hsm_cdt_procfs_init(struct mdt_device *mdt); void hsm_cdt_procfs_fini(struct mdt_device *mdt); -struct lprocfs_vars *hsm_cdt_get_proc_vars(void); +struct lprocfs_seq_vars *hsm_cdt_get_proc_vars(void); /* md_hsm helpers */ struct mdt_object *mdt_hsm_get_md_hsm(struct mdt_thread_info *mti, const struct lu_fid *fid, @@ -1042,8 +1064,6 @@ enum { }; void mdt_counter_incr(struct ptlrpc_request *req, int opcode); void mdt_stats_counter_init(struct lprocfs_stats *stats); -void lprocfs_mdt_init_vars(struct lprocfs_static_vars *lvars); -void lprocfs_mds_init_vars(struct lprocfs_static_vars *lvars); int mdt_procfs_init(struct mdt_device *mdt, const char *name); void mdt_procfs_fini(struct mdt_device *mdt); @@ -1079,5 +1099,15 @@ static inline char *mdt_obd_name(struct mdt_device *mdt) int mds_mod_init(void); void mds_mod_exit(void); -#endif /* __KERNEL__ */ -#endif /* _MDT_H */ +static inline char *mdt_req_get_jobid(struct ptlrpc_request *req) +{ + struct obd_export *exp = req->rq_export; + char *jobid = NULL; + + if (exp_connect_flags(exp) & OBD_CONNECT_JOBSTATS) + jobid = lustre_msg_get_jobid(req->rq_reqmsg); + + return jobid; +} + +#endif /* _MDT_INTERNAL_H */