Whamcloud - gitweb
LU-1346 libcfs: replace cfs_ memory wrappers
[fs/lustre-release.git] / lustre / quota / qsd_lib.c
index dc4fdae..dea0cbd 100644 (file)
@@ -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 <johann.lombardi@intel.com>
@@ -58,7 +58,7 @@
 #include <obd_class.h>
 #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",