X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Fobd.h;h=199533080ac1438e1f5785f80d7b5c1aac6b6b28;hb=1dce0d2706dfe8ae4d85c33d251c9320eb484088;hp=e86e1531771270d1253075ed7ee8a8d1a815cefe;hpb=2957787997522e3967176903dd7c6f1e04964dc4;p=fs%2Flustre-release.git diff --git a/lustre/include/obd.h b/lustre/include/obd.h index e86e153..1995330 100644 --- a/lustre/include/obd.h +++ b/lustre/include/obd.h @@ -34,6 +34,10 @@ #include #include #include +#include + +#include + #define MAX_OBD_DEVICES 8192 @@ -48,7 +52,7 @@ struct loi_oap_pages { struct osc_async_rc { int ar_rc; int ar_force_sync; - int ar_min_xid; + __u64 ar_min_xid; }; struct lov_oinfo { /* per-stripe data structure */ @@ -65,7 +69,7 @@ struct lov_oinfo { /* per-stripe data structure */ struct list_head loi_write_item; struct list_head loi_read_item; - unsigned loi_kms_valid:1; + unsigned long loi_kms_valid:1; __u64 loi_kms; /* known minimum size */ struct ost_lvb loi_lvb; struct osc_async_rc loi_ar; @@ -101,7 +105,7 @@ struct lov_array_info { struct lov_stripe_md { spinlock_t lsm_lock; - void *lsm_lock_owner; /* debugging */ + pid_t lsm_lock_owner; /* debugging */ struct { /* Public members. */ @@ -138,8 +142,11 @@ struct obd_info { * OSC. (e.g. lov_prep_enqueue_set initialises extent of the policy, * and osc_enqueue passes it into ldlm_lock_match & ldlm_cli_enqueue. */ ldlm_policy_data_t oi_policy; - /* Flags used while lock handling. The flags obtained on the enqueue - * request are set here, therefore they are request specific. */ + /* Flags used for set request specific flags: + - while lock handling, the flags obtained on the enqueue + request are set here. + - while stats, the flags used for control delay/resend. + */ int oi_flags; /* Lock handle specific for every OSC lock. */ struct lustre_handle *oi_lockh; @@ -234,7 +241,7 @@ struct oig_callback_context { * callees of this method are encouraged to abort their state * in the oig. This may be called multiple times. */ void (*occ_interrupted)(struct oig_callback_context *occ); - unsigned int interrupted:1; + unsigned long interrupted:1; }; /* Individual type definitions */ @@ -248,31 +255,30 @@ struct obd_device_target { struct lustre_quota_ctxt obt_qctxt; }; +typedef void (*obd_pin_extent_cb)(void *data); +typedef int (*obd_page_removal_cb_t)(void *data, int discard); +typedef int (*obd_lock_cancel_cb)(struct ldlm_lock *,struct ldlm_lock_desc *, + void *, int); + /* llog contexts */ enum llog_ctxt_id { LLOG_CONFIG_ORIG_CTXT = 0, - LLOG_CONFIG_REPL_CTXT = 1, - LLOG_MDS_OST_ORIG_CTXT = 2, - LLOG_MDS_OST_REPL_CTXT = 3, - LLOG_SIZE_ORIG_CTXT = 4, - LLOG_SIZE_REPL_CTXT = 5, - LLOG_MD_ORIG_CTXT = 6, - LLOG_MD_REPL_CTXT = 7, - LLOG_RD1_ORIG_CTXT = 8, - LLOG_RD1_REPL_CTXT = 9, - LLOG_TEST_ORIG_CTXT = 10, - LLOG_TEST_REPL_CTXT = 11, - LLOG_LOVEA_ORIG_CTXT = 12, - LLOG_LOVEA_REPL_CTXT = 13, + LLOG_CONFIG_REPL_CTXT, + LLOG_MDS_OST_ORIG_CTXT, + LLOG_MDS_OST_REPL_CTXT, + LLOG_SIZE_ORIG_CTXT, + LLOG_SIZE_REPL_CTXT, + LLOG_RD1_ORIG_CTXT, + LLOG_RD1_REPL_CTXT, + LLOG_TEST_ORIG_CTXT, + LLOG_TEST_REPL_CTXT, + LLOG_LOVEA_ORIG_CTXT, + LLOG_LOVEA_REPL_CTXT, LLOG_MAX_CTXTS }; #define FILTER_SUBDIR_COUNT 32 /* set to zero for no subdirs */ -#define FILTER_GROUP_LLOG 1 -#define FILTER_GROUP_ECHO 2 -#define FILTER_GROUP_MDS0 3 - struct filter_subdirs { cfs_dentry_t *dentry[FILTER_SUBDIR_COUNT]; }; @@ -283,17 +289,6 @@ struct filter_ext { __u64 fe_end; }; -struct obd_llogs { - struct llog_ctxt *llog_ctxt[LLOG_MAX_CTXTS]; -}; - -struct filter_group_llog { - struct list_head list; - int group; - struct obd_llogs *llogs; - struct obd_export *exp; -}; - struct filter_obd { /* NB this field MUST be first */ struct obd_device_target fo_obt; @@ -366,10 +361,16 @@ struct filter_obd { int fo_fmd_max_num; /* per exp filter_mod_data */ int fo_fmd_max_age; /* jiffies to fmd expiry */ + /* sptlrpc stuff */ + rwlock_t fo_sptlrpc_lock; + struct sptlrpc_rule_set fo_sptlrpc_rset; + /* capability related */ unsigned int fo_fl_oss_capa; struct list_head fo_capa_keys; struct hlist_head *fo_capa_hash; + + void *fo_lcm; }; #define OSC_MAX_RIF_DEFAULT 8 @@ -383,6 +384,7 @@ struct filter_obd { struct mdc_rpc_lock; struct obd_import; +struct lustre_cache; struct client_obd { struct semaphore cl_sem; struct obd_uuid cl_target_uuid; @@ -395,7 +397,8 @@ struct client_obd { int cl_max_mds_cookiesize; /* security configuration */ - struct sec_flavor_config cl_sec_conf; + struct sptlrpc_rule_set cl_sptlrpc_rset; + enum lustre_sec_part cl_sec_part; //struct llog_canceld_ctxt *cl_llcd; /* it's included by obd_llog_ctxt */ void *cl_llcd_offset; @@ -443,6 +446,10 @@ struct client_obd { struct obd_histogram cl_read_offset_hist; struct obd_histogram cl_write_offset_hist; + /* number of in flight destroy rpcs is limited to max_rpcs_in_flight */ + atomic_t cl_destroy_in_flight; + cfs_waitq_t cl_destroy_waitq; + struct mdc_rpc_lock *cl_rpc_lock; struct mdc_rpc_lock *cl_setattr_lock; struct mdc_rpc_lock *cl_close_lock; @@ -455,9 +462,13 @@ struct client_obd { atomic_t cl_mgc_refcount; struct obd_export *cl_mgc_mgsexp; - /* Flags section */ - unsigned int cl_checksum:1; /* debug checksums */ - + /* checksumming for data sent over the network */ + unsigned int cl_checksum:1; /* 0 = disabled, 1 = enabled */ + /* supported checksum types that are worked out at connect time */ + __u32 cl_supp_cksum_types; + /* checksum algorithm to be used */ + cksum_type_t cl_cksum_type; + /* also protected by the poorly named _loi_list_lock lock above */ struct osc_async_rc cl_ar; @@ -468,6 +479,10 @@ struct client_obd { struct lu_client_seq *cl_seq; atomic_t cl_resends; /* resend count */ + + /* Cache of triples */ + struct lustre_cache *cl_cache; + obd_lock_cancel_cb cl_ext_lock_cancel_cb; }; #define obd2cli_tgt(obd) ((char *)(obd)->u.cli.cl_target_uuid.uuid) @@ -484,15 +499,6 @@ struct mgs_obd { cfs_proc_dir_entry_t *mgs_proc_live; }; -/* hah, upper limit 64 should be enough */ -#define N_NOSQUASH_NIDS 64 -struct rootsquash_info { - uid_t rsi_uid; - gid_t rsi_gid; - int rsi_n_nosquash_nids; - lnet_nid_t rsi_nosquash_nids[N_NOSQUASH_NIDS]; -}; - struct mds_obd { /* NB this field MUST be first */ struct obd_device_target mds_obt; @@ -516,19 +522,23 @@ struct mds_obd { cfs_dentry_t *mds_logs_dir; cfs_dentry_t *mds_objects_dir; struct llog_handle *mds_cfg_llh; -// struct llog_handle *mds_catalog; struct obd_device *mds_osc_obd; /* XXX lov_obd */ struct obd_uuid mds_lov_uuid; char *mds_profile; struct obd_export *mds_osc_exp; /* XXX lov_exp */ struct lov_desc mds_lov_desc; __u32 mds_id; - obd_id *mds_lov_objids; - int mds_lov_objids_size; - __u32 mds_lov_objids_in_file; - unsigned int mds_lov_objids_dirty:1; - int mds_lov_nextid_set; + + /* mark pages dirty for write. */ + bitmap_t *mds_lov_page_dirty; + /* array for store pages with obd_id */ + void **mds_lov_page_array; + /* file for store objid */ struct file *mds_lov_objid_filp; + __u32 mds_lov_objid_count; + __u32 mds_lov_objid_lastpage; + __u32 mds_lov_objid_lastidx; + struct file *mds_health_check_filp; unsigned long *mds_client_bitmap; // struct upcall_cache *mds_group_hash; @@ -536,22 +546,37 @@ struct mds_obd { struct lustre_quota_info mds_quota_info; struct semaphore mds_qonoff_sem; struct semaphore mds_health_sem; - unsigned long mds_lov_objids_valid:1, - mds_fl_user_xattr:1, + unsigned long mds_fl_user_xattr:1, mds_fl_acl:1, - mds_evict_ost_nids:1; - + mds_evict_ost_nids:1, + mds_fl_cfglog:1, + mds_fl_synced:1; struct upcall_cache *mds_identity_cache; - struct upcall_cache *mds_rmtacl_cache; - - /* root squash */ - struct rootsquash_info *mds_rootsquash_info; /* for capability keys update */ struct lustre_capa_key *mds_capa_keys; }; +/* lov objid */ +extern __u32 mds_max_ost_index; + +#define MDS_LOV_ALLOC_SIZE (CFS_PAGE_SIZE) + +#define OBJID_PER_PAGE() (MDS_LOV_ALLOC_SIZE / sizeof(obd_id)) + +#define MDS_LOV_OBJID_PAGES_COUNT (mds_max_ost_index/OBJID_PER_PAGE()) + +extern int mds_lov_init_objids(struct obd_device *obd); +extern void mds_lov_destroy_objids(struct obd_device *obd); + +struct obd_id_info { + __u32 idx; + obd_id *data; +}; + +/* */ + struct echo_obd { struct obdo eo_oa; spinlock_t eo_lock; @@ -599,7 +624,7 @@ struct lov_qos { __u32 *lq_rr_array; /* round-robin optimized list */ unsigned int lq_rr_size; /* rr array size */ unsigned int lq_prio_free; /* priority for free space */ - unsigned int lq_dirty:1, /* recalc qos data */ + unsigned long lq_dirty:1, /* recalc qos data */ lq_dirty_rr:1, /* recalc round-robin list */ lq_same_space:1,/* the ost's all have approx. the same space avail */ @@ -612,7 +637,7 @@ struct lov_tgt_desc { struct ltd_qos ltd_qos; /* qos info per target */ __u32 ltd_gen; __u32 ltd_index; /* index in lov_obd->tgts */ - unsigned int ltd_active:1,/* is this target up for requests */ + unsigned long ltd_active:1,/* is this target up for requests */ ltd_activate:1,/* should this target be activated */ ltd_reap:1; /* should this target be deleted */ }; @@ -632,6 +657,9 @@ struct lov_obd { __u32 lov_offset_idx; /* aliasing for start_idx */ int lov_start_count;/* reseed counter */ int lov_connects; + obd_page_removal_cb_t lov_page_removal_cb; + obd_pin_extent_cb lov_page_pin_cb; + obd_lock_cancel_cb lov_lock_cancel_cb; }; struct lmv_tgt_desc { @@ -713,7 +741,6 @@ struct niobuf_local { struct obd_trans_info { __u64 oti_transno; __u64 oti_xid; - __u64 *oti_objid; /* Only used on the server side for tracking acks. */ struct oti_req_ack_lock { struct lustre_handle lock; @@ -734,17 +761,18 @@ static inline void oti_init(struct obd_trans_info *oti, { if (oti == NULL) return; - memset(oti, 0, sizeof *oti); + memset(oti, 0, sizeof(*oti)); if (req == NULL) return; oti->oti_xid = req->rq_xid; - if (req->rq_repmsg && req->rq_reqmsg != 0) + if (req->rq_repmsg != NULL) oti->oti_transno = lustre_msg_get_transno(req->rq_repmsg); oti->oti_thread_id = req->rq_svc_thread ? req->rq_svc_thread->t_id : -1; - oti->oti_conn_cnt = lustre_msg_get_conn_cnt(req->rq_reqmsg); + if (req->rq_reqmsg != NULL) + oti->oti_conn_cnt = lustre_msg_get_conn_cnt(req->rq_reqmsg); } static inline void oti_alloc_cookies(struct obd_trans_info *oti,int num_cookies) @@ -818,6 +846,24 @@ struct target_recovery_data { struct completion trd_finishing; }; +#define OBD_LLOG_GROUP 0 + +enum filter_groups { + FILTER_GROUP_LLOG = 1, + FILTER_GROUP_ECHO, + FILTER_GROUP_MDS0 +}; + +struct obd_llog_group { + struct list_head olg_list; + int olg_group; + struct llog_ctxt *olg_ctxts[LLOG_MAX_CTXTS]; + cfs_waitq_t olg_waitq; + spinlock_t olg_lock; + struct obd_export *olg_exp; + int olg_initializing; +}; + /* corresponds to one of the obd's */ #define MAX_OBD_NAME 128 #define OBD_DEVICE_MAGIC 0XAB5CD6EF @@ -832,24 +878,34 @@ struct obd_device { struct lu_device *obd_lu_dev; int obd_minor; - unsigned int obd_attached:1, /* finished attach */ - obd_set_up:1, /* finished setup */ - obd_recovering:1, /* there are recoverable clients */ - obd_abort_recovery:1,/* somebody ioctl'ed us to abort */ - obd_replayable:1, /* recovery is enabled; inform clients */ - obd_no_transno:1, /* no committed-transno notification */ - obd_no_recov:1, /* fail instead of retry messages */ - obd_req_replaying:1, /* replaying requests */ - obd_stopping:1, /* started cleanup */ - obd_starting:1, /* started setup */ - obd_force:1, /* cleanup with > 0 obd refcount */ - obd_fail:1, /* cleanup with failover */ - obd_async_recov:1, /* allow asyncronous orphan cleanup */ - obd_no_conn:1; /* deny new connections */ - atomic_t obd_refcount; + unsigned long obd_attached:1, /* finished attach */ + obd_set_up:1, /* finished setup */ + obd_recovering:1, /* there are recoverable clients */ + obd_abort_recovery:1,/* somebody ioctl'ed us to abort */ + obd_replayable:1, /* recovery is enabled; inform clients */ + obd_no_transno:1, /* no committed-transno notification */ + obd_no_recov:1, /* fail instead of retry messages */ + obd_req_replaying:1, /* replaying requests */ + obd_stopping:1, /* started cleanup */ + obd_starting:1, /* started setup */ + obd_force:1, /* cleanup with > 0 obd refcount */ + obd_fail:1, /* cleanup with failover */ + obd_async_recov:1, /* allow asyncronous orphan cleanup */ + obd_no_conn:1, /* deny new connections */ + obd_inactive:1; /* device active/inactive + * (for /proc/status only!!) */ + /* uuid-export hash body */ + struct lustre_class_hash_body *obd_uuid_hash_body; + /* nid-export hash body */ + struct lustre_class_hash_body *obd_nid_hash_body; + /* nid stats body */ + struct lustre_class_hash_body *obd_nid_stats_hash_body; + struct list_head obd_nid_stats; + atomic_t obd_refcount; cfs_waitq_t obd_refcount_waitq; struct list_head obd_exports; int obd_num_exports; + spinlock_t obd_nid_lock; struct ldlm_namespace *obd_namespace; struct ptlrpc_client obd_ldlm_client; /* XXX OST/MDS only */ /* a spinlock is OK for what we do now, may need a semaphore later */ @@ -861,7 +917,7 @@ struct obd_device { struct obd_statfs obd_osfs; /* locked by obd_osfs_lock */ __u64 obd_osfs_age; struct lvfs_run_ctxt obd_lvfs_ctxt; - struct llog_ctxt *obd_llog_ctxt[LLOG_MAX_CTXTS]; + struct obd_llog_group obd_olg; /* default llog group */ struct obd_device *obd_observer; struct obd_notify_upcall obd_upcall; struct obd_export *obd_self_export; @@ -884,8 +940,9 @@ struct obd_device { struct list_head obd_uncommitted_replies; spinlock_t obd_uncommitted_replies_lock; cfs_timer_t obd_recovery_timer; - time_t obd_recovery_start; - time_t obd_recovery_end; + time_t obd_recovery_start; /* seconds */ + time_t obd_recovery_end; /* seconds */ + time_t obd_recovery_max_time; /* seconds, bz13079 */ /* new recovery stuff from CMD2 */ struct target_recovery_data obd_recovery_data; @@ -917,12 +974,18 @@ struct obd_device { struct lprocfs_stats *md_stats; cfs_proc_dir_entry_t *obd_proc_entry; - cfs_proc_dir_entry_t *obd_proc_exports; + cfs_proc_dir_entry_t *obd_proc_exports_entry; cfs_proc_dir_entry_t *obd_svc_procroot; struct lprocfs_stats *obd_svc_stats; - struct semaphore obd_proc_exp_sem; atomic_t obd_evict_inprogress; cfs_waitq_t obd_evict_inprogress_waitq; + + /** + * Ldlm pool part. Save last calculated SLV and Limit. + */ + rwlock_t obd_pool_lock; + int obd_pool_limit; + __u64 obd_pool_slv; }; #define OBD_OPT_FORCE 0x0001 @@ -956,9 +1019,36 @@ enum obd_cleanup_stage { #define KEY_CONN_DATA "conn_data" #define KEY_MAX_EASIZE "max_easize" #define KEY_REVIMP_UPD "revimp_update" +#define KEY_LOV_IDX "lov_idx" +#define KEY_LAST_ID "last_id" +#define KEY_READONLY "read-only" +#define KEY_LOCK_TO_STRIPE "lock_to_stripe" +#define KEY_CHECKSUM "checksum" +#define KEY_UNLINKED "unlinked" +#define KEY_EVICT_BY_NID "evict_by_nid" +#define KEY_REGISTER_TARGET "register_target" +#define KEY_SET_FS "set_fs" +#define KEY_CLEAR_FS "clear_fs" +#define KEY_BLOCKSIZE "blocksize" +#define KEY_BLOCKSIZE_BITS "blocksize_bits" +/* XXX unused ?*/ +#define KEY_INTERMDS "inter_mds" +#define KEY_ASYNC "async" struct lu_context; +static inline int it_to_lock_mode(struct lookup_intent *it) +{ + /* CREAT needs to be tested before open (both could be set) */ + if (it->it_op & IT_CREAT) + return LCK_CW; + else if (it->it_op & (IT_READDIR | IT_GETATTR | IT_OPEN | IT_LOOKUP)) + return LCK_CR; + + LASSERTF(0, "Invalid it_op: %d\n", it->it_op); + return -EINVAL; +} + struct md_op_data { struct lu_fid op_fid1; /* operation fid1 (usualy parent) */ struct lu_fid op_fid2; /* operation fid2 (usualy child) */ @@ -1002,6 +1092,22 @@ struct md_op_data { __u32 op_opc; }; +struct md_enqueue_info; +/* metadata stat-ahead */ +typedef int (* md_enqueue_cb_t)(struct ptlrpc_request *req, + struct md_enqueue_info *minfo, + int rc); + +struct md_enqueue_info { + struct md_op_data mi_data; + struct lookup_intent mi_it; + struct lustre_handle mi_lockh; + struct dentry *mi_dentry; + md_enqueue_cb_t mi_cb; + unsigned int mi_generation; + void *mi_cbdata; +}; + struct obd_ops { struct module *o_owner; int (*o_iocontrol)(unsigned int cmd, struct obd_export *exp, int len, @@ -1029,8 +1135,10 @@ struct obd_ops { * asked for. If @ocd == NULL, use default parameters. */ int (*o_connect)(const struct lu_env *env, struct lustre_handle *conn, struct obd_device *src, - struct obd_uuid *cluuid, struct obd_connect_data *ocd); - int (*o_reconnect)(struct obd_export *exp, struct obd_device *src, + struct obd_uuid *cluuid, struct obd_connect_data *ocd, + void *localdata); + int (*o_reconnect)(const struct lu_env *env, + struct obd_export *exp, struct obd_device *src, struct obd_uuid *cluuid, struct obd_connect_data *ocd); int (*o_disconnect)(struct obd_export *exp); @@ -1050,7 +1158,7 @@ struct obd_ops { int (*o_fid_delete)(struct obd_export *exp, const struct lu_fid *fid); int (*o_statfs)(struct obd_device *obd, struct obd_statfs *osfs, - __u64 max_age); + __u64 max_age, __u32 flags); int (*o_statfs_async)(struct obd_device *obd, struct obd_info *oinfo, __u64 max_age, struct ptlrpc_request_set *set); int (*o_packmd)(struct obd_export *exp, struct lov_mds_md **disk_tgt, @@ -1062,7 +1170,7 @@ struct obd_ops { int (*o_preallocate)(struct lustre_handle *, obd_count *req, obd_id *ids); /* FIXME: add fid capability support for create & destroy! */ - int (*o_precreate)(struct obd_export *exp, int need_create); + int (*o_precreate)(struct obd_export *exp); int (*o_create)(struct obd_export *exp, struct obdo *oa, struct lov_stripe_md **ea, struct obd_trans_info *oti); int (*o_destroy)(struct obd_export *exp, struct obdo *oa, @@ -1088,7 +1196,16 @@ struct obd_ops { struct lov_oinfo *loi, cfs_page_t *page, obd_off offset, struct obd_async_page_ops *ops, void *data, - void **res); + void **res, int nocache, + struct lustre_handle *lockh); + int (*o_reget_short_lock)(struct obd_export *exp, + struct lov_stripe_md *lsm, + void **res, int rw, + obd_off start, obd_off end, + void **cookie); + int (*o_release_short_lock)(struct obd_export *exp, + struct lov_stripe_md *lsm, obd_off end, + void *cookie, int rw); int (*o_queue_async_io)(struct obd_export *exp, struct lov_stripe_md *lsm, struct lov_oinfo *loi, void *cookie, @@ -1159,7 +1276,7 @@ struct obd_ops { int cmd, obd_off *); /* llog related obd_methods */ - int (*o_llog_init)(struct obd_device *obd, struct obd_llogs *llog, + int (*o_llog_init)(struct obd_device *obd, struct obd_llog_group *grp, struct obd_device *disk_obd, int count, struct llog_catid *logid, struct obd_uuid *uuid); int (*o_llog_finish)(struct obd_device *obd, int count); @@ -1183,6 +1300,17 @@ struct obd_ops { int (*o_quotactl)(struct obd_export *, struct obd_quotactl *); int (*o_ping)(struct obd_export *exp); + + int (*o_register_page_removal_cb)(struct obd_export *exp, + obd_page_removal_cb_t cb, + obd_pin_extent_cb pin_cb); + int (*o_unregister_page_removal_cb)(struct obd_export *exp, + obd_page_removal_cb_t cb); + int (*o_register_lock_cancel_cb)(struct obd_export *exp, + obd_lock_cancel_cb cb); + int (*o_unregister_lock_cancel_cb)(struct obd_export *exp, + obd_lock_cancel_cb cb); + /* * NOTE: If adding ops, add another LPROCFS_OBD_OP_INIT() line * to lprocfs_alloc_obd_stats() in obdclass/lprocfs_status.c. @@ -1211,8 +1339,9 @@ enum { #define MEA_MAGIC_ALL_CHARS 0xb222a11c #define MEA_MAGIC_HASH_SEGMENT 0xb222a11b -#define MAX_HASH_SIZE 0x7fffffffUL -#define MAX_HASH_HIGHEST_BIT 0x10000000 +#define MAX_HASH_SIZE_32 0x7fffffffUL +#define MAX_HASH_SIZE 0x7fffffffffffffffULL +#define MAX_HASH_HIGHEST_BIT 0x1000000000000000 struct lustre_md { struct mdt_body *body; @@ -1231,6 +1360,8 @@ struct md_open_data { struct list_head mod_replay_list; }; +struct lookup_intent; + struct md_ops { int (*m_getstatus)(struct obd_export *, struct lu_fid *, struct obd_capa **); @@ -1251,7 +1382,7 @@ struct md_ops { struct ptlrpc_request **); int (*m_getattr_name)(struct obd_export *, const struct lu_fid *, struct obd_capa *, const char *, int, obd_valid, - int, struct ptlrpc_request **); + int, __u32, struct ptlrpc_request **); int (*m_intent_lock)(struct obd_export *, struct md_op_data *, void *, int, struct lookup_intent *, int, struct ptlrpc_request **, @@ -1278,7 +1409,7 @@ struct md_ops { int (*m_setxattr)(struct obd_export *, const struct lu_fid *, struct obd_capa *, obd_valid, const char *, - const char *, int, int, int, + const char *, int, int, int, __u32, struct ptlrpc_request **); int (*m_getxattr)(struct obd_export *, const struct lu_fid *, @@ -1289,7 +1420,7 @@ struct md_ops { int (*m_init_ea_size)(struct obd_export *, int, int, int); int (*m_get_lustre_md)(struct obd_export *, struct ptlrpc_request *, - int, struct obd_export *, struct obd_export *, + struct obd_export *, struct obd_export *, struct lustre_md *); int (*m_free_lustre_md)(struct obd_export *, struct lustre_md *); @@ -1301,9 +1432,10 @@ struct md_ops { struct obd_client_handle *); int (*m_set_lock_data)(struct obd_export *, __u64 *, void *); - int (*m_lock_match)(struct obd_export *, int, const struct lu_fid *, - ldlm_type_t, ldlm_policy_data_t *, ldlm_mode_t, - struct lustre_handle *); + ldlm_mode_t (*m_lock_match)(struct obd_export *, int, + const struct lu_fid *, ldlm_type_t, + ldlm_policy_data_t *, ldlm_mode_t, + struct lustre_handle *); int (*m_cancel_unused)(struct obd_export *, const struct lu_fid *, ldlm_policy_data_t *, ldlm_mode_t, int flags, @@ -1312,7 +1444,16 @@ struct md_ops { renew_capa_cb_t cb); int (*m_get_remote_perm)(struct obd_export *, const struct lu_fid *, - struct obd_capa *, struct ptlrpc_request **); + struct obd_capa *, __u32, + struct ptlrpc_request **); + + int (*m_intent_getattr_async)(struct obd_export *, + struct md_enqueue_info *, + struct ldlm_enqueue_info *); + + int (*m_revalidate_lock)(struct obd_export *, + struct lookup_intent *, + struct lu_fid *); /* * NOTE: If adding ops, add another LPROCFS_MD_OP_INIT() line to @@ -1364,11 +1505,11 @@ static inline void obd_transno_commit_cb(struct obd_device *obd, __u64 transno, int error) { if (error) { - CERROR("%s: transno "LPD64" commit error: %d\n", + CERROR("%s: transno "LPU64" commit error: %d\n", obd->obd_name, transno, error); return; } - CDEBUG(D_HA, "%s: transno "LPD64" committed\n", + CDEBUG(D_HA, "%s: transno "LPU64" committed\n", obd->obd_name, transno); if (transno > obd->obd_last_committed) { obd->obd_last_committed = transno;