From: Chandra Seetharaman <sekharan@us.ibm.com>
To: xfs@oss.sgi.com
Cc: Chandra Seetharaman <sekharan@us.ibm.com>
Subject: [RFC v2 PATCH 5/5] xfs: Add a new field to fs_quota_stat to get pquota information
Date: Wed, 26 Oct 2011 16:22:22 -0500 [thread overview]
Message-ID: <20111026212222.6513.95044.sendpatchset@chandra-lucid.austin.ibm.com> (raw)
In-Reply-To: <20111026212150.6513.38058.sendpatchset@chandra-lucid.austin.ibm.com>
Add a new field to fs_quota_stat and define a new version for
the bigger size.
Signed-off-by: Chandra Seetharaman <sekharan@us.ibm.com>
---
fs/quota/quota.c | 6 +++++-
fs/xfs/xfs_qm_syscalls.c | 26 +++++++++++++-------------
include/linux/dqblk_xfs.h | 28 +++++++++++++++++++++++++++-
3 files changed, 45 insertions(+), 15 deletions(-)
diff --git a/fs/quota/quota.c b/fs/quota/quota.c
index 10b6be3..221d9ff 100644
--- a/fs/quota/quota.c
+++ b/fs/quota/quota.c
@@ -204,8 +204,12 @@ static int quota_getxstate(struct super_block *sb, void __user *addr)
if (!sb->s_qcop->get_xstate)
return -ENOSYS;
+ if (copy_from_user(&fqs, addr, 1)) /* just get the version */
+ return -EFAULT;
+ if (!valid_qstat_version(fqs.qs_version))
+ fqs.qs_version = FS_QSTAT_VERSION;
ret = sb->s_qcop->get_xstate(sb, &fqs);
- if (!ret && copy_to_user(addr, &fqs, sizeof(fqs)))
+ if (!ret && copy_to_user(addr, &fqs, qstatsize(fqs.qs_version)))
return -EFAULT;
return ret;
}
diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c
index 7ce4034..7267ee4 100644
--- a/fs/xfs/xfs_qm_syscalls.c
+++ b/fs/xfs/xfs_qm_syscalls.c
@@ -425,7 +425,6 @@ xfs_qm_scall_getqstat(
tempuqip = tempgqip = temppqip = B_FALSE;
memset(out, 0, sizeof(fs_quota_stat_t));
- out->qs_version = FS_QSTAT_VERSION;
if (!xfs_sb_version_hasquota(&mp->m_sb)) {
out->qs_uquota.qfs_ino = NULLFSINO;
out->qs_gquota.qfs_ino = NULLFSINO;
@@ -438,8 +437,6 @@ xfs_qm_scall_getqstat(
out->qs_pad = 0;
out->qs_uquota.qfs_ino = mp->m_sb.sb_uquotino;
out->qs_gquota.qfs_ino = mp->m_sb.sb_gquotino;
- if (&out->qs_gquota != &out->qs_pquota)
- out->qs_pquota.qfs_ino = mp->m_sb.sb_pquotino;
if (q) {
uip = q->qi_uquotaip;
@@ -456,11 +453,6 @@ xfs_qm_scall_getqstat(
0, 0, &gip) == 0)
tempgqip = B_TRUE;
}
- if (!pip && mp->m_sb.sb_pquotino != NULLFSINO) {
- if (xfs_iget(mp, NULL, mp->m_sb.sb_pquotino,
- 0, 0, &pip) == 0)
- temppqip = B_TRUE;
- }
if (uip) {
out->qs_uquota.qfs_nblks = uip->i_d.di_nblocks;
out->qs_uquota.qfs_nextents = uip->i_d.di_nextents;
@@ -473,11 +465,19 @@ xfs_qm_scall_getqstat(
if (tempgqip)
IRELE(gip);
}
- if (pip) {
- out->qs_pquota.qfs_nblks = pip->i_d.di_nblocks;
- out->qs_pquota.qfs_nextents = pip->i_d.di_nextents;
- if (temppqip)
- IRELE(pip);
+ if (out->qs_version >= FS_QSTAT_VERSION_2) {
+ out->qs_pquota.qfs_ino = mp->m_sb.sb_pquotino;
+ if (!pip && mp->m_sb.sb_pquotino != NULLFSINO) {
+ if (xfs_iget(mp, NULL, mp->m_sb.sb_pquotino,
+ 0, 0, &pip) == 0)
+ temppqip = B_TRUE;
+ }
+ if (pip) {
+ out->qs_pquota.qfs_nblks = pip->i_d.di_nblocks;
+ out->qs_pquota.qfs_nextents = pip->i_d.di_nextents;
+ if (temppqip)
+ IRELE(pip);
+ }
}
if (q) {
out->qs_incoredqs = q->qi_dquots;
diff --git a/include/linux/dqblk_xfs.h b/include/linux/dqblk_xfs.h
index f17e3bb..74cc847 100644
--- a/include/linux/dqblk_xfs.h
+++ b/include/linux/dqblk_xfs.h
@@ -18,6 +18,7 @@
#define _LINUX_DQBLK_XFS_H
#include <linux/types.h>
+#include <linux/stddef.h>
/*
* Disk quota - quotactl(2) commands for the XFS Quota Manager (XQM).
@@ -139,6 +140,7 @@ typedef struct fs_disk_quota {
* incore.
*/
#define FS_QSTAT_VERSION 1 /* fs_quota_stat.qs_version */
+#define FS_QSTAT_VERSION_2 2 /* new field qs_pquota */
/*
* Some basic information about 'quota files'.
@@ -155,13 +157,37 @@ typedef struct fs_quota_stat {
__s8 qs_pad; /* unused */
fs_qfilestat_t qs_uquota; /* user quota storage information */
fs_qfilestat_t qs_gquota; /* group quota storage information */
-#define qs_pquota qs_gquota
__u32 qs_incoredqs; /* number of dquots incore */
__s32 qs_btimelimit; /* limit for blks timer */
__s32 qs_itimelimit; /* limit for inodes timer */
__s32 qs_rtbtimelimit;/* limit for rt blks timer */
__u16 qs_bwarnlimit; /* limit for num warnings */
__u16 qs_iwarnlimit; /* limit for num warnings */
+ fs_qfilestat_t qs_pquota; /* project quota storage information */
} fs_quota_stat_t;
+#define FS_QSTAT_V1_SIZE (offsetof(fs_quota_stat_t, qs_pquota))
+#define FS_QSTAT_V2_SIZE (FS_QSTAT_V1_SIZE + sizeof (fs_qfilestat_t))
+
+static inline int valid_qstat_version(int version)
+{
+ switch(version) {
+ case FS_QSTAT_VERSION:
+ case FS_QSTAT_VERSION_2:
+ return 1;
+ default:
+ return 0;
+ }
+}
+static inline int qstatsize(int version)
+{
+ switch(version) {
+ case FS_QSTAT_VERSION_2:
+ return FS_QSTAT_V2_SIZE;
+ case FS_QSTAT_VERSION:
+ default:
+ return FS_QSTAT_V1_SIZE;
+ }
+}
+
#endif /* _LINUX_DQBLK_XFS_H */
--
1.7.1
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
prev parent reply other threads:[~2011-10-26 21:22 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-26 21:21 [RFC v2 PATCH 0/5] xfs: Allow pquota and gquota to be used together Chandra Seetharaman
2011-10-26 21:21 ` [RFC v2 PATCH 1/5] xfs: Prep work for supporting both pquota and gquota Chandra Seetharaman
2011-10-27 16:17 ` Christoph Hellwig
2011-10-27 18:12 ` Chandra Seetharaman
2011-10-26 21:22 ` [RFC v2 PATCH 2/5] xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD Chandra Seetharaman
2011-10-26 21:22 ` [RFC v2 PATCH 3/5] xfs: Add pquota fields where gquota is used Chandra Seetharaman
2011-10-26 21:22 ` [RFC v2 PATCH 4/5] xfs: Add pquotaino to on-disk super block Chandra Seetharaman
2011-10-26 21:22 ` Chandra Seetharaman [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20111026212222.6513.95044.sendpatchset@chandra-lucid.austin.ibm.com \
--to=sekharan@us.ibm.com \
--cc=xfs@oss.sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox