[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1338389946-13711-5-git-send-email-jeff.liu@oracle.com>
Date: Wed, 30 May 2012 22:58:58 +0800
From: jeff.liu@...cle.com
To: containers@...ts.linux-foundation.org
Cc: cgroups@...r.kernel.org, jack@...e.cz, glommer@...allels.com,
daniel.lezcano@...e.fr, tytso@....edu, bpm@....com,
chris.mason@...cle.com, hch@...radead.org,
christopher.jones@...cle.com, david@...morbit.com,
tinguely@....com, tm@....ma, linux-ext4@...r.kernel.org,
linux-fsdevel@...r.kernel.org, Jie Liu <jeff.liu@...cle.com>
Subject: [PATCH 04/12] container quota: introduce container disk quota data header file.
Header file for container disk quota.
Signed-off-by: Jie Liu <jeff.liu@...cle.com>
---
fs/ns_quota.h | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 84 insertions(+), 0 deletions(-)
create mode 100644 fs/ns_quota.h
diff --git a/fs/ns_quota.h b/fs/ns_quota.h
new file mode 100644
index 0000000..cf90fff
--- /dev/null
+++ b/fs/ns_quota.h
@@ -0,0 +1,84 @@
+#ifndef _LINUX_NS_QUOTA_
+#define _LINUX_NS_QUOTA_
+
+#include <linux/types.h>
+#include <linux/list.h>
+#include <linux/mutex.h>
+#include <linux/rwsem.h>
+#include <linux/spinlock.h>
+#include <linux/atomic.h>
+#include <linux/quota.h>
+#include <linux/user_namespace.h>
+
+#define NS_MAX_IQ_TIME 604800 /* (7*24*60*60) 1 week */
+#define NS_MAX_DQ_TIME 604800 /* (7*24*60*60) 1 week */
+
+/*
+ * Below most stuff were copied from kernel/user.c, using them
+ * to calculate and define quota hash table and hash routine.
+ */
+#define NS_DQHASH_BITS (CONFIG_BASE_SMALL ? 3 : 7)
+#define NS_DQHASH_SZ (1 << NS_DQHASH_BITS)
+
+struct ns_mem_dqinfo {
+ unsigned long dqi_flags;
+ unsigned int dqi_bgrace;
+ unsigned int dqi_igrace;
+ qsize_t dqi_maxblimit;
+ qsize_t dqi_maxilimit;
+};
+
+/* Mount namespace disk quota definitation */
+struct ns_quota_info {
+ /* Flags for disk quotas on this mount namespace */
+ unsigned int dq_flags;
+ /* Serialize mount namespace quotaon & quotaoff */
+ struct mutex dqonoff_mutex;
+ /* Serialize user/group quota list operations */
+ spinlock_t dq_list_lock;
+ /* Serialize quota value incr/decr operations */
+ spinlock_t dq_data_lock;
+ struct kmem_cache *dquot_cachep;
+ /* Hash list of all user disk quotas */
+ struct hlist_head u_dquots[NS_DQHASH_SZ];
+ /* Hash list of all group disk quotas */
+ struct hlist_head g_dquots[NS_DQHASH_SZ];
+ /* Information for each quota type */
+ struct ns_mem_dqinfo dqinfo[MAXQUOTAS];
+};
+
+/* Mount namespace disk quota object */
+struct ns_dquot {
+ struct hlist_node dq_hash_node; /* Hash list in memory */
+ struct mnt_namespace *dq_ns; /* Mount namespace this applies to */
+ unsigned int dq_id; /* ID this applies to (uid, gid) */
+ unsigned long dq_flags; /* See DQ_* */
+ short dq_type; /* Type of quota */
+ struct mem_dqblk dq_dqb; /* Diskquota usage */
+};
+
+/* Operations for quota object allocation/destroy */
+struct ns_dquot_ops {
+ /* Allocate memory for new dqout object */
+ struct ns_dquot *(*alloc_dquot)(struct mnt_namespace *);
+ /* Free memory for dquot */
+ void (*destroy_dquot)(struct ns_dquot *);
+};
+
+/* Operations for quota control */
+struct ns_quotactl_ops {
+ int (*quota_on)(struct mnt_namespace *, int);
+ int (*quota_off)(struct mnt_namespace *, int);
+ int (*get_info)(struct mnt_namespace *, int, struct if_dqinfo *);
+ int (*set_info)(struct mnt_namespace *, int, struct if_dqinfo *);
+ int (*get_dqblk)(struct mnt_namespace *, int, qid_t,
+ struct fs_disk_quota *);
+ int (*set_dqblk)(struct mnt_namespace *, int, qid_t,
+ struct fs_disk_quota *);
+};
+
+int ns_dqinfo_init(struct mnt_namespace *ns);
+void ns_dqinfo_destroy(struct mnt_namespace *ns);
+extern unsigned int ns_dquot_getfmt(struct mnt_namespace *ns, int type);
+
+#endif /* _LINUX_NS_QUOTA_ */
--
1.7.9
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists