X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fquota%2Fqsd_lib.c;h=dea0cbdaff5454db2f6ffa46f7434417a483f960;hb=1b2547843817b4b7adbeb87ea9b070d9cac35c90;hp=dc4fdae1756a1fa429793cf111d38a02e77bf49f;hpb=6ecab5f514a1307c833967741003bca02dd533ff;p=fs%2Flustre-release.git diff --git a/lustre/quota/qsd_lib.c b/lustre/quota/qsd_lib.c index dc4fdae..dea0cbd 100644 --- a/lustre/quota/qsd_lib.c +++ b/lustre/quota/qsd_lib.c @@ -21,7 +21,7 @@ * GPL HEADER END */ /* - * Copyright (c) 2012, Intel Corporation. + * Copyright (c) 2012, 2013, Intel Corporation. * Use is subject to license terms. * * Author: Johann Lombardi @@ -58,7 +58,7 @@ #include #include "qsd_internal.h" -cfs_mem_cache_t *upd_kmem; +struct kmem_cache *upd_kmem; struct lu_kmem_descr qsd_caches[] = { { @@ -235,8 +235,6 @@ static int qsd_conn_callback(void *data) /* qsd_exp should now be valid */ LASSERT(qsd->qsd_exp); - /* grab reference on namespace */ - ldlm_namespace_get(class_exp2obd(qsd->qsd_exp)->obd_namespace); qsd->qsd_ns = class_exp2obd(qsd->qsd_exp)->obd_namespace; write_lock(&qsd->qsd_lock); @@ -362,17 +360,14 @@ static int qsd_qtype_init(const struct lu_env *env, struct qsd_instance *qsd, thread_set_flags(&qqi->qqi_reint_thread, SVC_STOPPED); CFS_INIT_LIST_HEAD(&qqi->qqi_deferred_glb); CFS_INIT_LIST_HEAD(&qqi->qqi_deferred_slv); - memset(&qqi->qqi_lockh, 0, sizeof(qqi->qqi_lockh)); /* open accounting object */ LASSERT(qqi->qqi_acct_obj == NULL); qqi->qqi_acct_obj = acct_obj_lookup(env, qsd->qsd_dev, qtype); if (IS_ERR(qqi->qqi_acct_obj)) { - LCONSOLE_WARN("%s: No %s space accounting support. Please " - "consider running tunefs.lustre --quota on an " - "unmounted filesystem to enable quota accounting." - "\n", qsd->qsd_svname, - QTYPE_NAME(qtype)); + CDEBUG(D_QUOTA, "%s: no %s space accounting support rc:%ld\n", + qsd->qsd_svname, QTYPE_NAME(qtype), + PTR_ERR(qqi->qqi_acct_obj)); qqi->qqi_acct_obj = NULL; qsd->qsd_acct_failed = true; } @@ -462,14 +457,6 @@ void qsd_fini(const struct lu_env *env, struct qsd_instance *qsd) qsd->qsd_stopping = true; write_unlock(&qsd->qsd_lock); - /* remove from the list of fsinfo */ - if (!cfs_list_empty(&qsd->qsd_link)) { - LASSERT(qsd->qsd_fsinfo != NULL); - down(&qsd->qsd_fsinfo->qfs_sem); - cfs_list_del_init(&qsd->qsd_link); - up(&qsd->qsd_fsinfo->qfs_sem); - } - /* remove qsd proc entry */ if (qsd->qsd_proc != NULL) { lprocfs_remove(&qsd->qsd_proc); @@ -486,9 +473,7 @@ void qsd_fini(const struct lu_env *env, struct qsd_instance *qsd) qsd_stop_reint_thread(qsd->qsd_type_array[qtype]); } - /* release reference on namespace */ if (qsd->qsd_ns != NULL) { - ldlm_namespace_put(qsd->qsd_ns); qsd->qsd_ns = NULL; } @@ -498,11 +483,17 @@ void qsd_fini(const struct lu_env *env, struct qsd_instance *qsd) /* deregister connection to the quota master */ qsd->qsd_exp_valid = false; - lustre_deregister_osp_item(&qsd->qsd_exp); + lustre_deregister_lwp_item(&qsd->qsd_exp); /* release per-filesystem information */ - if (qsd->qsd_fsinfo != NULL) + if (qsd->qsd_fsinfo != NULL) { + down(&qsd->qsd_fsinfo->qfs_sem); + /* remove from the list of fsinfo */ + cfs_list_del_init(&qsd->qsd_link); + up(&qsd->qsd_fsinfo->qfs_sem); qsd_put_fsinfo(qsd->qsd_fsinfo); + qsd->qsd_fsinfo = NULL; + } /* release quota root directory */ if (qsd->qsd_root != NULL) { @@ -567,7 +558,9 @@ struct qsd_instance *qsd_init(const struct lu_env *env, char *svname, qsd->qsd_started = false; /* copy service name */ - strncpy(qsd->qsd_svname, svname, MAX_OBD_NAME); + if (strlcpy(qsd->qsd_svname, svname, sizeof(qsd->qsd_svname)) + >= sizeof(qsd->qsd_svname)) + GOTO(out, rc = -E2BIG); /* grab reference on osd device */ lu_device_get(&dev->dd_lu_dev); @@ -714,7 +707,7 @@ int qsd_prepare(const struct lu_env *env, struct qsd_instance *qsd) } /* generate osp name */ - rc = tgt_name2ospname((char *)qsd->qsd_svname, qti->qti_buf); + rc = tgt_name2lwpname((char *)qsd->qsd_svname, qti->qti_buf); if (rc) { CERROR("%s: failed to generate ospname (%d)\n", qsd->qsd_svname, rc); @@ -723,7 +716,7 @@ int qsd_prepare(const struct lu_env *env, struct qsd_instance *qsd) /* the connection callback will start the reintegration * procedure if quota is enabled */ - rc = lustre_register_osp_item(qti->qti_buf, &qsd->qsd_exp, + rc = lustre_register_lwp_item(qti->qti_buf, &qsd->qsd_exp, qsd_conn_callback, (void *)qsd); if (rc) { CERROR("%s: fail to get connection to master (%d)\n",