X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Finclude%2Fobd_class.h;h=198b10a205f4676cb2daf669bdf8d471ee0e7f6f;hp=5adae76c72893d855d5d824ca6b12979813c4dcf;hb=04f2d8ab2524851477f0b6fbffbc115d0c82fdc6;hpb=2e0ad6d40070d38076c77038b7d48ac90af7b130 diff --git a/lustre/include/obd_class.h b/lustre/include/obd_class.h index 5adae76..198b10a 100644 --- a/lustre/include/obd_class.h +++ b/lustre/include/obd_class.h @@ -30,6 +30,9 @@ * 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. */ @@ -97,6 +100,7 @@ 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); @@ -141,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 */ @@ -203,7 +207,7 @@ extern void (*class_export_dump_hook)(struct obd_export *); #define class_export_rpc_put(exp) \ ({ \ - LASSERT(cfs_atomic_read(&exp->exp_rpc_count) > 0); \ + 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), cfs_atomic_read(&(exp)->exp_rpc_count)); \ @@ -221,7 +225,7 @@ extern void (*class_export_dump_hook)(struct obd_export *); #define class_export_lock_put(exp, lock) \ ({ \ - LASSERT(cfs_atomic_read(&exp->exp_locks_count) > 0); \ + 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", \ @@ -239,7 +243,7 @@ extern void (*class_export_dump_hook)(struct obd_export *); #define class_export_cb_put(exp) \ ({ \ - LASSERT(cfs_atomic_read(&exp->exp_cb_count) > 0); \ + 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)); \ @@ -616,6 +620,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) { @@ -917,11 +946,11 @@ static inline struct obd_uuid *obd_get_uuid(struct obd_export *exp) 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; @@ -929,10 +958,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); } @@ -1252,9 +1281,30 @@ static inline int obd_statfs(struct obd_device *obd, struct obd_statfs *osfs, 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; @@ -1262,7 +1312,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); } @@ -1978,14 +2028,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); }