|
|
|
[PATCH 04/12] container quota: introduce container disk quota data header file. | |
| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] | |
Header file for container disk quota.
Signed-off-by: Jie Liu <jeff.liu@xxxxxxxxxx>
---
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-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[Linux Ext4 Filesystem] [Ecryptfs] [AutoFS] [Kernel Newbies] [Share Photos] [Security] [Netfilter] [Bugtraq] [Photo] [Yosemite] [Yosemite News] [MIPS Linux] [ARM Linux] [Linux Security] [Linux Cachefs] [Reiser Filesystem] [Linux RAID] [Samba] [Video 4 Linux] [Device Mapper] [CEPH Filesystem]
![]() |