X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Finclude%2Fobd_class.h;h=c5d7f7980c0ec9a67adf9f783a9eca8715c0acdd;hp=385df8fe294112a6b0ffee37074b09312e5481cc;hb=959ac6514e221056725748d9f98d00ec58ab7a91;hpb=b0cd8cd9ffb2f067319d2069fe4652e987b59265 diff --git a/lustre/include/obd_class.h b/lustre/include/obd_class.h index 385df8f..c5d7f79 100644 --- a/lustre/include/obd_class.h +++ b/lustre/include/obd_class.h @@ -19,7 +19,6 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ - #ifndef __CLASS_OBD_H #define __CLASS_OBD_H @@ -102,6 +101,16 @@ int class_detach(struct obd_device *obd, struct lustre_cfg *lcfg); struct obd_device *class_incref(struct obd_device *obd); void class_decref(struct obd_device *obd); +/*obdecho*/ +#ifdef LPROCFS +extern void lprocfs_echo_init_vars(struct lprocfs_static_vars *lvars); +#else +static inline void lprocfs_echo_init_vars(struct lprocfs_static_vars *lvars) +{ + memset(lvars, 0, sizeof(*lvars)); +} +#endif + #define CFG_F_START 0x01 /* Set when we start updating from a log */ #define CFG_F_MARKER 0x02 /* We are within a maker */ #define CFG_F_SKIP 0x04 /* We should ignore this cfg command */ @@ -260,9 +269,10 @@ do { \ OBD_COUNTER_OFFSET(op); \ LASSERT(coffset < (export)->exp_obd->obd_stats->ls_num); \ lprocfs_counter_incr((export)->exp_obd->obd_stats, coffset); \ - if ((export)->exp_ops_stats != NULL) \ + if ((export)->exp_nid_stats != NULL && \ + (export)->exp_nid_stats->nid_stats != NULL) \ lprocfs_counter_incr( \ - (export)->exp_ops_stats, coffset); \ + (export)->exp_nid_stats->nid_stats, coffset);\ } #define MD_COUNTER_OFFSET(op) \ @@ -322,7 +332,7 @@ do { \ if (!OBT((exp)->exp_obd) || !MDP((exp)->exp_obd, op)) { \ CERROR("obd_" #op ": dev %s/%d no operation\n", \ (exp)->exp_obd->obd_name, \ - (exp)->exp_obd->obd_minor); \ + (exp)->exp_obd->obd_minor); \ RETURN(-EOPNOTSUPP); \ } \ } while (0) @@ -632,7 +642,7 @@ static inline int obd_checkmd(struct obd_export *exp, RETURN(rc); } -static inline int obd_precreate(struct obd_export *exp, int need_create) +static inline int obd_precreate(struct obd_export *exp) { int rc; ENTRY; @@ -640,7 +650,7 @@ static inline int obd_precreate(struct obd_export *exp, int need_create) EXP_CHECK_DT_OP(exp, precreate); OBD_COUNTER_INCREMENT(exp->exp_obd, precreate); - rc = OBP(exp->exp_obd, precreate)(exp, need_create); + rc = OBP(exp->exp_obd, precreate)(exp); RETURN(rc); } @@ -784,7 +794,8 @@ static inline int obd_del_conn(struct obd_import *imp, struct obd_uuid *uuid) static inline int obd_connect(const struct lu_env *env, struct lustre_handle *conn,struct obd_device *obd, struct obd_uuid *cluuid, - struct obd_connect_data *d) + struct obd_connect_data *d, + void *localdata) { int rc; #ifdef LIBCFS_DEBUG @@ -797,14 +808,15 @@ static inline int obd_connect(const struct lu_env *env, OBD_CHECK_DT_OP(obd, connect, -EOPNOTSUPP); OBD_COUNTER_INCREMENT(obd, connect); - rc = OBP(obd, connect)(env, conn, obd, cluuid, d); + rc = OBP(obd, connect)(env, conn, obd, cluuid, d, localdata); /* check that only subset is granted */ LASSERT(ergo(d != NULL, (d->ocd_connect_flags & ocf) == d->ocd_connect_flags)); RETURN(rc); } -static inline int obd_reconnect(struct obd_export *exp, +static inline int obd_reconnect(const struct lu_env *env, + struct obd_export *exp, struct obd_device *obd, struct obd_uuid *cluuid, struct obd_connect_data *d) @@ -821,7 +833,7 @@ static inline int obd_reconnect(struct obd_export *exp, OBD_CHECK_DT_OP(obd, reconnect, 0); OBD_COUNTER_INCREMENT(obd, reconnect); - rc = OBP(obd, reconnect)(exp, obd, cluuid, d); + rc = OBP(obd, reconnect)(env, exp, obd, cluuid, d); /* check that only subset is granted */ LASSERT(ergo(d != NULL, (d->ocd_connect_flags & ocf) == d->ocd_connect_flags)); @@ -996,7 +1008,8 @@ static inline int obd_statfs_async(struct obd_device *obd, } static inline int obd_statfs_rqset(struct obd_device *obd, - struct obd_statfs *osfs, __u64 max_age) + struct obd_statfs *osfs, __u64 max_age, + __u32 flags) { struct ptlrpc_request_set *set = NULL; struct obd_info oinfo = { { { 0 } } }; @@ -1008,6 +1021,7 @@ static inline int obd_statfs_rqset(struct obd_device *obd, RETURN(-ENOMEM); oinfo.oi_osfs = osfs; + oinfo.oi_flags = flags; rc = obd_statfs_async(obd, &oinfo, max_age, set); if (rc == 0) rc = ptlrpc_set_wait(set); @@ -1019,7 +1033,7 @@ static inline int obd_statfs_rqset(struct obd_device *obd, * If the cache is older than @max_age we will get a new value from the * target. Use a value of "cfs_time_current() + HZ" to guarantee freshness. */ static inline int obd_statfs(struct obd_device *obd, struct obd_statfs *osfs, - __u64 max_age) + __u64 max_age, __u32 flags) { int rc = 0; ENTRY; @@ -1033,7 +1047,7 @@ static inline int obd_statfs(struct obd_device *obd, struct obd_statfs *osfs, CDEBUG(D_SUPER, "osfs "LPU64", max_age "LPU64"\n", obd->obd_osfs_age, max_age); if (cfs_time_before_64(obd->obd_osfs_age, max_age)) { - rc = OBP(obd, statfs)(obd, osfs, max_age); + rc = OBP(obd, statfs)(obd, osfs, max_age, flags); if (rc == 0) { spin_lock(&obd->obd_osfs_lock); memcpy(&obd->obd_osfs, osfs, sizeof(obd->obd_osfs)); @@ -1151,15 +1165,12 @@ static inline int obd_brw_rqset(int cmd, struct obd_export *exp, { struct ptlrpc_request_set *set = NULL; struct obd_info oinfo = { { { 0 } } }; - atomic_t nob; int rc = 0; ENTRY; set = ptlrpc_prep_set(); if (set == NULL) RETURN(-ENOMEM); - atomic_set(&nob, 0); - set->set_countp = &nob; oinfo.oi_oa = oa; oinfo.oi_md = lsm; @@ -1169,8 +1180,6 @@ static inline int obd_brw_rqset(int cmd, struct obd_export *exp, rc = ptlrpc_set_wait(set); if (rc) CERROR("error from callback: rc = %d\n", rc); - else - rc = atomic_read(&nob); } else { CDEBUG(rc == -ENOSPC ? D_INODE : D_ERROR, "error from obd_brw_async: rc = %d\n", rc); @@ -1184,7 +1193,8 @@ static inline int obd_prep_async_page(struct obd_export *exp, struct lov_oinfo *loi, cfs_page_t *page, obd_off offset, struct obd_async_page_ops *ops, - void *data, void **res) + void *data, void **res, int nocache, + struct lustre_handle *lockh) { int ret; ENTRY; @@ -1193,7 +1203,8 @@ static inline int obd_prep_async_page(struct obd_export *exp, EXP_COUNTER_INCREMENT(exp, prep_async_page); ret = OBP(exp->exp_obd, prep_async_page)(exp, lsm, loi, page, offset, - ops, data, res); + ops, data, res, nocache, + lockh); RETURN(ret); } @@ -1638,6 +1649,59 @@ static inline int obd_register_observer(struct obd_device *obd, RETURN(0); } +static inline int obd_register_page_removal_cb(struct obd_export *exp, + obd_page_removal_cb_t cb, + obd_pin_extent_cb pin_cb) +{ + int rc; + ENTRY; + + OBD_CHECK_DT_OP(exp->exp_obd, register_page_removal_cb, 0); + OBD_COUNTER_INCREMENT(exp->exp_obd, register_page_removal_cb); + + rc = OBP(exp->exp_obd, register_page_removal_cb)(exp, cb, pin_cb); + RETURN(rc); +} + +static inline int obd_unregister_page_removal_cb(struct obd_export *exp, + obd_page_removal_cb_t cb) +{ + int rc; + ENTRY; + + OBD_CHECK_DT_OP(exp->exp_obd, unregister_page_removal_cb, 0); + OBD_COUNTER_INCREMENT(exp->exp_obd, unregister_page_removal_cb); + + rc = OBP(exp->exp_obd, unregister_page_removal_cb)(exp, cb); + RETURN(rc); +} + +static inline int obd_register_lock_cancel_cb(struct obd_export *exp, + obd_lock_cancel_cb cb) +{ + int rc; + ENTRY; + + OBD_CHECK_DT_OP(exp->exp_obd, register_lock_cancel_cb, 0); + OBD_COUNTER_INCREMENT(exp->exp_obd, register_lock_cancel_cb); + + rc = OBP(exp->exp_obd, register_lock_cancel_cb)(exp, cb); + RETURN(rc); +} + +static inline int obd_unregister_lock_cancel_cb(struct obd_export *exp, + obd_lock_cancel_cb cb) +{ + int rc; + ENTRY; + + OBD_CHECK_DT_OP(exp->exp_obd, unregister_lock_cancel_cb, 0); + OBD_COUNTER_INCREMENT(exp->exp_obd, unregister_lock_cancel_cb); + + rc = OBP(exp->exp_obd, unregister_lock_cancel_cb)(exp, cb); + RETURN(rc); +} + /* metadata helpers */ static inline int md_getstatus(struct obd_export *exp, struct lu_fid *fid, struct obd_capa **pc) @@ -1677,14 +1741,14 @@ static inline int md_change_cbdata(struct obd_export *exp, } static inline int md_close(struct obd_export *exp, struct md_op_data *op_data, - struct obd_client_handle *och, + struct md_open_data *mod, struct ptlrpc_request **request) { int rc; ENTRY; EXP_CHECK_MD_OP(exp, close); EXP_MD_COUNTER_INCREMENT(exp, close); - rc = MDP(exp->exp_obd, close)(exp, op_data, och, request); + rc = MDP(exp->exp_obd, close)(exp, op_data, mod, request); RETURN(rc); } @@ -1704,13 +1768,13 @@ static inline int md_create(struct obd_export *exp, struct md_op_data *op_data, static inline int md_done_writing(struct obd_export *exp, struct md_op_data *op_data, - struct obd_client_handle *och) + struct md_open_data *mod) { int rc; ENTRY; EXP_CHECK_MD_OP(exp, done_writing); EXP_MD_COUNTER_INCREMENT(exp, done_writing); - rc = MDP(exp->exp_obd, done_writing)(exp, op_data, och); + rc = MDP(exp->exp_obd, done_writing)(exp, op_data, mod); RETURN(rc); } @@ -1734,7 +1798,7 @@ static inline int md_enqueue(struct obd_export *exp, static inline int md_getattr_name(struct obd_export *exp, const struct lu_fid *fid, struct obd_capa *oc, const char *name, int namelen, - obd_valid valid, int ea_size, + obd_valid valid, int ea_size, __u32 suppgid, struct ptlrpc_request **request) { int rc; @@ -1742,7 +1806,7 @@ static inline int md_getattr_name(struct obd_export *exp, EXP_CHECK_MD_OP(exp, getattr_name); EXP_MD_COUNTER_INCREMENT(exp, getattr_name); rc = MDP(exp->exp_obd, getattr_name)(exp, fid, oc, name, namelen, - valid, ea_size, request); + valid, ea_size, suppgid, request); RETURN(rc); } @@ -1802,14 +1866,15 @@ static inline int md_is_subdir(struct obd_export *exp, static inline int md_setattr(struct obd_export *exp, struct md_op_data *op_data, void *ea, int ealen, void *ea2, int ea2len, - struct ptlrpc_request **request) + struct ptlrpc_request **request, + struct md_open_data **mod) { int rc; ENTRY; EXP_CHECK_MD_OP(exp, setattr); EXP_MD_COUNTER_INCREMENT(exp, setattr); rc = MDP(exp->exp_obd, setattr)(exp, op_data, ea, ealen, - ea2, ea2len, request); + ea2, ea2len, request, mod); RETURN(rc); } @@ -1850,15 +1915,14 @@ static inline int md_unlink(struct obd_export *exp, struct md_op_data *op_data, static inline int md_get_lustre_md(struct obd_export *exp, struct ptlrpc_request *req, - int offset, struct obd_export *dt_exp, + struct obd_export *dt_exp, struct obd_export *md_exp, struct lustre_md *md) { ENTRY; EXP_CHECK_MD_OP(exp, get_lustre_md); EXP_MD_COUNTER_INCREMENT(exp, get_lustre_md); - RETURN(MDP(exp->exp_obd, get_lustre_md)(exp, req, offset, - dt_exp, md_exp, md)); + RETURN(MDP(exp->exp_obd, get_lustre_md)(exp, req, dt_exp, md_exp, md)); } static inline int md_free_lustre_md(struct obd_export *exp, @@ -1874,7 +1938,7 @@ static inline int md_setxattr(struct obd_export *exp, const struct lu_fid *fid, struct obd_capa *oc, obd_valid valid, const char *name, const char *input, int input_size, - int output_size, int flags, + int output_size, int flags, __u32 suppgid, struct ptlrpc_request **request) { ENTRY; @@ -1882,7 +1946,7 @@ static inline int md_setxattr(struct obd_export *exp, EXP_MD_COUNTER_INCREMENT(exp, setxattr); RETURN(MDP(exp->exp_obd, setxattr)(exp, fid, oc, valid, name, input, input_size, output_size, flags, - request)); + suppgid, request)); } static inline int md_getxattr(struct obd_export *exp, @@ -1944,10 +2008,12 @@ static inline int md_cancel_unused(struct obd_export *exp, RETURN(rc); } -static inline int md_lock_match(struct obd_export *exp, int flags, - const struct lu_fid *fid, ldlm_type_t type, - ldlm_policy_data_t *policy, ldlm_mode_t mode, - struct lustre_handle *lockh) +static inline ldlm_mode_t md_lock_match(struct obd_export *exp, int flags, + const struct lu_fid *fid, + ldlm_type_t type, + ldlm_policy_data_t *policy, + ldlm_mode_t mode, + struct lustre_handle *lockh) { ENTRY; EXP_CHECK_MD_OP(exp, lock_match); @@ -1968,13 +2034,14 @@ static inline int md_init_ea_size(struct obd_export *exp, int easize, static inline int md_get_remote_perm(struct obd_export *exp, const struct lu_fid *fid, - struct obd_capa *oc, + struct obd_capa *oc, __u32 suppgid, struct ptlrpc_request **request) { ENTRY; EXP_CHECK_MD_OP(exp, get_remote_perm); EXP_MD_COUNTER_INCREMENT(exp, get_remote_perm); - RETURN(MDP(exp->exp_obd, get_remote_perm)(exp, fid, oc, request)); + RETURN(MDP(exp->exp_obd, get_remote_perm)(exp, fid, oc, suppgid, + request)); } static inline int md_renew_capa(struct obd_export *exp, struct obd_capa *ocapa, @@ -1988,6 +2055,31 @@ static inline int md_renew_capa(struct obd_export *exp, struct obd_capa *ocapa, RETURN(rc); } +static inline int md_intent_getattr_async(struct obd_export *exp, + struct md_enqueue_info *minfo, + struct ldlm_enqueue_info *einfo) +{ + int rc; + ENTRY; + EXP_CHECK_MD_OP(exp, intent_getattr_async); + EXP_MD_COUNTER_INCREMENT(exp, intent_getattr_async); + rc = MDP(exp->exp_obd, intent_getattr_async)(exp, minfo, einfo); + RETURN(rc); +} + +static inline int md_revalidate_lock(struct obd_export *exp, + struct lookup_intent *it, + struct lu_fid *fid) +{ + int rc; + ENTRY; + EXP_CHECK_MD_OP(exp, revalidate_lock); + EXP_MD_COUNTER_INCREMENT(exp, revalidate_lock); + rc = MDP(exp->exp_obd, revalidate_lock)(exp, it, fid); + RETURN(rc); +} + + /* OBD Metadata Support */ extern int obd_init_caches(void);