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.