X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Fobd_class.h;h=54d0a65660ffe55f8a0e5d4feba279dfad4de81f;hb=5538eee216a194d47ae67fbcff80bfbcd95f3d69;hp=dba5e2d3ccacdf5c274450cf21a36163b24083c5;hpb=e97152e1766de834001f5c4cdb3a6e38b5ecb2f2;p=fs%2Flustre-release.git diff --git a/lustre/include/obd_class.h b/lustre/include/obd_class.h index dba5e2d..54d0a65 100644 --- a/lustre/include/obd_class.h +++ b/lustre/include/obd_class.h @@ -26,10 +26,13 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. */ /* + * Copyright (c) 2011 Whamcloud, Inc. + */ +/* * This file is part of Lustre, http://www.lustre.org/ * Lustre is a trademark of Sun Microsystems, Inc. */ @@ -60,11 +63,12 @@ /* OBD Device Declarations */ extern struct obd_device *obd_devs[MAX_OBD_DEVICES]; -extern spinlock_t obd_dev_lock; +extern cfs_rwlock_t obd_dev_lock; /* OBD Operations Declarations */ extern struct obd_device *class_conn2obd(struct lustre_handle *); extern struct obd_device *class_exp2obd(struct obd_export *); +extern int class_handle_ioctl(unsigned int cmd, unsigned long arg); struct lu_device_type; @@ -96,11 +100,18 @@ char *obd_export_nid2str(struct obd_export *exp); int obd_export_evict_by_nid(struct obd_device *obd, const char *nid); int obd_export_evict_by_uuid(struct obd_device *obd, const char *uuid); +int obd_connect_flags2str(char *page, int count, __u64 flags, char *sep); int obd_zombie_impexp_init(void); void obd_zombie_impexp_stop(void); void obd_zombie_impexp_cull(void); void obd_zombie_barrier(void); +void obd_exports_barrier(struct obd_device *obd); +int kuc_len(int payload_len); +struct kuc_hdr * kuc_ptr(void *p); +int kuc_ispayload(void *p); +void *kuc_alloc(int payload_len, int transport, int type); +void kuc_free(void *p, int payload_len); /* obd_config.c */ int class_process_config(struct lustre_cfg *lcfg); @@ -114,6 +125,7 @@ struct obd_device *class_incref(struct obd_device *obd, const char *scope, const void *source); void class_decref(struct obd_device *obd, const char *scope, const void *source); +void dump_exports(struct obd_device *obd, int locks); /*obdecho*/ #ifdef LPROCFS @@ -133,8 +145,8 @@ static inline void lprocfs_echo_init_vars(struct lprocfs_static_vars *lvars) /* Passed as data param to class_config_parse_llog */ struct config_llog_instance { - char * cfg_instance; - char * cfg_obdname; + char *cfg_obdname; + void *cfg_instance; struct super_block *cfg_sb; struct obd_uuid cfg_uuid; int cfg_last_idx; /* for partial llog processing */ @@ -145,22 +157,30 @@ int class_config_parse_llog(struct llog_ctxt *ctxt, char *name, int class_config_dump_llog(struct llog_ctxt *ctxt, char *name, struct config_llog_instance *cfg); +enum { + CONFIG_T_CONFIG = 0, + CONFIG_T_SPTLRPC = 1, + CONFIG_T_MAX = 2 +}; + /* list of active configuration logs */ struct config_llog_data { - char *cld_logname; - struct ldlm_res_id cld_resid; + struct ldlm_res_id cld_resid; struct config_llog_instance cld_cfg; - struct list_head cld_list_chain; - atomic_t cld_refcount; - struct config_llog_data *cld_sptlrpc;/* depended sptlrpc log */ - struct obd_export *cld_mgcexp; - unsigned int cld_stopping:1, /* we were told to stop watching */ - cld_lostlock:1, /* lock not requeued */ - cld_is_sptlrpc:1; + cfs_list_t cld_list_chain; + cfs_atomic_t cld_refcount; + struct config_llog_data *cld_sptlrpc;/* depended sptlrpc log */ + struct obd_export *cld_mgcexp; + cfs_mutex_t cld_lock; + int cld_type; + unsigned int cld_stopping:1, /* we were told to stop + * watching */ + cld_lostlock:1; /* lock not requeued */ + char cld_logname[0]; }; struct lustre_profile { - struct list_head lp_list; + cfs_list_t lp_list; char *lp_profile; char *lp_dt; char *lp_md; @@ -170,19 +190,69 @@ struct lustre_profile *class_get_profile(const char * prof); void class_del_profile(const char *prof); void class_del_profiles(void); +#if LUSTRE_TRACKS_LOCK_EXP_REFS + +void __class_export_add_lock_ref(struct obd_export *, struct ldlm_lock *); +void __class_export_del_lock_ref(struct obd_export *, struct ldlm_lock *); +extern void (*class_export_dump_hook)(struct obd_export *); + +#else + +#define __class_export_add_lock_ref(exp, lock) do {} while(0) +#define __class_export_del_lock_ref(exp, lock) do {} while(0) + +#endif + #define class_export_rpc_get(exp) \ ({ \ - atomic_inc(&(exp)->exp_rpc_count); \ + cfs_atomic_inc(&(exp)->exp_rpc_count); \ CDEBUG(D_INFO, "RPC GETting export %p : new rpc_count %d\n", \ - (exp), atomic_read(&(exp)->exp_rpc_count)); \ + (exp), cfs_atomic_read(&(exp)->exp_rpc_count)); \ class_export_get(exp); \ }) #define class_export_rpc_put(exp) \ ({ \ - atomic_dec(&(exp)->exp_rpc_count); \ + LASSERT_ATOMIC_POS(&exp->exp_rpc_count); \ + cfs_atomic_dec(&(exp)->exp_rpc_count); \ CDEBUG(D_INFO, "RPC PUTting export %p : new rpc_count %d\n", \ - (exp), atomic_read(&(exp)->exp_rpc_count)); \ + (exp), cfs_atomic_read(&(exp)->exp_rpc_count)); \ + class_export_put(exp); \ +}) + +#define class_export_lock_get(exp, lock) \ +({ \ + cfs_atomic_inc(&(exp)->exp_locks_count); \ + __class_export_add_lock_ref(exp, lock); \ + CDEBUG(D_INFO, "lock GETting export %p : new locks_count %d\n", \ + (exp), cfs_atomic_read(&(exp)->exp_locks_count)); \ + class_export_get(exp); \ +}) + +#define class_export_lock_put(exp, lock) \ +({ \ + LASSERT_ATOMIC_POS(&exp->exp_locks_count); \ + cfs_atomic_dec(&(exp)->exp_locks_count); \ + __class_export_del_lock_ref(exp, lock); \ + CDEBUG(D_INFO, "lock PUTting export %p : new locks_count %d\n", \ + (exp), cfs_atomic_read(&(exp)->exp_locks_count)); \ + class_export_put(exp); \ +}) + +#define class_export_cb_get(exp) \ +({ \ + cfs_atomic_inc(&(exp)->exp_cb_count); \ + CDEBUG(D_INFO, "callback GETting export %p : new cb_count %d\n",\ + (exp), cfs_atomic_read(&(exp)->exp_cb_count)); \ + class_export_get(exp); \ +}) + +#define class_export_cb_put(exp) \ +({ \ + LASSERT_ATOMIC_POS(&exp->exp_cb_count); \ + cfs_atomic_dec(&(exp)->exp_cb_count); \ + CDEBUG(D_INFO, "callback PUTting export %p : new cb_count %d\n",\ + (exp), cfs_atomic_read(&(exp)->exp_cb_count)); \ class_export_put(exp); \ }) @@ -205,12 +275,11 @@ int class_connect(struct lustre_handle *conn, struct obd_device *obd, struct obd_uuid *cluuid); int class_disconnect(struct obd_export *exp); void class_fail_export(struct obd_export *exp); +int class_connected_export(struct obd_export *exp); void class_disconnect_exports(struct obd_device *obddev); int class_manual_cleanup(struct obd_device *obd); -int class_disconnect_stale_exports(struct obd_device *, - int (*test_export)(struct obd_export *), - enum obd_option flags); - +void class_disconnect_stale_exports(struct obd_device *, + int (*test_export)(struct obd_export *)); static inline enum obd_option exp_flags_from_obd(struct obd_device *obd) { return ((obd->obd_fail ? OBD_OPT_FAILOVER : 0) | @@ -219,6 +288,18 @@ static inline enum obd_option exp_flags_from_obd(struct obd_device *obd) 0); } +static inline struct lu_target *class_exp2tgt(struct obd_export *exp) +{ + LASSERT(exp->exp_obd); + return exp->exp_obd->u.obt.obt_lut; +} + +static inline struct lr_server_data *class_server_data(struct obd_device *obd) +{ + LASSERT(obd->u.obt.obt_lut); + return &obd->u.obt.obt_lut->lut_lsd; +} + void obdo_cpy_md(struct obdo *dst, struct obdo *src, obd_flag valid); void obdo_to_ioobj(struct obdo *oa, struct obd_ioobj *ioobj); void obdo_from_iattr(struct obdo *oa, struct iattr *attr, @@ -317,6 +398,20 @@ do { \ #define EXP_MD_COUNTER_INCREMENT(exp, op) #endif +static inline int lprocfs_nid_ldlm_stats_init(struct nid_stat* tmp) +{ + /* Always add in ldlm_stats */ + tmp->nid_ldlm_stats = lprocfs_alloc_stats(LDLM_LAST_OPC - LDLM_FIRST_OPC + ,LPROCFS_STATS_FLAG_NOPERCPU); + if (tmp->nid_ldlm_stats == NULL) + return -ENOMEM; + + lprocfs_init_ldlm_stats(tmp->nid_ldlm_stats); + + return lprocfs_register_stats(tmp->nid_proc, "ldlm_stats", + tmp->nid_ldlm_stats); +} + #define OBD_CHECK_MD_OP(obd, op, err) \ do { \ if (!OBT(obd) || !MDP((obd), op)) { \ @@ -531,6 +626,31 @@ static inline int obd_cleanup(struct obd_device *obd) RETURN(rc); } +static inline void obd_cleanup_client_import(struct obd_device *obd) +{ + ENTRY; + + /* If we set up but never connected, the + client import will not have been cleaned. */ + cfs_down_write(&obd->u.cli.cl_sem); + if (obd->u.cli.cl_import) { + struct obd_import *imp; + imp = obd->u.cli.cl_import; + CDEBUG(D_CONFIG, "%s: client import never connected\n", + obd->obd_name); + ptlrpc_invalidate_import(imp); + if (imp->imp_rq_pool) { + ptlrpc_free_rq_pool(imp->imp_rq_pool); + imp->imp_rq_pool = NULL; + } + class_destroy_import(imp); + obd->u.cli.cl_import = NULL; + } + cfs_up_write(&obd->u.cli.cl_sem); + + EXIT; +} + static inline int obd_process_config(struct obd_device *obd, int datalen, void *data) { @@ -540,6 +660,7 @@ obd_process_config(struct obd_device *obd, int datalen, void *data) OBD_CHECK_DEV(obd); + obd->obd_process_conf = 1; ldt = obd->obd_type->typ_lu; d = obd->obd_lu_dev; if (ldt != NULL && d != NULL) { @@ -555,6 +676,7 @@ obd_process_config(struct obd_device *obd, int datalen, void *data) rc = OBP(obd, process_config)(obd, datalen, data); } OBD_COUNTER_INCREMENT(obd, process_config); + obd->obd_process_conf = 0; RETURN(rc); } @@ -646,29 +768,30 @@ static inline int obd_free_memmd(struct obd_export *exp, return rc; } -static inline int obd_checkmd(struct obd_export *exp, - struct obd_export *md_exp, - struct lov_stripe_md *mem_tgt) +static inline int obd_precreate(struct obd_export *exp) { int rc; ENTRY; - EXP_CHECK_DT_OP(exp, checkmd); - EXP_COUNTER_INCREMENT(exp, checkmd); + EXP_CHECK_DT_OP(exp, precreate); + OBD_COUNTER_INCREMENT(exp->exp_obd, precreate); - rc = OBP(exp->exp_obd, checkmd)(exp, md_exp, mem_tgt); + rc = OBP(exp->exp_obd, precreate)(exp); RETURN(rc); } -static inline int obd_precreate(struct obd_export *exp) +static inline int obd_create_async(struct obd_export *exp, + struct obd_info *oinfo, + struct lov_stripe_md **ea, + struct obd_trans_info *oti) { int rc; ENTRY; - EXP_CHECK_DT_OP(exp, precreate); - OBD_COUNTER_INCREMENT(exp->exp_obd, precreate); + EXP_CHECK_DT_OP(exp, create_async); + EXP_COUNTER_INCREMENT(exp, create_async); - rc = OBP(exp->exp_obd, precreate)(exp); + rc = OBP(exp->exp_obd, create_async)(exp, oinfo, ea, oti); RETURN(rc); } @@ -821,14 +944,19 @@ static inline struct obd_uuid *obd_get_uuid(struct obd_export *exp) RETURN(uuid); } +/** Create a new /a exp on device /a obd for the uuid /a cluuid + * @param exp New export handle + * @param d Connect data, supported flags are set, flags also understood + * by obd are returned. + */ static inline int obd_connect(const struct lu_env *env, struct obd_export **exp,struct obd_device *obd, struct obd_uuid *cluuid, - struct obd_connect_data *d, + struct obd_connect_data *data, void *localdata) { int rc; - __u64 ocf = d ? d->ocd_connect_flags : 0; /* for post-condition + __u64 ocf = data ? data->ocd_connect_flags : 0; /* for post-condition * check */ ENTRY; @@ -836,10 +964,10 @@ 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, exp, obd, cluuid, d, localdata); + rc = OBP(obd, connect)(env, exp, obd, cluuid, data, localdata); /* check that only subset is granted */ - LASSERT(ergo(d != NULL, - (d->ocd_connect_flags & ocf) == d->ocd_connect_flags)); + LASSERT(ergo(data != NULL, (data->ocd_connect_flags & ocf) == + data->ocd_connect_flags)); RETURN(rc); } @@ -1062,10 +1190,6 @@ obd_lvfs_open_llog(struct obd_export *exp, __u64 id_ino, struct dentry *dentry) return 0; } -#ifndef time_before -#define time_before(t1, t2) ((long)t2 - (long)t1 > 0) -#endif - /* @max_age is the oldest time in jiffies that we accept using a cached data. * 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. */ @@ -1093,9 +1217,9 @@ static inline int obd_statfs_async(struct obd_device *obd, obd->obd_name, &obd->obd_osfs, obd->obd_osfs.os_bavail, obd->obd_osfs.os_blocks, obd->obd_osfs.os_ffree, obd->obd_osfs.os_files); - spin_lock(&obd->obd_osfs_lock); + cfs_spin_lock(&obd->obd_osfs_lock); memcpy(oinfo->oi_osfs, &obd->obd_osfs, sizeof(*oinfo->oi_osfs)); - spin_unlock(&obd->obd_osfs_lock); + cfs_spin_unlock(&obd->obd_osfs_lock); oinfo->oi_flags |= OBD_STATFS_FROM_CACHE; if (oinfo->oi_cb_up) oinfo->oi_cb_up(oinfo, 0); @@ -1145,10 +1269,10 @@ static inline int obd_statfs(struct obd_device *obd, struct obd_statfs *osfs, if (cfs_time_before_64(obd->obd_osfs_age, max_age)) { rc = OBP(obd, statfs)(obd, osfs, max_age, flags); if (rc == 0) { - spin_lock(&obd->obd_osfs_lock); + cfs_spin_lock(&obd->obd_osfs_lock); memcpy(&obd->obd_osfs, osfs, sizeof(obd->obd_osfs)); obd->obd_osfs_age = cfs_time_current_64(); - spin_unlock(&obd->obd_osfs_lock); + cfs_spin_unlock(&obd->obd_osfs_lock); } } else { CDEBUG(D_SUPER,"%s: use %p cache blocks "LPU64"/"LPU64 @@ -1156,16 +1280,37 @@ static inline int obd_statfs(struct obd_device *obd, struct obd_statfs *osfs, obd->obd_name, &obd->obd_osfs, obd->obd_osfs.os_bavail, obd->obd_osfs.os_blocks, obd->obd_osfs.os_ffree, obd->obd_osfs.os_files); - spin_lock(&obd->obd_osfs_lock); + cfs_spin_lock(&obd->obd_osfs_lock); memcpy(osfs, &obd->obd_osfs, sizeof(*osfs)); - spin_unlock(&obd->obd_osfs_lock); + cfs_spin_unlock(&obd->obd_osfs_lock); } RETURN(rc); } -static inline int obd_sync(struct obd_export *exp, struct obdo *oa, - struct lov_stripe_md *ea, obd_size start, - obd_size end, void *capa) +static inline int obd_sync_rqset(struct obd_export *exp, struct obd_info *oinfo, + obd_size start, obd_size end) +{ + struct ptlrpc_request_set *set = NULL; + int rc; + ENTRY; + + OBD_CHECK_DT_OP(exp->exp_obd, sync, -EOPNOTSUPP); + EXP_COUNTER_INCREMENT(exp, sync); + + set = ptlrpc_prep_set(); + if (set == NULL) + RETURN(-ENOMEM); + + rc = OBP(exp->exp_obd, sync)(exp, oinfo, start, end, set); + if (rc == 0) + rc = ptlrpc_set_wait(set); + ptlrpc_set_destroy(set); + RETURN(rc); +} + +static inline int obd_sync(struct obd_export *exp, struct obd_info *oinfo, + obd_size start, obd_size end, + struct ptlrpc_request_set *set) { int rc; ENTRY; @@ -1173,7 +1318,7 @@ static inline int obd_sync(struct obd_export *exp, struct obdo *oa, OBD_CHECK_DT_OP(exp->exp_obd, sync, -EOPNOTSUPP); EXP_COUNTER_INCREMENT(exp, sync); - rc = OBP(exp->exp_obd, sync)(exp, oa, ea, start, end, capa); + rc = OBP(exp->exp_obd, sync)(exp, oinfo, start, end, set); RETURN(rc); } @@ -1359,6 +1504,20 @@ static inline int obd_change_cbdata(struct obd_export *exp, RETURN(rc); } +static inline int obd_find_cbdata(struct obd_export *exp, + struct lov_stripe_md *lsm, + ldlm_iterator_t it, void *data) +{ + int rc; + ENTRY; + + EXP_CHECK_DT_OP(exp, find_cbdata); + EXP_COUNTER_INCREMENT(exp, find_cbdata); + + rc = OBP(exp->exp_obd, find_cbdata)(exp, lsm, it, data); + RETURN(rc); +} + static inline int obd_cancel(struct obd_export *exp, struct lov_stripe_md *ea, __u32 mode, struct lustre_handle *lockh) @@ -1375,7 +1534,8 @@ static inline int obd_cancel(struct obd_export *exp, static inline int obd_cancel_unused(struct obd_export *exp, struct lov_stripe_md *ea, - int flags, void *opaque) + ldlm_cancel_flags_t flags, + void *opaque) { int rc; ENTRY; @@ -1493,7 +1653,8 @@ static inline int obd_notify_observer(struct obd_device *observer, */ onu = &observer->obd_upcall; if (onu->onu_upcall != NULL) - rc2 = onu->onu_upcall(observer, observed, ev, onu->onu_owner); + rc2 = onu->onu_upcall(observer, observed, ev, + onu->onu_owner, NULL); else rc2 = 0; @@ -1528,7 +1689,8 @@ static inline int obd_quotactl(struct obd_export *exp, static inline int obd_quota_adjust_qunit(struct obd_export *exp, struct quota_adjust_qunit *oqaq, - struct lustre_quota_ctxt *qctxt) + struct lustre_quota_ctxt *qctxt, + struct ptlrpc_request_set *set) { #if defined(LPROCFS) && defined(HAVE_QUOTA_SUPPORT) struct timeval work_start; @@ -1540,16 +1702,16 @@ static inline int obd_quota_adjust_qunit(struct obd_export *exp, #if defined(LPROCFS) && defined(HAVE_QUOTA_SUPPORT) if (qctxt) - do_gettimeofday(&work_start); + cfs_gettimeofday(&work_start); #endif EXP_CHECK_DT_OP(exp, quota_adjust_qunit); EXP_COUNTER_INCREMENT(exp, quota_adjust_qunit); - rc = OBP(exp->exp_obd, quota_adjust_qunit)(exp, oqaq, qctxt); + rc = OBP(exp->exp_obd, quota_adjust_qunit)(exp, oqaq, qctxt, set); #if defined(LPROCFS) && defined(HAVE_QUOTA_SUPPORT) if (qctxt) { - do_gettimeofday(&work_end); + cfs_gettimeofday(&work_end); timediff = cfs_timeval_sub(&work_end, &work_start, NULL); lprocfs_counter_add(qctxt->lqc_stats, LQUOTA_ADJUST_QUNIT, timediff); @@ -1589,9 +1751,34 @@ static inline int obd_register_observer(struct obd_device *obd, { ENTRY; OBD_CHECK_DEV(obd); - if (obd->obd_observer && observer) + cfs_down_write(&obd->obd_observer_link_sem); + if (obd->obd_observer && observer) { + cfs_up_write(&obd->obd_observer_link_sem); RETURN(-EALREADY); + } obd->obd_observer = observer; + cfs_up_write(&obd->obd_observer_link_sem); + RETURN(0); +} + +static inline int obd_pin_observer(struct obd_device *obd, + struct obd_device **observer) +{ + ENTRY; + cfs_down_read(&obd->obd_observer_link_sem); + if (!obd->obd_observer) { + *observer = NULL; + cfs_up_read(&obd->obd_observer_link_sem); + RETURN(-ENOENT); + } + *observer = obd->obd_observer; + RETURN(0); +} + +static inline int obd_unpin_observer(struct obd_device *obd) +{ + ENTRY; + cfs_up_read(&obd->obd_observer_link_sem); RETURN(0); } @@ -1663,16 +1850,14 @@ static inline int md_getstatus(struct obd_export *exp, RETURN(rc); } -static inline int md_getattr(struct obd_export *exp, const struct lu_fid *fid, - struct obd_capa *oc, obd_valid valid, int ea_size, +static inline int md_getattr(struct obd_export *exp, struct md_op_data *op_data, struct ptlrpc_request **request) { int rc; ENTRY; EXP_CHECK_MD_OP(exp, getattr); EXP_MD_COUNTER_INCREMENT(exp, getattr); - rc = MDP(exp->exp_obd, getattr)(exp, fid, oc, valid, - ea_size, request); + rc = MDP(exp->exp_obd, getattr)(exp, op_data, request); RETURN(rc); } @@ -1688,6 +1873,18 @@ static inline int md_change_cbdata(struct obd_export *exp, RETURN(rc); } +static inline int md_find_cbdata(struct obd_export *exp, + const struct lu_fid *fid, + ldlm_iterator_t it, void *data) +{ + int rc; + ENTRY; + EXP_CHECK_MD_OP(exp, find_cbdata); + EXP_MD_COUNTER_INCREMENT(exp, find_cbdata); + rc = MDP(exp->exp_obd, find_cbdata)(exp, fid, it, data); + RETURN(rc); +} + static inline int md_close(struct obd_export *exp, struct md_op_data *op_data, struct md_open_data *mod, struct ptlrpc_request **request) @@ -1745,17 +1942,14 @@ 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, __u32 suppgid, + struct md_op_data *op_data, struct ptlrpc_request **request) { int rc; ENTRY; 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, suppgid, request); + rc = MDP(exp->exp_obd, getattr_name)(exp, op_data, request); RETURN(rc); } @@ -1840,14 +2034,15 @@ static inline int md_sync(struct obd_export *exp, const struct lu_fid *fid, static inline int md_readpage(struct obd_export *exp, const struct lu_fid *fid, struct obd_capa *oc, __u64 offset, - struct page *page, + struct page **pages, unsigned npages, struct ptlrpc_request **request) { int rc; ENTRY; EXP_CHECK_MD_OP(exp, readpage); EXP_MD_COUNTER_INCREMENT(exp, readpage); - rc = MDP(exp->exp_obd, readpage)(exp, fid, oc, offset, page, request); + rc = MDP(exp->exp_obd, readpage)(exp, fid, oc, offset, pages, npages, + request); RETURN(rc); } @@ -1933,18 +2128,20 @@ static inline int md_clear_open_replay_data(struct obd_export *exp, } static inline int md_set_lock_data(struct obd_export *exp, - __u64 *lockh, void *data) + __u64 *lockh, void *data, __u32 *bits) { ENTRY; EXP_CHECK_MD_OP(exp, set_lock_data); EXP_MD_COUNTER_INCREMENT(exp, set_lock_data); - RETURN(MDP(exp->exp_obd, set_lock_data)(exp, lockh, data)); + RETURN(MDP(exp->exp_obd, set_lock_data)(exp, lockh, data, bits)); } static inline int md_cancel_unused(struct obd_export *exp, const struct lu_fid *fid, ldlm_policy_data_t *policy, - ldlm_mode_t mode, int flags, void *opaque) + ldlm_mode_t mode, + ldlm_cancel_flags_t flags, + void *opaque) { int rc; ENTRY; @@ -2052,7 +2249,7 @@ extern cfs_mem_cache_t *obdo_cachep; #define OBDO_ALLOC(ptr) \ do { \ - OBD_SLAB_ALLOC_PTR((ptr), obdo_cachep); \ + OBD_SLAB_ALLOC_PTR_GFP((ptr), obdo_cachep, CFS_ALLOC_IO); \ } while(0) #define OBDO_FREE(ptr) \ @@ -2089,6 +2286,7 @@ void class_uuid_unparse(class_uuid_t in, struct obd_uuid *out); int lustre_uuid_to_peer(const char *uuid, lnet_nid_t *peer_nid, int index); int class_add_uuid(const char *uuid, __u64 nid); int class_del_uuid (const char *uuid); +int class_check_uuid(struct obd_uuid *uuid, __u64 nid); void class_init_uuidlist(void); void class_exit_uuidlist(void); @@ -2097,6 +2295,6 @@ int mea_name2idx(struct lmv_stripe_md *mea, const char *name, int namelen); int raw_name2idx(int hashtype, int count, const char *name, int namelen); /* prng.c */ -void ll_generate_random_uuid(class_uuid_t uuid_out); +#define ll_generate_random_uuid(uuid_out) cfs_get_random_bytes(uuid_out, sizeof(class_uuid_t)) #endif /* __LINUX_OBD_CLASS_H */