Whamcloud - gitweb
LU-4788 lfsck: replace cfs_list_t with list_head
[fs/lustre-release.git] / lustre / quota / qsd_config.c
index 6738e4b..feddff4 100644 (file)
  * 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>
  * Author: Niu    Yawei    <yawei.niu@intel.com>
  */
 
-#ifndef EXPORT_SYMTAB
-# define EXPORT_SYMTAB
-#endif
-
 #define DEBUG_SUBSYSTEM S_LQUOTA
 
 #include <obd_class.h>
@@ -39,7 +35,7 @@
 
 #include "qsd_internal.h"
 
-static CFS_LIST_HEAD(qfs_list);
+static struct list_head qfs_list = LIST_HEAD_INIT(qfs_list);
 /* protect the qfs_list */
 static DEFINE_SPINLOCK(qfs_list_lock);
 
@@ -57,8 +53,8 @@ void qsd_put_fsinfo(struct qsd_fsinfo *qfs)
        LASSERT(qfs->qfs_ref > 0);
        qfs->qfs_ref--;
        if (qfs->qfs_ref == 0) {
-               LASSERT(cfs_list_empty(&qfs->qfs_qsd_list));
-               cfs_list_del(&qfs->qfs_link);
+               LASSERT(list_empty(&qfs->qfs_qsd_list));
+               list_del(&qfs->qfs_link);
                OBD_FREE_PTR(qfs);
        }
        spin_unlock(&qfs_list_lock);
@@ -92,15 +88,15 @@ struct qsd_fsinfo *qsd_get_fsinfo(char *name, bool create)
                if (new == NULL)
                        RETURN(NULL);
 
-               sema_init(&new->qfs_sem, 1);
-               CFS_INIT_LIST_HEAD(&new->qfs_qsd_list);
+               mutex_init(&new->qfs_mutex);
+               INIT_LIST_HEAD(&new->qfs_qsd_list);
                strcpy(new->qfs_name, name);
                new->qfs_ref = 1;
        }
 
        /* search in the fsinfo list */
        spin_lock(&qfs_list_lock);
-       cfs_list_for_each_entry(qfs, &qfs_list, qfs_link) {
+       list_for_each_entry(qfs, &qfs_list, qfs_link) {
                if (!strcmp(qfs->qfs_name, name)) {
                        qfs->qfs_ref++;
                        goto out;
@@ -111,7 +107,7 @@ struct qsd_fsinfo *qsd_get_fsinfo(char *name, bool create)
 
        if (new) {
                /* not found, but we were asked to create a new one */
-               cfs_list_add_tail(&new->qfs_link, &qfs_list);
+               list_add_tail(&new->qfs_link, &qfs_list);
                qfs = new;
                new = NULL;
        }
@@ -164,7 +160,7 @@ int qsd_process_config(struct lustre_cfg *lcfg)
        if (strchr(valstr, 'g'))
                enabled |= 1 << GRPQUOTA;
 
-       down(&qfs->qfs_sem);
+       mutex_lock(&qfs->qfs_mutex);
        if (qfs->qfs_enabled[pool - LQUOTA_FIRST_RES] == enabled)
                /* no change required */
                GOTO(out, rc = 0);
@@ -179,7 +175,7 @@ int qsd_process_config(struct lustre_cfg *lcfg)
                struct qsd_instance     *qsd;
                struct qsd_qtype_info   *qqi;
 
-               cfs_list_for_each_entry(qsd, &qfs->qfs_qsd_list, qsd_link) {
+               list_for_each_entry(qsd, &qfs->qfs_qsd_list, qsd_link) {
                        bool    skip = false;
                        int     type;
 
@@ -191,6 +187,16 @@ int qsd_process_config(struct lustre_cfg *lcfg)
                        read_unlock(&qsd->qsd_lock);
                        if (skip)
                                continue;
+                       if (qsd->qsd_acct_failed) {
+                               LCONSOLE_ERROR("%s: can't enable quota "
+                                              "enforcement since space "
+                                              "accounting isn't functional. "
+                                              "Please run tunefs.lustre "
+                                              "--quota on an unmounted "
+                                              "filesystem if not done already"
+                                              "\n", qsd->qsd_svname);
+                               continue;
+                       }
 
                        for (type = USRQUOTA; type < MAXQUOTAS; type++) {
                                qqi = qsd->qsd_type_array[type];
@@ -199,7 +205,7 @@ int qsd_process_config(struct lustre_cfg *lcfg)
                }
        }
 out:
-       up(&qfs->qfs_sem);
+       mutex_unlock(&qfs->qfs_mutex);
        qsd_put_fsinfo(qfs);
        RETURN(0);
 }