X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fcmm%2Fmdc_device.c;h=416233d5c2715a607811fcef05135fde5eae2ad9;hb=b9ab6348153fd8d236871f75e5bd3793a49c9a45;hp=8c75a6c1dc7f4d94cc376490d3042d66890a7e32;hpb=6b6ae6fe7cc74816c42878630d73400a072598f3;p=fs%2Flustre-release.git diff --git a/lustre/cmm/mdc_device.c b/lustre/cmm/mdc_device.c index 8c75a6c..416233d 100644 --- a/lustre/cmm/mdc_device.c +++ b/lustre/cmm/mdc_device.c @@ -26,7 +26,7 @@ * 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. */ /* @@ -53,18 +53,21 @@ #include "mdc_internal.h" static const struct lu_device_operations mdc_lu_ops; - -static inline int lu_device_is_mdc(struct lu_device *ld) -{ - return ergo(ld != NULL && ld->ld_ops != NULL, - ld->ld_ops == &mdc_lu_ops); -} - +/** + * \addtogroup cmm_mdc + * @{ + */ +/** + * The md_device_operation for mdc. It is empty. + */ static const struct md_device_operations mdc_md_ops = { 0 }; +/** + * Upcall handler in mdc. Analog of obd_device::o_notify(). + */ static int mdc_obd_update(struct obd_device *host, struct obd_device *watched, - enum obd_notify_event ev, void *owner) + enum obd_notify_event ev, void *owner, void *data) { struct mdc_device *mc = owner; int rc = 0; @@ -89,13 +92,17 @@ static int mdc_obd_update(struct obd_device *host, CDEBUG(D_INFO, "Update connect_flags: "LPX64"\n", conn_data->ocd_connect_flags); } - + RETURN(rc); } -/* MDC OBD is set up already and connected to the proper MDS +/** + * Add new mdc device. + * Invoked by configuration command LCFG_ADD_MDC. + * + * MDC OBD is set up already and connected to the proper MDS * mdc_add_obd() find that obd by uuid and connects to it. - * Local MDT uuid is used for connection - * */ + * Local MDT uuid is used for connection. + */ static int mdc_obd_add(const struct lu_env *env, struct mdc_device *mc, struct lustre_cfg *cfg) { @@ -130,7 +137,6 @@ static int mdc_obd_add(const struct lu_env *env, CERROR("target %s not set up\n", mdc->obd_name); rc = -EINVAL; } else { - struct lustre_handle *conn = &desc->cl_conn; struct obd_connect_data *ocd; CDEBUG(D_CONFIG, "connect to %s(%s)\n", @@ -146,20 +152,20 @@ static int mdc_obd_add(const struct lu_env *env, ocd->ocd_ibits_known = MDS_INODELOCK_UPDATE; ocd->ocd_connect_flags = OBD_CONNECT_VERSION | OBD_CONNECT_ACL | - OBD_CONNECT_LCL_CLIENT | + OBD_CONNECT_RMT_CLIENT | OBD_CONNECT_MDS_CAPA | - OBD_CONNECT_OSS_CAPA | + OBD_CONNECT_OSS_CAPA | OBD_CONNECT_IBITS | OBD_CONNECT_MDS_MDS | OBD_CONNECT_FID | - OBD_CONNECT_AT; - rc = obd_connect(env, conn, mdc, &mdc->obd_uuid, ocd, NULL); + OBD_CONNECT_AT | + OBD_CONNECT_FULL20; + rc = obd_connect(env, &desc->cl_exp, mdc, &mdc->obd_uuid, ocd, NULL); OBD_FREE_PTR(ocd); if (rc) { CERROR("target %s connect error %d\n", mdc->obd_name, rc); } else { - desc->cl_exp = class_conn2export(conn); /* set seq controller export for MDC0 if exists */ if (mc->mc_num == 0) ms->ms_control_exp = @@ -173,7 +179,7 @@ static int mdc_obd_add(const struct lu_env *env, mdc->obd_upcall.onu_upcall = mdc_obd_update; } } - + if (rc) { obd_disconnect(desc->cl_exp); desc->cl_exp = NULL; @@ -183,6 +189,12 @@ static int mdc_obd_add(const struct lu_env *env, RETURN(rc); } +/** + * Delete mdc device. + * Called when configuration command LCFG_CLEANUP is issued. + * + * This disconnects MDC OBD and cleanup it. + */ static int mdc_obd_del(const struct lu_env *env, struct mdc_device *mc, struct lustre_cfg *cfg) { @@ -205,7 +217,7 @@ static int mdc_obd_del(const struct lu_env *env, struct mdc_device *mc, mdc_obd->obd_force = mdt_obd->obd_force; mdc_obd->obd_fail = 0; } - + rc = obd_fid_fini(desc->cl_exp); if (rc) CERROR("Fid fini error %d\n", rc); @@ -224,6 +236,10 @@ static int mdc_obd_del(const struct lu_env *env, struct mdc_device *mc, RETURN(0); } +/** + * Process config command. Passed to the mdc from mdt. + * Supports two commands only - LCFG_ADD_MDC and LCFG_CLEANUP + */ static int mdc_process_config(const struct lu_env *env, struct lu_device *ld, struct lustre_cfg *cfg) @@ -245,26 +261,34 @@ static int mdc_process_config(const struct lu_env *env, RETURN(rc); } +/** + * lu_device_operations instance for mdc. + */ static const struct lu_device_operations mdc_lu_ops = { - .ldo_object_alloc = mdc_object_alloc, + .ldo_object_alloc = mdc_object_alloc, .ldo_process_config = mdc_process_config }; +/** + * Initialize proper easize and cookie size. + */ void cmm_mdc_init_ea_size(const struct lu_env *env, struct mdc_device *mc, int max_mdsize, int max_cookiesize) { struct obd_device *obd = class_exp2obd(mc->mc_desc.cl_exp); - + obd->u.cli.cl_max_mds_easize = max_mdsize; obd->u.cli.cl_max_mds_cookiesize = max_cookiesize; } -static int mdc_device_init(const struct lu_env *env, struct lu_device *ld, +/** Start mdc device */ +static int mdc_device_init(const struct lu_env *env, struct lu_device *ld, const char *name, struct lu_device *next) { return 0; } +/** Stop mdc device. */ static struct lu_device *mdc_device_fini(const struct lu_env *env, struct lu_device *ld) { @@ -272,6 +296,7 @@ static struct lu_device *mdc_device_fini(const struct lu_env *env, RETURN (NULL); } +/** Allocate new mdc device */ static struct lu_device *mdc_device_alloc(const struct lu_env *env, struct lu_device_type *ldt, struct lustre_cfg *cfg) @@ -286,35 +311,35 @@ static struct lu_device *mdc_device_alloc(const struct lu_env *env, } else { md_device_init(&mc->mc_md_dev, ldt); mc->mc_md_dev.md_ops = &mdc_md_ops; - ld = mdc2lu_dev(mc); + ld = mdc2lu_dev(mc); ld->ld_ops = &mdc_lu_ops; - sema_init(&mc->mc_fid_sem, 1); - + cfs_sema_init(&mc->mc_fid_sem, 1); } RETURN (ld); } +/** Free mdc device */ static struct lu_device *mdc_device_free(const struct lu_env *env, struct lu_device *ld) { struct mdc_device *mc = lu2mdc_dev(ld); - LASSERTF(atomic_read(&ld->ld_ref) == 0, - "Refcount = %i\n", atomic_read(&ld->ld_ref)); - LASSERT(list_empty(&mc->mc_linkage)); + LASSERTF(cfs_atomic_read(&ld->ld_ref) == 0, + "Refcount = %d\n", cfs_atomic_read(&ld->ld_ref)); + LASSERT(cfs_list_empty(&mc->mc_linkage)); md_device_fini(&mc->mc_md_dev); OBD_FREE_PTR(mc); return NULL; } -/* context key constructor/destructor: mdc_key_init, mdc_key_fini */ +/** context key constructor/destructor: mdc_key_init, mdc_key_fini */ LU_KEY_INIT_FINI(mdc, struct mdc_thread_info); -/* context key: mdc_thread_key */ +/** context key: mdc_thread_key */ LU_CONTEXT_KEY_DEFINE(mdc, LCT_MD_THREAD|LCT_CL_THREAD); -/* type constructor/destructor: mdc_type_init, mdc_type_fini */ +/** type constructor/destructor: mdc_type_init, mdc_type_fini */ LU_TYPE_INIT_FINI(mdc, &mdc_thread_key); static struct lu_device_type_operations mdc_device_type_ops = { @@ -337,3 +362,4 @@ struct lu_device_type mdc_device_type = { .ldt_ops = &mdc_device_type_ops, .ldt_ctx_tags = LCT_MD_THREAD|LCT_CL_THREAD }; +/** @} */