static struct list_head lustre_dquot_hash[NR_DQHASH];
static spinlock_t dquot_hash_lock = SPIN_LOCK_UNLOCKED;
-kmem_cache_t *lustre_dquot_cachep;
+cfs_mem_cache_t *lustre_dquot_cachep;
int lustre_dquot_init(void)
{
ENTRY;
LASSERT(lustre_dquot_cachep == NULL);
- lustre_dquot_cachep = kmem_cache_create("lustre_dquot_cache",
- sizeof(struct lustre_dquot),
- 0, 0, NULL, NULL);
+ lustre_dquot_cachep = cfs_mem_cache_create("lustre_dquot_cache",
+ sizeof(struct lustre_dquot),
+ 0, 0);
if (!lustre_dquot_cachep)
return (-ENOMEM);
for (i = 0; i < NR_DQHASH; i++) {
- INIT_LIST_HEAD(lustre_dquot_hash + i);
+ CFS_INIT_LIST_HEAD(lustre_dquot_hash + i);
}
RETURN(0);
}
LASSERT(list_empty(lustre_dquot_hash + i));
}
if (lustre_dquot_cachep) {
-#ifdef HAVE_KMEM_CACHE_DESTROY_INT
int rc;
- rc = kmem_cache_destroy(lustre_dquot_cachep);
+ rc = cfs_mem_cache_destroy(lustre_dquot_cachep);
LASSERTF(rc == 0,"couldn't destroy lustre_dquot_cachep slab\n");
-#else
- kmem_cache_destroy(lustre_dquot_cachep);
-#endif
lustre_dquot_cachep = NULL;
}
EXIT;
struct lustre_dquot *dquot = NULL;
ENTRY;
- OBD_SLAB_ALLOC(dquot, lustre_dquot_cachep, SLAB_NOFS, sizeof(*dquot));
+ OBD_SLAB_ALLOC(dquot, lustre_dquot_cachep, CFS_ALLOC_IO, sizeof(*dquot));
if (dquot == NULL)
RETURN(NULL);
- INIT_LIST_HEAD(&dquot->dq_hash);
+ CFS_INIT_LIST_HEAD(&dquot->dq_hash);
init_mutex_locked(&dquot->dq_sem);
dquot->dq_refcnt = 1;
dquot->dq_info = lqi;
int rc = 0;
ENTRY;
- OBD_FAIL_RETURN(OBD_FAIL_OBD_DQACQ, -EIO);
-
- /* slaves never acquires qunit for user root */
- LASSERT(qdata->qd_id || qdata_type);
+ if (OBD_FAIL_CHECK(OBD_FAIL_OBD_DQACQ))
+ RETURN(-EIO);
dquot = lustre_dqget(obd, info, qdata->qd_id, qdata_type);
if (IS_ERR(dquot))
int rc2 = 0;
ENTRY;
- if (rc && rc != -EDQUOT && rc != ENOLCK)
+ if (rc && rc != -EDQUOT)
RETURN(0);
switch (opc) {
/* XXX: for file limits only adjust local now */
unsigned int uid = 0, gid = 0;
struct obd_quotactl *ioqc = NULL;
+ int flag;
int rc;
ENTRY;
/* if we are going to set zero limit, needn't init slaves */
- if (!oqctl->qc_dqblk.dqb_ihardlimit && !oqctl->qc_dqblk.dqb_isoftlimit)
+ if (!oqctl->qc_dqblk.dqb_ihardlimit && !oqctl->qc_dqblk.dqb_isoftlimit &&
+ set)
RETURN(0);
-
- if (!set)
- goto acquire;
OBD_ALLOC_PTR(ioqc);
if (!ioqc)
RETURN(-ENOMEM);
-
- ioqc->qc_cmd = Q_INITQUOTA;
+
+ flag = oqctl->qc_dqblk.dqb_ihardlimit ||
+ oqctl->qc_dqblk.dqb_isoftlimit || set;
+ ioqc->qc_cmd = flag ? Q_INITQUOTA : Q_SETQUOTA;
ioqc->qc_id = oqctl->qc_id;
ioqc->qc_type = oqctl->qc_type;
ioqc->qc_dqblk.dqb_valid = QIF_ILIMITS;
- ioqc->qc_dqblk.dqb_ihardlimit = MIN_QLIMIT;
+ ioqc->qc_dqblk.dqb_ihardlimit = flag ? MIN_QLIMIT : 0;
/* set local limit to MIN_QLIMIT */
rc = fsfilt_quotactl(obd, obd->u.obt.obt_sb, ioqc);
if (rc)
GOTO(out, rc);
-acquire:
+
/* trigger local qunit pre-acquire */
if (oqctl->qc_type == USRQUOTA)
uid = oqctl->qc_id;
struct mds_obd *mds = &obd->u.mds;
struct obd_quotactl *ioqc;
unsigned int uid = 0, gid = 0;
+ int flag;
int rc;
ENTRY;
/* if we are going to set zero limit, needn't init slaves */
- if (!oqctl->qc_dqblk.dqb_bhardlimit && !oqctl->qc_dqblk.dqb_bsoftlimit)
+ if (!oqctl->qc_dqblk.dqb_bhardlimit && !oqctl->qc_dqblk.dqb_bsoftlimit &&
+ set)
RETURN(0);
OBD_ALLOC_PTR(ioqc);
if (!ioqc)
RETURN(-ENOMEM);
- ioqc->qc_cmd = Q_INITQUOTA;
+ flag = oqctl->qc_dqblk.dqb_bhardlimit ||
+ oqctl->qc_dqblk.dqb_bsoftlimit || set;
+ ioqc->qc_cmd = flag ? Q_INITQUOTA : Q_SETQUOTA;
ioqc->qc_id = oqctl->qc_id;
ioqc->qc_type = oqctl->qc_type;
ioqc->qc_dqblk.dqb_valid = QIF_BLIMITS;
- ioqc->qc_dqblk.dqb_bhardlimit = set ? MIN_QLIMIT : 0;
+ ioqc->qc_dqblk.dqb_bhardlimit = flag ? MIN_QLIMIT : 0;
- /* set local limit to MIN_QLIMIT */
- if (set) {
- rc = fsfilt_quotactl(obd, obd->u.obt.obt_sb, ioqc);
- if (rc)
- GOTO(out, rc);
- }
+ rc = fsfilt_quotactl(obd, obd->u.obt.obt_sb, ioqc);
+ if (rc)
+ GOTO(out, rc);
/* trigger local qunit pre-acquire */
if (oqctl->qc_type == USRQUOTA)
up(&mds->mds_qonoff_sem);
continue;
}
- INIT_LIST_HEAD(&id_list);
+ CFS_INIT_LIST_HEAD(&id_list);
rc = fsfilt_qids(obd, qinfo->qi_files[type], NULL, type,
&id_list);
up(&mds->mds_qonoff_sem);