X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Fobd.h;h=96c77a007b09f59bd1953185e76d5aca5fa0b845;hb=6722a95fd0416fa6f24140130ea8a1e0df5f1542;hp=b566809414ff2b0dc968787f6a66e1b8072633d7;hpb=7f412954ad38b540ccbbf241b25c594faf5ca79d;p=fs%2Flustre-release.git diff --git a/lustre/include/obd.h b/lustre/include/obd.h index b566809..96c77a0 100644 --- a/lustre/include/obd.h +++ b/lustre/include/obd.h @@ -88,7 +88,7 @@ struct obd_info { /* OBD_STATFS_* flags */ __u64 oi_flags; struct obd_device *oi_obd; - struct lmv_tgt_desc *oi_tgt; + struct lu_tgt_desc *oi_tgt; /* statfs data specific for every OSC, if needed at all. */ struct obd_statfs *oi_osfs; /* An update callback which is called to update some data on upper @@ -99,21 +99,18 @@ struct obd_info { }; struct obd_type { - struct list_head typ_chain; struct obd_ops *typ_dt_ops; struct md_ops *typ_md_ops; struct proc_dir_entry *typ_procroot; - struct proc_dir_entry *typ_procsym; struct dentry *typ_debugfs_entry; #ifdef HAVE_SERVER_SUPPORT bool typ_sym_filter; #endif - char *typ_name; - int typ_refcnt; + atomic_t typ_refcnt; struct lu_device_type *typ_lu; - spinlock_t obd_type_lock; struct kobject typ_kobj; }; +#define typ_name typ_kobj.name struct brw_page { u64 off; @@ -343,6 +340,8 @@ struct client_obd { __u32 cl_supp_cksum_types; /* checksum algorithm to be used */ enum cksum_types cl_cksum_type; + /* preferred checksum algorithm to be used */ + enum cksum_types cl_preferred_cksum_type; /* also protected by the poorly named _loi_list_lock lock above */ struct osc_async_rc cl_ar; @@ -379,29 +378,12 @@ struct echo_client_obd { __u64 ec_unique; }; -/* Generic subset of OSTs */ -struct ost_pool { - __u32 *op_array; /* array of index of - lov_obd->lov_tgts */ - unsigned int op_count; /* number of OSTs in the array */ - unsigned int op_size; /* allocated size of lp_array */ - struct rw_semaphore op_rw_sem; /* to protect ost_pool use */ -}; - /* allow statfs data caching for 1 second */ #define OBD_STATFS_CACHE_SECONDS 1 +/* arbitrary maximum. larger would be useless, allows catching bogus input */ +#define OBD_STATFS_CACHE_MAX_AGE 3600 /* seconds */ -struct lov_tgt_desc { - struct list_head ltd_kill; - struct obd_uuid ltd_uuid; - struct obd_device *ltd_obd; - struct obd_export *ltd_exp; - __u32 ltd_gen; - __u32 ltd_index; /* index in lov_obd->tgts */ - unsigned long ltd_active:1,/* is this target up for requests */ - ltd_activate:1,/* should target be activated */ - ltd_reap:1; /* should this target be deleted */ -}; +#define lov_tgt_desc lu_tgt_desc struct lov_md_tgt_desc { struct obd_device *lmtd_mdc; @@ -411,7 +393,7 @@ struct lov_md_tgt_desc { struct lov_obd { struct lov_desc desc; struct lov_tgt_desc **lov_tgts; /* sparse array */ - struct ost_pool lov_packed; /* all OSTs in a packed + struct lu_tgt_pool lov_packed; /* all OSTs in a packed array */ struct mutex lov_lock; struct obd_connect_data lov_ocd; @@ -436,36 +418,29 @@ struct lov_obd { struct kobject *lov_tgts_kobj; }; -struct lmv_tgt_desc { - struct obd_uuid ltd_uuid; - struct obd_device *ltd_obd; - struct obd_export *ltd_exp; - __u32 ltd_idx; - struct mutex ltd_fid_mutex; - struct obd_statfs ltd_statfs; - time64_t ltd_statfs_age; - unsigned long ltd_active:1; /* target up for requests */ -}; +#define lmv_tgt_desc lu_tgt_desc struct lmv_obd { struct lu_client_fld lmv_fld; spinlock_t lmv_lock; - struct lmv_desc desc; - struct mutex lmv_init_mutex; int connected; int max_easize; int max_def_easize; u32 lmv_statfs_start; - u32 tgts_size; /* size of tgts array */ - struct lmv_tgt_desc **tgts; + struct lu_tgt_descs lmv_mdt_descs; struct obd_connect_data conn_data; struct kobject *lmv_tgts_kobj; void *lmv_cache; + + __u32 lmv_qos_rr_index; }; +#define lmv_mdt_count lmv_mdt_descs.ltd_lmv_desc.ld_tgt_count +#define lmv_qos lmv_mdt_descs.ltd_qos + /* Minimum sector size is 512 */ #define MAX_GUARD_NUMBER (PAGE_SIZE / 512) @@ -480,6 +455,8 @@ struct niobuf_local { __u16 lnb_guards[MAX_GUARD_NUMBER]; __u16 lnb_guard_rpc:1; __u16 lnb_guard_disk:1; + /* separate unlock for read path to allow shared access */ + __u16 lnb_locked:1; }; struct tgt_thread_big_cache { @@ -612,7 +589,6 @@ struct obd_llog_group { struct llog_ctxt *olg_ctxts[LLOG_MAX_CTXTS]; wait_queue_head_t olg_waitq; spinlock_t olg_lock; - struct mutex olg_cat_processing; }; /* corresponds to one of the obd's */ @@ -688,7 +664,7 @@ struct obd_device { struct list_head obd_exports_timed; time64_t obd_eviction_timer; /* for ping evictor */ - int obd_max_recoverable_clients; + atomic_t obd_max_recoverable_clients; atomic_t obd_connected_clients; int obd_stale_clients; /* this lock protects all recovery list_heads, timer and @@ -704,8 +680,11 @@ struct obd_device { time64_t obd_recovery_start; /* seconds, for lprocfs_status */ time64_t obd_recovery_end; - time64_t obd_recovery_time_hard; - time64_t obd_recovery_timeout; + /* To tell timeouts from time stamps Lustre uses time_t + * instead of time64_t. + */ + time_t obd_recovery_time_hard; + time_t obd_recovery_timeout; int obd_recovery_ir_factor; /* new recovery stuff from CMD2 */ @@ -928,6 +907,8 @@ struct md_op_data { bool op_post_migrate; /* used to access dir with bash hash */ __u32 op_stripe_index; + /* Archive ID for PCC attach */ + __u32 op_archive_id; }; struct md_callback { @@ -1053,7 +1034,7 @@ struct lustre_md { struct lmv_foreign_md *lfm; }; struct lmv_stripe_md *default_lmv; -#ifdef CONFIG_FS_POSIX_ACL +#ifdef CONFIG_LUSTRE_FS_POSIX_ACL struct posix_acl *posix_acl; #endif }; @@ -1178,6 +1159,8 @@ struct md_ops { struct lu_fid *fid); int (*m_unpackmd)(struct obd_export *exp, struct lmv_stripe_md **plsm, const union lmv_mds_md *lmv, size_t lmv_size); + int (*m_rmfid)(struct obd_export *exp, struct fid_array *fa, int *rcs, + struct ptlrpc_request_set *set); }; static inline struct md_open_data *obd_mod_alloc(void) @@ -1292,8 +1275,8 @@ static inline void client_adjust_max_dirty(struct client_obd *cli) cli->cl_dirty_max_pages = dirty_max; } - if (cli->cl_dirty_max_pages > totalram_pages / 8) - cli->cl_dirty_max_pages = totalram_pages / 8; + if (cli->cl_dirty_max_pages > cfs_totalram_pages() / 8) + cli->cl_dirty_max_pages = cfs_totalram_pages() / 8; /* This value is exported to userspace through the max_dirty_mb * parameter. So we round up the number of pages to make it a round