container quota: init/destroy container dqinfo on mount namespace.

Started by unknown sender on May 30, 2012

Subsystems (2)

Maintainers (3)

DORMANTno replies

open the first message on its own page

Message details and related content
Initialize and destroy quota info when cloning a mount namespace or
free it up when the namespace was destroyed separately.

Signed-off-by: Jie Liu <redacted>
---
 fs/namespace.c |   28 ++++++++++++++++++++++++++++
 1 files changed, 28 insertions(+), 0 deletions(-)
diff --git a/fs/namespace.c b/fs/namespace.c
index 8823ba8..b12a054 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -23,6 +23,11 @@
 #include "pnode.h"
 #include "internal.h"
 
+#ifdef CONFIG_NS_QUOTA
+#include "ns_quota.h"
+#include "ns_quotaops.h"
+#endif
+
 #define HASH_SHIFT ilog2(PAGE_SIZE / sizeof(struct list_head))
 #define HASH_SIZE (1UL << HASH_SHIFT)
 
@@ -2204,6 +2209,17 @@ static struct mnt_namespace *alloc_mnt_ns(void)
 	INIT_LIST_HEAD(&new_ns->list);
 	init_waitqueue_head(&new_ns->poll);
 	new_ns->event = 0;
+#ifdef CONFIG_NS_QUOTA
+	/*
+	 * Don't trying to enable the corresponding disk quota stuff
+	 * at the this stage for now.  We need to come up with a
+	 * reasonable definition for mount namespace or container disk
+	 * quotas.
+	 */
+	new_ns->ns_qcop = NULL;
+	new_ns->ns_dqop = NULL;
+	new_ns->ns_dqinfo = NULL;
+#endif
 	return new_ns;
 }
 
@@ -2250,6 +2266,15 @@ static struct mnt_namespace *dup_mnt_ns(struct mnt_namespace *mnt_ns,
 		return ERR_PTR(-ENOMEM);
 	}
 	new_ns->root = new;
+#ifdef CONFIG_NS_QUOTA
+	/*
+	 * Initialize disk quota stuff if the current mount namespace is
+	 * cloned for containers.
+	 */
+	new_ns->ns_qcop = &ns_quotactl_operations;
+	new_ns->ns_dqop = &ns_dquot_operations;
+	ns_dqinfo_init(new_ns);
+#endif
 	br_write_lock(vfsmount_lock);
 	list_add_tail(&new_ns->list, &new->mnt_list);
 	br_write_unlock(vfsmount_lock);
@@ -2598,6 +2623,9 @@ void put_mnt_ns(struct mnt_namespace *ns)
 	down_write(&namespace_sem);
 	br_write_lock(vfsmount_lock);
 	umount_tree(ns->root, 0, &umount_list);
+#ifdef CONFIG_NS_QUOTA
+	ns_dqinfo_destroy(ns);
+#endif
 	br_write_unlock(vfsmount_lock);
 	up_write(&namespace_sem);
 	release_mounts(&umount_list);
-- 
1.7.9
Keyboard shortcuts
hback out one level
jnext message in thread / next series-diff position
kprevious message in thread / previous series-diff position
ldrill in
Escclose help / fold thread tree
?toggle this help