X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Fobd_class.h;h=198b10a205f4676cb2daf669bdf8d471ee0e7f6f;hb=04f2d8ab2524851477f0b6fbffbc115d0c82fdc6;hp=6427f4f54ce06823b11e58ccd809f88306fa8f8a;hpb=8ea6a840e00e40220ab769ec329e10f0ad190c09;p=fs%2Flustre-release.git diff --git a/lustre/include/obd_class.h b/lustre/include/obd_class.h index 6427f4f..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. */ @@ -76,48 +79,20 @@ int class_register_type(struct obd_ops *, struct md_ops *, struct lu_device_type *ldt); int class_unregister_type(const char *nm); - - - -/** - allocate one minor number - */ -int obd_minor_alloc(void); -/** - release allocated minor - */ -void obd_minor_release(long minor); -/** - return 1 if minor is point to allocated device, - return 0 otherwise - */ -int obd_minor_valid(long minor); - -int obd_hashes_init(void); -void obd_hashes_fini(void); - -struct obd_device *class_newdev(const char *type_name, const char *name, - const char *uuid); +struct obd_device *class_newdev(const char *type_name, const char *name); void class_release_dev(struct obd_device *obd); int class_name2dev(const char *name); struct obd_device *class_name2obd(const char *name); int class_uuid2dev(struct obd_uuid *uuid); struct obd_device *class_uuid2obd(struct obd_uuid *uuid); - void class_obd_list(void); -void obd_devlist_first(struct obd_device **pos); -void obd_devlist_next(struct obd_device **pos); -void obd_devlist_last(struct obd_device *pos); -const char *obd_dev_status(struct obd_device *obd); - struct obd_device * class_find_client_obd(struct obd_uuid *tgt_uuid, const char * typ_name, struct obd_uuid *grp_uuid); struct obd_device * class_devices_in_group(struct obd_uuid *grp_uuid, - struct obd_device **prev); -struct obd_device * class_num2obd(__u32 num); - + int *next); +struct obd_device * class_num2obd(int num); int class_notify_sptlrpc_conf(const char *fsname, int namelen); @@ -125,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); @@ -169,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 */ @@ -496,6 +472,11 @@ do { \ } \ } while (0) +static inline int class_devno_max(void) +{ + return MAX_OBD_DEVICES; +} + static inline int obd_get_info(struct obd_export *exp, __u32 keylen, void *key, __u32 *vallen, void *val, struct lov_stripe_md *lsm) @@ -639,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) { @@ -940,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; @@ -952,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); } @@ -2022,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); }