#include <linux/init.h>
#include <linux/module.h>
#include <linux/slab.h>
-#include <linux/quotaio_v1.h>
+#ifdef HAVE_QUOTAIO_V1_H
+# include <linux/quotaio_v1.h>
+#endif
#include <asm/byteorder.h>
#include <asm/uaccess.h>
static const uint quota_magics[] = LUSTRE_INITQMAGICS;
const uint *quota_versions = lustre_initqversions[version];
+ if (!inode && !f) {
+ CERROR("check_quota_file failed!\n");
+ libcfs_debug_dumpstack(NULL);
+ return -EINVAL;
+ }
+
if (f) {
fs = get_fs();
set_fs(KERNEL_DS);
/* Invalidated quota? */
if (!dquot->dq_info || !(filp = dquot->dq_info->qi_files[type])) {
CDEBUG(D_ERROR, "VFS: Quota invalidated while reading!\n");
- return -EIO;
+ return -ESRCH;
}
version = dquot->dq_info->qi_version;
ENTRY;
+ LASSERT(ergo(fp == NULL, inode != NULL));
+
if (check_quota_file(fp, inode, type, LUSTRE_QUOTA_V2) == 0)
version = LUSTRE_QUOTA_V2;
else {
(char *)&ddquot[i], dqblk_sz))
continue;
- dqid = kmalloc(sizeof(*dqid), GFP_NOFS);
- if (!dqid)
+ OBD_ALLOC_GFP(dqid, sizeof(*dqid), GFP_NOFS);
+ if (!dqid)
GOTO(out_free, rc = -ENOMEM);
- dqid->di_id = le32_to_cpu(ddquot[i].dqb_id);
+ dqid->di_id = le32_to_cpu(ddquot[i].dqb_id);
+ dqid->di_flag = le64_to_cpu(ddquot[i].dqb_ihardlimit) ?
+ QI_SET : 0;
+ dqid->di_flag |= le64_to_cpu(ddquot[i].dqb_bhardlimit) ?
+ QB_SET : 0;
+
INIT_LIST_HEAD(&dqid->di_link);
list_add(&dqid->di_link, list);
}