X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fquota%2Fqsd_config.c;h=282526c4c72da3d47b62425377198d7981f59ae7;hb=f26cdd1c6e1d0570f2debc13b4165a0c710f6fe5;hp=6738e4bbd813960fdaee18346ea5eb8393462eb7;hpb=08aa217ce49aba1ded52e0f7adb8a607035123fd;p=fs%2Flustre-release.git diff --git a/lustre/quota/qsd_config.c b/lustre/quota/qsd_config.c index 6738e4b..282526c 100644 --- a/lustre/quota/qsd_config.c +++ b/lustre/quota/qsd_config.c @@ -21,17 +21,13 @@ * GPL HEADER END */ /* - * Copyright (c) 2012, Intel Corporation. + * Copyright (c) 2012, 2014, Intel Corporation. * Use is subject to license terms. * * Author: Johann Lombardi * Author: Niu Yawei */ -#ifndef EXPORT_SYMTAB -# define EXPORT_SYMTAB -#endif - #define DEBUG_SUBSYSTEM S_LQUOTA #include @@ -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); }