diff for duplicates of <519224DF.3070807@gmail.com> diff --git a/a/2.txt b/N1/2.txt index 8b13789..9d5080e 100644 --- a/a/2.txt +++ b/N1/2.txt @@ -1 +1,63 @@ +>From a76e17c129d2f779f1588aa7ae319b76854068eb Mon Sep 17 00:00:00 2001 +From: Jianpeng Ma <majianpeng@gmail.com> +Date: Tue, 14 May 2013 19:32:06 +0800 +Subject: [PATCH 3/3] mm/kmemleak.c: Merge the consecutive scan-areas. +If the scan-areas are adjacent,it can merge in order to reduce memomy. +And using pr_warn instead of pr_warning. + +Signed-off-by: Jianpeng Ma <majianpeng@gmail.com> +--- + mm/kmemleak.c | 26 +++++++++++++++++++------- + 1 file changed, 19 insertions(+), 7 deletions(-) + +diff --git a/mm/kmemleak.c b/mm/kmemleak.c +index f0ece93..9590a57 100644 +--- a/mm/kmemleak.c ++++ b/mm/kmemleak.c +@@ -746,24 +746,36 @@ static void add_scan_area(unsigned long ptr, size_t size, gfp_t gfp) + return; + } + +- area = kmem_cache_alloc(scan_area_cache, gfp_kmemleak_mask(gfp)); +- if (!area) { +- pr_warning("Cannot allocate a scan area\n"); +- goto out; +- } +- + spin_lock_irqsave(&object->lock, flags); + if (ptr + size > object->pointer + object->size) { + kmemleak_warn("Scan area larger than object 0x%08lx\n", ptr); + dump_object_info(object); +- kmem_cache_free(scan_area_cache, area); + goto out_unlock; + } ++ hlist_for_each_entry(area, &object->area_list, node) { ++ if (ptr + size == area->start) { ++ area->start = ptr; ++ area->size += size; ++ goto out_unlock; ++ } else if (ptr == area->start + area->size) { ++ area->size += size; ++ goto out_unlock; ++ } ++ ++ } ++ spin_unlock_irqrestore(&object->lock, flags); ++ ++ area = kmem_cache_alloc(scan_area_cache, gfp_kmemleak_mask(gfp)); ++ if (!area) { ++ pr_warn("Cannot allocate a scan area\n"); ++ goto out; ++ } + + INIT_HLIST_NODE(&area->node); + area->start = ptr; + area->size = size; + ++ spin_lock_irqsave(&object->lock, flags); + hlist_add_head(&area->node, &object->area_list); + out_unlock: + spin_unlock_irqrestore(&object->lock, flags); +-- +1.8.3.rc1.44.gb387c77 diff --git a/a/content_digest b/N1/content_digest index f0191a9..7b915ea 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -67,5 +67,68 @@ "\01:2\0" "fn\00003-mm-kmemleak.c-Merge-the-consecutive-scan-areas.patch\0" "b\0" + ">From a76e17c129d2f779f1588aa7ae319b76854068eb Mon Sep 17 00:00:00 2001\n" + "From: Jianpeng Ma <majianpeng@gmail.com>\n" + "Date: Tue, 14 May 2013 19:32:06 +0800\n" + "Subject: [PATCH 3/3] mm/kmemleak.c: Merge the consecutive scan-areas.\n" + "\n" + "If the scan-areas are adjacent,it can merge in order to reduce memomy.\n" + "And using pr_warn instead of pr_warning.\n" + "\n" + "Signed-off-by: Jianpeng Ma <majianpeng@gmail.com>\n" + "---\n" + " mm/kmemleak.c | 26 +++++++++++++++++++-------\n" + " 1 file changed, 19 insertions(+), 7 deletions(-)\n" + "\n" + "diff --git a/mm/kmemleak.c b/mm/kmemleak.c\n" + "index f0ece93..9590a57 100644\n" + "--- a/mm/kmemleak.c\n" + "+++ b/mm/kmemleak.c\n" + "@@ -746,24 +746,36 @@ static void add_scan_area(unsigned long ptr, size_t size, gfp_t gfp)\n" + " \t\treturn;\n" + " \t}\n" + " \n" + "-\tarea = kmem_cache_alloc(scan_area_cache, gfp_kmemleak_mask(gfp));\n" + "-\tif (!area) {\n" + "-\t\tpr_warning(\"Cannot allocate a scan area\\n\");\n" + "-\t\tgoto out;\n" + "-\t}\n" + "-\n" + " \tspin_lock_irqsave(&object->lock, flags);\n" + " \tif (ptr + size > object->pointer + object->size) {\n" + " \t\tkmemleak_warn(\"Scan area larger than object 0x%08lx\\n\", ptr);\n" + " \t\tdump_object_info(object);\n" + "-\t\tkmem_cache_free(scan_area_cache, area);\n" + " \t\tgoto out_unlock;\n" + " \t}\n" + "+\thlist_for_each_entry(area, &object->area_list, node) {\n" + "+\t\tif (ptr + size == area->start) {\n" + "+\t\t\tarea->start = ptr;\n" + "+\t\t\tarea->size += size;\n" + "+\t\t\tgoto out_unlock;\n" + "+\t\t} else if (ptr == area->start + area->size) {\n" + "+\t\t\tarea->size += size;\n" + "+\t\t\tgoto out_unlock;\n" + "+\t\t}\n" + "+\n" + "+\t}\n" + "+\tspin_unlock_irqrestore(&object->lock, flags);\n" + "+\n" + "+\tarea = kmem_cache_alloc(scan_area_cache, gfp_kmemleak_mask(gfp));\n" + "+\tif (!area) {\n" + "+\t\tpr_warn(\"Cannot allocate a scan area\\n\");\n" + "+\t\tgoto out;\n" + "+\t}\n" + " \n" + " \tINIT_HLIST_NODE(&area->node);\n" + " \tarea->start = ptr;\n" + " \tarea->size = size;\n" + " \n" + "+\tspin_lock_irqsave(&object->lock, flags);\n" + " \thlist_add_head(&area->node, &object->area_list);\n" + " out_unlock:\n" + " \tspin_unlock_irqrestore(&object->lock, flags);\n" + "-- \n" + 1.8.3.rc1.44.gb387c77 -be1324d831bd0d4ded8e4e5f13df78444f9b0976f6fd17f803ce13ded2cd974d +0e41b396a1677a5962a090e0365154cdcf26bf3303f9a8f91afd14e370333901
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.