* GPL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved
+ * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
/*
int id, is_master, rc = 0, local; /* means we need a local quotaon */
cfs_down(&obt->obt_quotachecking);
+ push_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
id = UGQUOTA2LQC(oqctl->qc_type);
local = (obt->obt_qctxt.lqc_flags & id) != id;
is_master = !strcmp(obd->obd_type->typ_name, LUSTRE_MDS_NAME);
if (is_master) {
- cfs_down(&obd->u.mds.mds_qonoff_sem);
+ cfs_down_write(&obd->u.mds.mds_qonoff_sem);
if (local) {
- push_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
/* turn on cluster wide quota */
rc = mds_admin_quota_on(obd, oqctl);
- pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
if (rc && rc != -ENOENT)
CERROR("%s: %s admin quotaon failed. rc=%d\n",
obd->obd_name, global ? "global":"local",
if (rc == 0) {
if (local) {
- push_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
rc = fsfilt_quotactl(obd, obt->obt_sb, oqctl);
if (rc) {
if (rc != -ENOENT)
obt->obt_qctxt.lqc_flags |= UGQUOTA2LQC(oqctl->qc_type);
build_lqs(obd);
}
- pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
}
if (rc == 0 && global && is_master)
- rc = obd_quotactl(obd->u.mds.mds_osc_exp, oqctl);
+ rc = obd_quotactl(obd->u.mds.mds_lov_exp, oqctl);
}
if (is_master)
- cfs_up(&obd->u.mds.mds_qonoff_sem);
+ cfs_up_write(&obd->u.mds.mds_qonoff_sem);
+ pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
cfs_up(&obt->obt_quotachecking);
+ CDEBUG(D_QUOTA, "%s: quotaon type:master:global:local:flags:rc "
+ "%u:%d:%d:%d:%lu:%d\n",
+ obd->obd_name, oqctl->qc_type, is_master, global, local,
+ obt->obt_qctxt.lqc_flags, rc);
+
return rc;
}