All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <51B04697.90106@parallels.com>

diff --git a/a/2.txt b/N1/2.txt
index 74c5032..acb86df 100644
--- a/a/2.txt
+++ b/N1/2.txt
@@ -1,4 +1,4 @@
-From cfc280ee20d93b1901c5ad2dcb13635ce7703d92 Mon Sep 17 00:00:00 2001
+>From cfc280ee20d93b1901c5ad2dcb13635ce7703d92 Mon Sep 17 00:00:00 2001
 From: Glauber Costa <glommer-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
 Date: Wed, 22 May 2013 09:55:15 +0400
 Subject: [PATCH] list_lru: dynamically adjust node arrays
diff --git a/a/content_digest b/N1/content_digest
index d6bb7a2..bccfb96 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -8,14 +8,14 @@
  "To\0Dave Chinner <david-FqsqvQoI3Ljby3iVrkZq2A@public.gmane.org>\0"
  "Cc\0Andrew Morton <akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>"
   Glauber Costa <glommer-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
-  linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
+  <linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
   Mel Gorman <mgorman-l3A5Bk7waGM@public.gmane.org>
-  linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org
-  cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
-  kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org
+  <linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org>
+  <cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
+  <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
   Michal Hocko <mhocko-AlSwsSmVLrQ@public.gmane.org>
   Johannes Weiner <hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
-  hughd-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org
+  <hughd-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
   Greg Thelen <gthelen-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
  " Dave Chinner <dchinner-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>\0"
  "\01:1\0"
@@ -50,7 +50,7 @@
  "\01:2\0"
  "fn\00001-list_lru-dynamically-adjust-node-arrays.patch\0"
  "b\0"
- "From cfc280ee20d93b1901c5ad2dcb13635ce7703d92 Mon Sep 17 00:00:00 2001\n"
+ ">From cfc280ee20d93b1901c5ad2dcb13635ce7703d92 Mon Sep 17 00:00:00 2001\n"
  "From: Glauber Costa <glommer-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>\n"
  "Date: Wed, 22 May 2013 09:55:15 +0400\n"
  "Subject: [PATCH] list_lru: dynamically adjust node arrays\n"
@@ -301,4 +301,4 @@
  "-- \n"
  1.8.1.4
 
-d1a3183b3cb1be2a78a1b8b3be0436e2b712fd86b4ab6d23a577fe86367d237e
+fb95f939eae65230987d55eacc761a2ed6beea01c189b13a2adf9a3600d13cd0

diff --git a/a/2.txt b/N2/2.txt
index 74c5032..8b13789 100644
--- a/a/2.txt
+++ b/N2/2.txt
@@ -1,250 +1 @@
-From cfc280ee20d93b1901c5ad2dcb13635ce7703d92 Mon Sep 17 00:00:00 2001
-From: Glauber Costa <glommer-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
-Date: Wed, 22 May 2013 09:55:15 +0400
-Subject: [PATCH] list_lru: dynamically adjust node arrays
 
-We currently use a compile-time constant to size the node array for the
-list_lru structure. Due to this, we don't need to allocate any memory at
-initialization time. But as a consequence, the structures that contain
-embedded list_lru lists can become way too big (the superblock for
-instance contains two of them).
-
-This patch aims at ameliorating this situation by dynamically allocating
-the node arrays with the firmware provided nr_node_ids.
-
-Signed-off-by: Glauber Costa <glommer-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
-Cc: Dave Chinner <dchinner-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
-Cc: Mel Gorman <mgorman-l3A5Bk7waGM@public.gmane.org>
----
- fs/super.c               |  9 +++++++--
- fs/xfs/xfs_buf.c         |  6 +++++-
- fs/xfs/xfs_qm.c          | 10 ++++++++--
- include/linux/list_lru.h | 21 ++++---------------
- lib/list_lru.c           | 52 ++++++++++++++++++++++++++++++++++++++++++------
- 5 files changed, 70 insertions(+), 28 deletions(-)
-
-diff --git a/fs/super.c b/fs/super.c
-index ff40e33..f8dfcec 100644
---- a/fs/super.c
-+++ b/fs/super.c
-@@ -209,8 +209,10 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags)
- 		INIT_HLIST_BL_HEAD(&s->s_anon);
- 		INIT_LIST_HEAD(&s->s_inodes);
- 
--		list_lru_init_memcg(&s->s_dentry_lru);
--		list_lru_init_memcg(&s->s_inode_lru);
-+		if (list_lru_init_memcg(&s->s_dentry_lru))
-+			goto err_out;
-+		if (list_lru_init_memcg(&s->s_inode_lru))
-+			goto err_out_dentry_lru;
- 
- 		INIT_LIST_HEAD(&s->s_mounts);
- 		init_rwsem(&s->s_umount);
-@@ -251,6 +253,9 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags)
- 	}
- out:
- 	return s;
-+
-+err_out_dentry_lru:
-+	list_lru_destroy(&s->s_dentry_lru);
- err_out:
- 	security_sb_free(s);
- #ifdef CONFIG_SMP
-diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
-index 0d7a619..b8cde02 100644
---- a/fs/xfs/xfs_buf.c
-+++ b/fs/xfs/xfs_buf.c
-@@ -1592,6 +1592,7 @@ xfs_free_buftarg(
- 	struct xfs_mount	*mp,
- 	struct xfs_buftarg	*btp)
- {
-+	list_lru_destroy(&btp->bt_lru);
- 	unregister_shrinker(&btp->bt_shrinker);
- 
- 	if (mp->m_flags & XFS_MOUNT_BARRIER)
-@@ -1666,9 +1667,12 @@ xfs_alloc_buftarg(
- 	if (!btp->bt_bdi)
- 		goto error;
- 
--	list_lru_init(&btp->bt_lru);
- 	if (xfs_setsize_buftarg_early(btp, bdev))
- 		goto error;
-+
-+	if (list_lru_init(&btp->bt_lru))
-+		goto error;
-+
- 	btp->bt_shrinker.count_objects = xfs_buftarg_shrink_count;
- 	btp->bt_shrinker.scan_objects = xfs_buftarg_shrink_scan;
- 	btp->bt_shrinker.seeks = DEFAULT_SEEKS;
-diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c
-index 85ca39e..29ea575 100644
---- a/fs/xfs/xfs_qm.c
-+++ b/fs/xfs/xfs_qm.c
-@@ -780,11 +780,18 @@ xfs_qm_init_quotainfo(
- 
- 	qinf = mp->m_quotainfo = kmem_zalloc(sizeof(xfs_quotainfo_t), KM_SLEEP);
- 
-+	if ((error = list_lru_init(&qinf->qi_lru))) {
-+		kmem_free(qinf);
-+		mp->m_quotainfo = NULL;
-+		return error;
-+	}
-+
- 	/*
- 	 * See if quotainodes are setup, and if not, allocate them,
- 	 * and change the superblock accordingly.
- 	 */
- 	if ((error = xfs_qm_init_quotainos(mp))) {
-+		list_lru_destroy(&qinf->qi_lru);
- 		kmem_free(qinf);
- 		mp->m_quotainfo = NULL;
- 		return error;
-@@ -794,8 +801,6 @@ xfs_qm_init_quotainfo(
- 	INIT_RADIX_TREE(&qinf->qi_gquota_tree, GFP_NOFS);
- 	mutex_init(&qinf->qi_tree_lock);
- 
--	list_lru_init(&qinf->qi_lru);
--
- 	/* mutex used to serialize quotaoffs */
- 	mutex_init(&qinf->qi_quotaofflock);
- 
-@@ -883,6 +888,7 @@ xfs_qm_destroy_quotainfo(
- 	qi = mp->m_quotainfo;
- 	ASSERT(qi != NULL);
- 
-+	list_lru_destroy(&qi->qi_lru);
- 	unregister_shrinker(&qi->qi_shrinker);
- 
- 	if (qi->qi_uquotaip) {
-diff --git a/include/linux/list_lru.h b/include/linux/list_lru.h
-index dcb67dc..6d6efda 100644
---- a/include/linux/list_lru.h
-+++ b/include/linux/list_lru.h
-@@ -42,18 +42,8 @@ struct list_lru_array {
- };
- 
- struct list_lru {
--	/*
--	 * Because we use a fixed-size array, this struct can be very big if
--	 * MAX_NUMNODES is big. If this becomes a problem this is fixable by
--	 * turning this into a pointer and dynamically allocating this to
--	 * nr_node_ids. This quantity is firwmare-provided, and still would
--	 * provide room for all nodes at the cost of a pointer lookup and an
--	 * extra allocation. Because that allocation will most likely come from
--	 * a different slab cache than the main structure holding this
--	 * structure, we may very well fail.
--	 */
--	struct list_lru_node	node[MAX_NUMNODES];
--	atomic_long_t		node_totals[MAX_NUMNODES];
-+	struct list_lru_node	*node;
-+	atomic_long_t		*node_totals;
- 	nodemask_t		active_nodes;
- #ifdef CONFIG_MEMCG_KMEM
- 	/* All memcg-aware LRUs will be chained in the lrus list */
-@@ -78,14 +68,11 @@ struct mem_cgroup;
- struct list_lru_array *lru_alloc_array(void);
- int memcg_update_all_lrus(unsigned long num);
- void memcg_destroy_all_lrus(struct mem_cgroup *memcg);
--void list_lru_destroy(struct list_lru *lru);
- int __memcg_init_lru(struct list_lru *lru);
--#else
--static inline void list_lru_destroy(struct list_lru *lru)
--{
--}
- #endif
- 
-+void list_lru_destroy(struct list_lru *lru);
-+
- int __list_lru_init(struct list_lru *lru, bool memcg_enabled);
- static inline int list_lru_init(struct list_lru *lru)
- {
-diff --git a/lib/list_lru.c b/lib/list_lru.c
-index f919f99..1b38d67 100644
---- a/lib/list_lru.c
-+++ b/lib/list_lru.c
-@@ -334,7 +334,6 @@ int __memcg_init_lru(struct list_lru *lru)
- {
- 	int ret;
- 
--	INIT_LIST_HEAD(&lru->lrus);
- 	mutex_lock(&all_memcg_lrus_mutex);
- 	list_add(&lru->lrus, &all_memcg_lrus);
- 	ret = memcg_new_lru(lru);
-@@ -369,8 +368,11 @@ out:
- 	return ret;
- }
- 
--void list_lru_destroy(struct list_lru *lru)
-+static void list_lru_destroy_memcg(struct list_lru *lru)
- {
-+	if (list_empty(&lru->lrus))
-+		return;
-+
- 	mutex_lock(&all_memcg_lrus_mutex);
- 	list_del(&lru->lrus);
- 	mutex_unlock(&all_memcg_lrus_mutex);
-@@ -388,20 +390,58 @@ void memcg_destroy_all_lrus(struct mem_cgroup *memcg)
- 	}
- 	mutex_unlock(&all_memcg_lrus_mutex);
- }
-+
-+int memcg_list_lru_init(struct list_lru *lru, bool memcg_enabled)
-+{
-+	INIT_LIST_HEAD(&lru->lrus);
-+	if (memcg_enabled)
-+		return memcg_init_lru(lru);
-+
-+	return 0;
-+}
-+#else
-+static void list_lru_destroy_memcg(struct list_lru *lru)
-+{
-+}
-+
-+int memcg_list_lru_init(struct list_lru *lru, bool memcg_enabled)
-+{
-+	return 0;
-+}
- #endif
- 
- int __list_lru_init(struct list_lru *lru, bool memcg_enabled)
- {
- 	int i;
- 
-+	size_t size;
-+
-+	size = sizeof(*lru->node) * nr_node_ids;
-+	lru->node = kzalloc(size, GFP_KERNEL);
-+	if (!lru->node)
-+		return -ENOMEM;
-+
-+	size = sizeof(*lru->node) * nr_node_ids;
-+	lru->node_totals = kzalloc(size, GFP_KERNEL);
-+	if (!lru->node_totals) {
-+		kfree(lru->node);
-+		return -ENOMEM;
-+	}
-+
- 	nodes_clear(lru->active_nodes);
--	for (i = 0; i < MAX_NUMNODES; i++) {
-+	for (i = 0; i < nr_node_ids; i++) {
- 		list_lru_init_one(&lru->node[i]);
- 		atomic_long_set(&lru->node_totals[i], 0);
- 	}
- 
--	if (memcg_enabled)
--		return memcg_init_lru(lru);
--	return 0;
-+	return memcg_list_lru_init(lru, memcg_enabled);
- }
- EXPORT_SYMBOL_GPL(__list_lru_init);
-+
-+void list_lru_destroy(struct list_lru *lru)
-+{
-+	kfree(lru->node);
-+	kfree(lru->node_totals);
-+	list_lru_destroy_memcg(lru);
-+}
-+EXPORT_SYMBOL_GPL(list_lru_destroy);
--- 
-1.8.1.4
diff --git a/a/content_digest b/N2/content_digest
index d6bb7a2..e96ba47 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -2,22 +2,22 @@
  "ref\01370287804-3481-12-git-send-email-glommer@openvz.org\0"
  "ref\020130605160804.be25fb655f075efe70ec57c0@linux-foundation.org\0"
  "ref\020130606032107.GQ29338@dastard\0"
- "From\0Glauber Costa <glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>\0"
+ "From\0Glauber Costa <glommer@parallels.com>\0"
  "Subject\0Re: [PATCH v10 11/35] list_lru: per-node list infrastructure\0"
  "Date\0Thu, 6 Jun 2013 12:21:43 +0400\0"
- "To\0Dave Chinner <david-FqsqvQoI3Ljby3iVrkZq2A@public.gmane.org>\0"
- "Cc\0Andrew Morton <akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>"
-  Glauber Costa <glommer-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
-  linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
-  Mel Gorman <mgorman-l3A5Bk7waGM@public.gmane.org>
-  linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org
-  cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
-  kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org
-  Michal Hocko <mhocko-AlSwsSmVLrQ@public.gmane.org>
-  Johannes Weiner <hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
-  hughd-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org
-  Greg Thelen <gthelen-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
- " Dave Chinner <dchinner-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>\0"
+ "To\0Dave Chinner <david@fromorbit.com>\0"
+ "Cc\0Andrew Morton <akpm@linux-foundation.org>"
+  Glauber Costa <glommer@openvz.org>
+  linux-fsdevel@vger.kernel.org
+  Mel Gorman <mgorman@suse.de>
+  linux-mm@kvack.org
+  cgroups@vger.kernel.org
+  kamezawa.hiroyu@jp.fujitsu.com
+  Michal Hocko <mhocko@suse.cz>
+  Johannes Weiner <hannes@cmpxchg.org>
+  hughd@google.com
+  Greg Thelen <gthelen@google.com>
+ " Dave Chinner <dchinner@redhat.com>\0"
  "\01:1\0"
  "b\0"
  "On 06/06/2013 07:21 AM, Dave Chinner wrote:\n"
@@ -50,255 +50,5 @@
  "\01:2\0"
  "fn\00001-list_lru-dynamically-adjust-node-arrays.patch\0"
  "b\0"
- "From cfc280ee20d93b1901c5ad2dcb13635ce7703d92 Mon Sep 17 00:00:00 2001\n"
- "From: Glauber Costa <glommer-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>\n"
- "Date: Wed, 22 May 2013 09:55:15 +0400\n"
- "Subject: [PATCH] list_lru: dynamically adjust node arrays\n"
- "\n"
- "We currently use a compile-time constant to size the node array for the\n"
- "list_lru structure. Due to this, we don't need to allocate any memory at\n"
- "initialization time. But as a consequence, the structures that contain\n"
- "embedded list_lru lists can become way too big (the superblock for\n"
- "instance contains two of them).\n"
- "\n"
- "This patch aims at ameliorating this situation by dynamically allocating\n"
- "the node arrays with the firmware provided nr_node_ids.\n"
- "\n"
- "Signed-off-by: Glauber Costa <glommer-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>\n"
- "Cc: Dave Chinner <dchinner-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>\n"
- "Cc: Mel Gorman <mgorman-l3A5Bk7waGM@public.gmane.org>\n"
- "---\n"
- " fs/super.c               |  9 +++++++--\n"
- " fs/xfs/xfs_buf.c         |  6 +++++-\n"
- " fs/xfs/xfs_qm.c          | 10 ++++++++--\n"
- " include/linux/list_lru.h | 21 ++++---------------\n"
- " lib/list_lru.c           | 52 ++++++++++++++++++++++++++++++++++++++++++------\n"
- " 5 files changed, 70 insertions(+), 28 deletions(-)\n"
- "\n"
- "diff --git a/fs/super.c b/fs/super.c\n"
- "index ff40e33..f8dfcec 100644\n"
- "--- a/fs/super.c\n"
- "+++ b/fs/super.c\n"
- "@@ -209,8 +209,10 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags)\n"
- " \t\tINIT_HLIST_BL_HEAD(&s->s_anon);\n"
- " \t\tINIT_LIST_HEAD(&s->s_inodes);\n"
- " \n"
- "-\t\tlist_lru_init_memcg(&s->s_dentry_lru);\n"
- "-\t\tlist_lru_init_memcg(&s->s_inode_lru);\n"
- "+\t\tif (list_lru_init_memcg(&s->s_dentry_lru))\n"
- "+\t\t\tgoto err_out;\n"
- "+\t\tif (list_lru_init_memcg(&s->s_inode_lru))\n"
- "+\t\t\tgoto err_out_dentry_lru;\n"
- " \n"
- " \t\tINIT_LIST_HEAD(&s->s_mounts);\n"
- " \t\tinit_rwsem(&s->s_umount);\n"
- "@@ -251,6 +253,9 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags)\n"
- " \t}\n"
- " out:\n"
- " \treturn s;\n"
- "+\n"
- "+err_out_dentry_lru:\n"
- "+\tlist_lru_destroy(&s->s_dentry_lru);\n"
- " err_out:\n"
- " \tsecurity_sb_free(s);\n"
- " #ifdef CONFIG_SMP\n"
- "diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c\n"
- "index 0d7a619..b8cde02 100644\n"
- "--- a/fs/xfs/xfs_buf.c\n"
- "+++ b/fs/xfs/xfs_buf.c\n"
- "@@ -1592,6 +1592,7 @@ xfs_free_buftarg(\n"
- " \tstruct xfs_mount\t*mp,\n"
- " \tstruct xfs_buftarg\t*btp)\n"
- " {\n"
- "+\tlist_lru_destroy(&btp->bt_lru);\n"
- " \tunregister_shrinker(&btp->bt_shrinker);\n"
- " \n"
- " \tif (mp->m_flags & XFS_MOUNT_BARRIER)\n"
- "@@ -1666,9 +1667,12 @@ xfs_alloc_buftarg(\n"
- " \tif (!btp->bt_bdi)\n"
- " \t\tgoto error;\n"
- " \n"
- "-\tlist_lru_init(&btp->bt_lru);\n"
- " \tif (xfs_setsize_buftarg_early(btp, bdev))\n"
- " \t\tgoto error;\n"
- "+\n"
- "+\tif (list_lru_init(&btp->bt_lru))\n"
- "+\t\tgoto error;\n"
- "+\n"
- " \tbtp->bt_shrinker.count_objects = xfs_buftarg_shrink_count;\n"
- " \tbtp->bt_shrinker.scan_objects = xfs_buftarg_shrink_scan;\n"
- " \tbtp->bt_shrinker.seeks = DEFAULT_SEEKS;\n"
- "diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c\n"
- "index 85ca39e..29ea575 100644\n"
- "--- a/fs/xfs/xfs_qm.c\n"
- "+++ b/fs/xfs/xfs_qm.c\n"
- "@@ -780,11 +780,18 @@ xfs_qm_init_quotainfo(\n"
- " \n"
- " \tqinf = mp->m_quotainfo = kmem_zalloc(sizeof(xfs_quotainfo_t), KM_SLEEP);\n"
- " \n"
- "+\tif ((error = list_lru_init(&qinf->qi_lru))) {\n"
- "+\t\tkmem_free(qinf);\n"
- "+\t\tmp->m_quotainfo = NULL;\n"
- "+\t\treturn error;\n"
- "+\t}\n"
- "+\n"
- " \t/*\n"
- " \t * See if quotainodes are setup, and if not, allocate them,\n"
- " \t * and change the superblock accordingly.\n"
- " \t */\n"
- " \tif ((error = xfs_qm_init_quotainos(mp))) {\n"
- "+\t\tlist_lru_destroy(&qinf->qi_lru);\n"
- " \t\tkmem_free(qinf);\n"
- " \t\tmp->m_quotainfo = NULL;\n"
- " \t\treturn error;\n"
- "@@ -794,8 +801,6 @@ xfs_qm_init_quotainfo(\n"
- " \tINIT_RADIX_TREE(&qinf->qi_gquota_tree, GFP_NOFS);\n"
- " \tmutex_init(&qinf->qi_tree_lock);\n"
- " \n"
- "-\tlist_lru_init(&qinf->qi_lru);\n"
- "-\n"
- " \t/* mutex used to serialize quotaoffs */\n"
- " \tmutex_init(&qinf->qi_quotaofflock);\n"
- " \n"
- "@@ -883,6 +888,7 @@ xfs_qm_destroy_quotainfo(\n"
- " \tqi = mp->m_quotainfo;\n"
- " \tASSERT(qi != NULL);\n"
- " \n"
- "+\tlist_lru_destroy(&qi->qi_lru);\n"
- " \tunregister_shrinker(&qi->qi_shrinker);\n"
- " \n"
- " \tif (qi->qi_uquotaip) {\n"
- "diff --git a/include/linux/list_lru.h b/include/linux/list_lru.h\n"
- "index dcb67dc..6d6efda 100644\n"
- "--- a/include/linux/list_lru.h\n"
- "+++ b/include/linux/list_lru.h\n"
- "@@ -42,18 +42,8 @@ struct list_lru_array {\n"
- " };\n"
- " \n"
- " struct list_lru {\n"
- "-\t/*\n"
- "-\t * Because we use a fixed-size array, this struct can be very big if\n"
- "-\t * MAX_NUMNODES is big. If this becomes a problem this is fixable by\n"
- "-\t * turning this into a pointer and dynamically allocating this to\n"
- "-\t * nr_node_ids. This quantity is firwmare-provided, and still would\n"
- "-\t * provide room for all nodes at the cost of a pointer lookup and an\n"
- "-\t * extra allocation. Because that allocation will most likely come from\n"
- "-\t * a different slab cache than the main structure holding this\n"
- "-\t * structure, we may very well fail.\n"
- "-\t */\n"
- "-\tstruct list_lru_node\tnode[MAX_NUMNODES];\n"
- "-\tatomic_long_t\t\tnode_totals[MAX_NUMNODES];\n"
- "+\tstruct list_lru_node\t*node;\n"
- "+\tatomic_long_t\t\t*node_totals;\n"
- " \tnodemask_t\t\tactive_nodes;\n"
- " #ifdef CONFIG_MEMCG_KMEM\n"
- " \t/* All memcg-aware LRUs will be chained in the lrus list */\n"
- "@@ -78,14 +68,11 @@ struct mem_cgroup;\n"
- " struct list_lru_array *lru_alloc_array(void);\n"
- " int memcg_update_all_lrus(unsigned long num);\n"
- " void memcg_destroy_all_lrus(struct mem_cgroup *memcg);\n"
- "-void list_lru_destroy(struct list_lru *lru);\n"
- " int __memcg_init_lru(struct list_lru *lru);\n"
- "-#else\n"
- "-static inline void list_lru_destroy(struct list_lru *lru)\n"
- "-{\n"
- "-}\n"
- " #endif\n"
- " \n"
- "+void list_lru_destroy(struct list_lru *lru);\n"
- "+\n"
- " int __list_lru_init(struct list_lru *lru, bool memcg_enabled);\n"
- " static inline int list_lru_init(struct list_lru *lru)\n"
- " {\n"
- "diff --git a/lib/list_lru.c b/lib/list_lru.c\n"
- "index f919f99..1b38d67 100644\n"
- "--- a/lib/list_lru.c\n"
- "+++ b/lib/list_lru.c\n"
- "@@ -334,7 +334,6 @@ int __memcg_init_lru(struct list_lru *lru)\n"
- " {\n"
- " \tint ret;\n"
- " \n"
- "-\tINIT_LIST_HEAD(&lru->lrus);\n"
- " \tmutex_lock(&all_memcg_lrus_mutex);\n"
- " \tlist_add(&lru->lrus, &all_memcg_lrus);\n"
- " \tret = memcg_new_lru(lru);\n"
- "@@ -369,8 +368,11 @@ out:\n"
- " \treturn ret;\n"
- " }\n"
- " \n"
- "-void list_lru_destroy(struct list_lru *lru)\n"
- "+static void list_lru_destroy_memcg(struct list_lru *lru)\n"
- " {\n"
- "+\tif (list_empty(&lru->lrus))\n"
- "+\t\treturn;\n"
- "+\n"
- " \tmutex_lock(&all_memcg_lrus_mutex);\n"
- " \tlist_del(&lru->lrus);\n"
- " \tmutex_unlock(&all_memcg_lrus_mutex);\n"
- "@@ -388,20 +390,58 @@ void memcg_destroy_all_lrus(struct mem_cgroup *memcg)\n"
- " \t}\n"
- " \tmutex_unlock(&all_memcg_lrus_mutex);\n"
- " }\n"
- "+\n"
- "+int memcg_list_lru_init(struct list_lru *lru, bool memcg_enabled)\n"
- "+{\n"
- "+\tINIT_LIST_HEAD(&lru->lrus);\n"
- "+\tif (memcg_enabled)\n"
- "+\t\treturn memcg_init_lru(lru);\n"
- "+\n"
- "+\treturn 0;\n"
- "+}\n"
- "+#else\n"
- "+static void list_lru_destroy_memcg(struct list_lru *lru)\n"
- "+{\n"
- "+}\n"
- "+\n"
- "+int memcg_list_lru_init(struct list_lru *lru, bool memcg_enabled)\n"
- "+{\n"
- "+\treturn 0;\n"
- "+}\n"
- " #endif\n"
- " \n"
- " int __list_lru_init(struct list_lru *lru, bool memcg_enabled)\n"
- " {\n"
- " \tint i;\n"
- " \n"
- "+\tsize_t size;\n"
- "+\n"
- "+\tsize = sizeof(*lru->node) * nr_node_ids;\n"
- "+\tlru->node = kzalloc(size, GFP_KERNEL);\n"
- "+\tif (!lru->node)\n"
- "+\t\treturn -ENOMEM;\n"
- "+\n"
- "+\tsize = sizeof(*lru->node) * nr_node_ids;\n"
- "+\tlru->node_totals = kzalloc(size, GFP_KERNEL);\n"
- "+\tif (!lru->node_totals) {\n"
- "+\t\tkfree(lru->node);\n"
- "+\t\treturn -ENOMEM;\n"
- "+\t}\n"
- "+\n"
- " \tnodes_clear(lru->active_nodes);\n"
- "-\tfor (i = 0; i < MAX_NUMNODES; i++) {\n"
- "+\tfor (i = 0; i < nr_node_ids; i++) {\n"
- " \t\tlist_lru_init_one(&lru->node[i]);\n"
- " \t\tatomic_long_set(&lru->node_totals[i], 0);\n"
- " \t}\n"
- " \n"
- "-\tif (memcg_enabled)\n"
- "-\t\treturn memcg_init_lru(lru);\n"
- "-\treturn 0;\n"
- "+\treturn memcg_list_lru_init(lru, memcg_enabled);\n"
- " }\n"
- " EXPORT_SYMBOL_GPL(__list_lru_init);\n"
- "+\n"
- "+void list_lru_destroy(struct list_lru *lru)\n"
- "+{\n"
- "+\tkfree(lru->node);\n"
- "+\tkfree(lru->node_totals);\n"
- "+\tlist_lru_destroy_memcg(lru);\n"
- "+}\n"
- "+EXPORT_SYMBOL_GPL(list_lru_destroy);\n"
- "-- \n"
- 1.8.1.4
 
-d1a3183b3cb1be2a78a1b8b3be0436e2b712fd86b4ab6d23a577fe86367d237e
+b35d73cccc4739116d97afcbcc5f06171e8aecb1c97a0c5b07b65e030f7890b9

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.