summaryrefslogtreecommitdiff
path: root/quotaio_xfs.c
diff options
context:
space:
mode:
authorjkar8572 <jkar8572>2001-03-26 14:56:54 +0000
committerjkar8572 <jkar8572>2001-03-26 14:56:54 +0000
commitec1d4ef4651205d3815163d161edc538b5e4e665 (patch)
treec18081d14a33d4f2e9e6d16904f12cde2ff5bc81 /quotaio_xfs.c
parent869fe242340fefe0540fdcf51698ba4c3c8c07bb (diff)
downloadlinuxquota-ec1d4ef4651205d3815163d161edc538b5e4e665.tar.gz
Fixed bugs in XFS quota option detection.
Diffstat (limited to 'quotaio_xfs.c')
-rw-r--r--quotaio_xfs.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/quotaio_xfs.c b/quotaio_xfs.c
index dc20f55..73c963e 100644
--- a/quotaio_xfs.c
+++ b/quotaio_xfs.c
@@ -19,6 +19,11 @@
#include "quotasys.h"
#include "dqblk_xfs.h"
+#define XFS_USRQUOTA(h) ((h)->qh_type == USRQUOTA && \
+ (h)->qh_info.u.xfs_mdqi.qs_flags & XFS_QUOTA_UDQ_ACCT)
+#define XFS_GRPQUOTA(h) ((h)->qh_type == GRPQUOTA && \
+ (h)->qh_info.u.xfs_mdqi.qs_flags & XFS_QUOTA_GDQ_ACCT)
+
static int xfs_init_io(struct quota_handle *h);
static int xfs_write_info(struct quota_handle *h);
static struct dquot *xfs_read_dquot(struct quota_handle *h, qid_t id);
@@ -94,6 +99,9 @@ static int xfs_write_info(struct quota_handle *h)
struct xfs_kern_dqblk xdqblk;
int qcmd;
+ if (!XFS_USRQUOTA(h) && !XFS_GRPQUOTA(h))
+ return 0;
+
memset(&xdqblk, 0, sizeof(struct xfs_kern_dqblk));
xdqblk.d_btimer = h->qh_info.dqi_bgrace;
@@ -116,6 +124,10 @@ static struct dquot *xfs_read_dquot(struct quota_handle *h, qid_t id)
dquot->dq_id = id;
dquot->dq_h = h;
+
+ if (!XFS_USRQUOTA(h) && !XFS_GRPQUOTA(h))
+ return dquot;
+
qcmd = QCMD(Q_XFS_GETQUOTA, h->qh_type);
if (quotactl(qcmd, h->qh_quotadev, id, (void *)&xdqblk) < 0) {
;
@@ -138,6 +150,9 @@ static int xfs_commit_dquot(struct dquot *dquot)
qid_t id = dquot->dq_id;
int qcmd;
+ if (!XFS_USRQUOTA(h) && !XFS_GRPQUOTA(h))
+ return 0;
+
xfs_util2kerndqblk(&xdqblk, &dquot->dq_dqb);
xdqblk.d_fieldmask |= FS_DQ_LIMIT_MASK;
qcmd = QCMD(Q_XFS_SETQLIM, h->qh_type);
@@ -181,6 +196,9 @@ static int xfs_scan_dquots(struct quota_handle *h, int (*process_dquot) (struct
struct xfs_kern_dqblk d;
int rd = 0;
+ if (!XFS_USRQUOTA(h) && !XFS_GRPQUOTA(h))
+ return rd;
+
dq = get_empty_dquot();
dq->dq_h = h;
if (h->qh_type == USRQUOTA) {