Skip to contentSkip to conversation

slub: Using judgement !!c to judge per cpu has obj in fucntion has_cpu_slab().

PATCH In review majianpeng 3 participants 10 messages May 8, 2012 – May 9, 2012

Subsystems (2)
lore
Share & tools
lore

majianpeng

author
#0 lore raw

PATCH 1/1 slub: Using judgement !!c to judge per cpu has obj in fucntion has_cpu_slab().

At present, I found some kernel message like:
LUB raid5-md127: kmem_cache_destroy called for cache that still has objects.
Pid: 6143, comm: mdadm Tainted: G O 3.4.0-rc6+ #75

Call Trace:
[<ffffffff811227f8>] kmem_cache_destroy+0x328/0x400
[<ffffffffa005ff1d>] free_conf+0x2d/0xf0 [raid456]
[<ffffffffa0060791>] stop+0x41/0x60 [raid456]
[<ffffffffa000276a>] md_stop+0x1a/0x60 [md_mod]
[<ffffffffa000c974>] do_md_stop+0x74/0x470 [md_mod]
[<ffffffffa000d0ff>] md_ioctl+0xff/0x11f0 [md_mod]
[<ffffffff8127c958>] blkdev_ioctl+0xd8/0x7a0
[<ffffffff8115ef6b>] block_ioctl+0x3b/0x40
[<ffffffff8113b9c6>] do_vfs_ioctl+0x96/0x560
[<ffffffff8113bf21>] sys_ioctl+0x91/0xa0
[<ffffffff816e9d22>] system_call_fastpath+0x16/0x1b

Then using kmemleak can found those messages:
unreferenced object 0xffff8800b6db7380 (size 112):
comm "mdadm", pid 5783, jiffies 4294810749 (age 90.589s) hex dump (first 32 bytes):

    01 01 db b6 ad 4e ad de ff ff ff ff ff ff ff ff  .....N..........
    ff ff ff ff ff ff ff ff 98 40 4a 82 ff ff ff ff  .........@J.....
  backtrace:
    [<ffffffff816b52c1>] kmemleak_alloc+0x21/0x50
    [<ffffffff8111a11b>] kmem_cache_alloc+0xeb/0x1b0
    [<ffffffff8111c431>] kmem_cache_open+0x2f1/0x430
    [<ffffffff8111c6c8>] kmem_cache_create+0x158/0x320
    [<ffffffffa008f979>] setup_conf+0x649/0x770 [raid456]
    [<ffffffffa009044b>] run+0x68b/0x840 [raid456]
    [<ffffffffa000bde9>] md_run+0x529/0x940 [md_mod]
    [<ffffffffa000c218>] do_md_run+0x18/0xc0 [md_mod]
    [<ffffffffa000dba8>] md_ioctl+0xba8/0x11f0 [md_mod]
    [<ffffffff81272b28>] blkdev_ioctl+0xd8/0x7a0
    [<ffffffff81155bfb>] block_ioctl+0x3b/0x40
    [<ffffffff811326d6>] do_vfs_ioctl+0x96/0x560
    [<ffffffff81132c31>] sys_ioctl+0x91/0xa0
    [<ffffffff816dd3a2>] system_call_fastpath+0x16/0x1b
    [<ffffffffffffffff>] 0xffffffffffffffff

Because kmemleak don't detect page leak, so the pages of slabs did not print.

Commit a8364d5555b2030d093cde0f0795 modify the code of flush_all.

---
 mm/slub.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
mm/slub.c +1 -1
index ffe13fd..6fce08f 100644
@@ -2040,7 +2040,7 @@ static bool has_cpu_slab(int cpu, void *info)
 	struct kmem_cache *s = info;
 	struct kmem_cache_cpu *c = per_cpu_ptr(s->cpu_slab, cpu);
 
-	return !!(c->page);
+	return !!c;
 }
 
 static void flush_all(struct kmem_cache *s)
Signature · 4 lines
1.7.5.4

root@majianpeng:/mnt/kernel/linux# vim mm/slub.c 
root@majianpeng:/mnt/kernel/linux# cat 0001-slub-Using-judgement-c-to-judge-per-cpu-has-obj-in-f.patch 
#1 lore raw

Hi Majianpeng,

Quoted 37 lines · majianpeng

At present, I found some kernel message like:
LUB raid5-md127: kmem_cache_destroy called for cache that still has objects.
Pid: 6143, comm: mdadm Tainted: G           O 3.4.0-rc6+        #75

Call Trace:
[<ffffffff811227f8>] kmem_cache_destroy+0x328/0x400
[<ffffffffa005ff1d>] free_conf+0x2d/0xf0 [raid456]
[<ffffffffa0060791>] stop+0x41/0x60 [raid456]
[<ffffffffa000276a>] md_stop+0x1a/0x60 [md_mod]
[<ffffffffa000c974>] do_md_stop+0x74/0x470 [md_mod]
[<ffffffffa000d0ff>] md_ioctl+0xff/0x11f0 [md_mod]
[<ffffffff8127c958>] blkdev_ioctl+0xd8/0x7a0
[<ffffffff8115ef6b>] block_ioctl+0x3b/0x40
[<ffffffff8113b9c6>] do_vfs_ioctl+0x96/0x560
[<ffffffff8113bf21>] sys_ioctl+0x91/0xa0
[<ffffffff816e9d22>] system_call_fastpath+0x16/0x1b

Then using kmemleak can found those messages:
unreferenced object 0xffff8800b6db7380 (size 112):
 comm "mdadm", pid 5783, jiffies 4294810749 (age 90.589s) hex dump (first 32 bytes):
   01 01 db b6 ad 4e ad de ff ff ff ff ff ff ff ff  .....N.......... ff ff ff ff ff ff ff ff 98 40 4a 82 ff ff ff ff  .........@J..... backtrace:

   [<ffffffff816b52c1>] kmemleak_alloc+0x21/0x50
   [<ffffffff8111a11b>] kmem_cache_alloc+0xeb/0x1b0
   [<ffffffff8111c431>] kmem_cache_open+0x2f1/0x430
   [<ffffffff8111c6c8>] kmem_cache_create+0x158/0x320
   [<ffffffffa008f979>] setup_conf+0x649/0x770 [raid456]
   [<ffffffffa009044b>] run+0x68b/0x840 [raid456]
   [<ffffffffa000bde9>] md_run+0x529/0x940 [md_mod]
   [<ffffffffa000c218>] do_md_run+0x18/0xc0 [md_mod]
   [<ffffffffa000dba8>] md_ioctl+0xba8/0x11f0 [md_mod]
   [<ffffffff81272b28>] blkdev_ioctl+0xd8/0x7a0
   [<ffffffff81155bfb>] block_ioctl+0x3b/0x40
   [<ffffffff811326d6>] do_vfs_ioctl+0x96/0x560
   [<ffffffff81132c31>] sys_ioctl+0x91/0xa0
   [<ffffffff816dd3a2>] system_call_fastpath+0x16/0x1b
Quoted 6 lines

   [<ffffffffffffffff>] 0xffffffffffffffff

Because kmemleak don't detect page leak, so the pages of slabs did not print.

Commit a8364d5555b2030d093cde0f0795 modify the code of flush_all.

Many thanks for your report.

If I understand correctly, you are seeing the above error messages in 3.4-rcX but not in 3.3, right?

Quoted 19 lines

---
 mm/slub.c |    2 +-

 1 files changed, 1 insertions(+), 1 deletions(-)
mm/slub.c +1 -2
index ffe13fd..6fce08f 100644
@@ -2040,7 +2040,7 @@ static bool has_cpu_slab(int cpu, void *info)
        struct kmem_cache *s = info;
        struct kmem_cache_cpu *c = per_cpu_ptr(s->cpu_slab, cpu);
 
-       return !!(c->page);
+       return !!c;
  }
 
  static void flush_all(struct kmem_cache *s)
--
Quoted 1 line

1.7.5.4

I also understand that the above patch makes the errors disappear, correct?

If so, then very good catch, but I believe the patch can be refined. This is because
!!c here will always be true and in effect, you are returning the situation to that
of the state of Linux 3.3, where an IPI was sent to flush to all CPUs, whether they
have something to flush or not.

Having said that, your patch shows that we are too aggressive in not sending the IPI,
sometime failing to send it when we should. I think the following patch fixes the issue.
I boot tested on 8 way x86 VM and forcing a flush using /sys/kernel/slab/XXX/validate
and nothing exploded. Can you please test it and validate that it indeed solves the issue?

From: Gilad Ben-Yossef <[email protected]>
Subject: slub: missing test for partial pages flush work in flush_all

Commit a8364d5555b2030d093cde0f0795 modified flush_all to only send IPI to flush per-cpu cache pages to CPUs that seems to have done.

However, the test for flush work to be done on CPU was too relaxed, causing an IPI not to be sent for CPUs with partial pages with the result of log showing errors such as the following:

LUB raid5-md127: kmem_cache_destroy called for cache that still has objects.
Pid: 6143, comm: mdadm Tainted: G O 3.4.0-rc6+ #75

Call Trace:
[<ffffffff811227f8>] kmem_cache_destroy+0x328/0x400
[<ffffffffa005ff1d>] free_conf+0x2d/0xf0 [raid456]
[<ffffffffa0060791>] stop+0x41/0x60 [raid456]
[<ffffffffa000276a>] md_stop+0x1a/0x60 [md_mod]
[<ffffffffa000c974>] do_md_stop+0x74/0x470 [md_mod]
[<ffffffffa000d0ff>] md_ioctl+0xff/0x11f0 [md_mod]
[<ffffffff8127c958>] blkdev_ioctl+0xd8/0x7a0
[<ffffffff8115ef6b>] block_ioctl+0x3b/0x40
[<ffffffff8113b9c6>] do_vfs_ioctl+0x96/0x560
[<ffffffff8113bf21>] sys_ioctl+0x91/0xa0
[<ffffffff816e9d22>] system_call_fastpath+0x16/0x1b

Fix this by testing for partial pages presence as well.

CC "Andrew Morton" <[email protected]>
CC "Christoph Lameter" <[email protected]>
CC "Pekka Enberg" <[email protected]>

---

mm/slub.c +1 -1
index ffe13fd..d66afc4 100644
@@ -2040,7 +2040,7 @@ static bool has_cpu_slab(int cpu, void *info)
 	struct kmem_cache *s = info;
 	struct kmem_cache_cpu *c = per_cpu_ptr(s->cpu_slab, cpu);
 
-	return !!(c->page);
+	return !!(c->page && c->partial);
 }
 
 static void flush_all(struct kmem_cache *s)

Many thanks!
Gilad

Signature · 17 lines
Gilad Ben-Yossef
Chief Coffee Drinker
[email protected]
Israel Cell: +972-52-8260388
US Cell: +1-973-8260388
http://benyossef.com

"If you take a class in large-scale robotics, can you end up in a
situation where the homework eats your dog?"
 -- Jean-Baptiste Queru

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
#2 lore raw

mm/slub.c static bool has_cpu_slab(int cpu, void *info) · line 2043

Quoted 10 lines · Gilad Ben-Yossef
mm/slub.c +1 -1
index ffe13fd..d66afc4 100644
@@ -2040,7 +2040,7 @@ static bool has_cpu_slab(int cpu, void *info)
 	struct kmem_cache *s = info;
 	struct kmem_cache_cpu *c = per_cpu_ptr(s->cpu_slab, cpu);
 
-	return !!(c->page);
+	return !!(c->page && c->partial);

&&? Should this not be || ? W#e can also drop the !! now I think.

	return c->page || c->partial

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#3 lore raw
Quoted 10 lines · Christoph Lameter
Quoted 8 lines · Gilad Ben-Yossef
mm/slub.c +0 -0
index ffe13fd..d66afc4 100644
@@ -2040,7 +2040,7 @@ static bool has_cpu_slab(int cpu, void *info)
       struct kmem_cache *s = info;
       struct kmem_cache_cpu *c = per_cpu_ptr(s->cpu_slab, cpu);
 
Quoted 8 lines

mm/slub.c static bool has_cpu_slab(int cpu, void *info) · line 2043

Quoted 2 lines
mm/slub.c +1 -1
-     return !!(c->page);
+     return !!(c->page && c->partial);

&&? Should this not be || ? W#e can also drop the !! now I think.

       return c->page || c->partial

Yes, it should. My mind is mush in the mornings...

I'm waiting for Majianpeng to confirm this indeed works.

Thanks,
Gilad

Signature · 17 lines
Gilad Ben-Yossef
Chief Coffee Drinker
[email protected]
Israel Cell: +972-52-8260388
US Cell: +1-973-8260388
http://benyossef.com

"If you take a class in large-scale robotics, can you end up in a
situation where the homework eats your dog?"
 -- Jean-Baptiste Queru

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
author
#4 lore raw

Re: Re: [PATCH] slub: Using judgement !!c to judge per cpu has obj infucntion has_cpu_slab().

In reply to Christoph Lameter

Subject: [PATCH] slub: missing test for partial pages flush work in flush_all

At present, I found some kernel message like:
SLUB raid5-md127: kmem_cache_destroy called for cache that still has objects.
Pid: 6143, comm: mdadm Tainted: G O 3.4.0-rc6+ #75

Call Trace:
[<ffffffff811227f8>] kmem_cache_destroy+0x328/0x400
[<ffffffffa005ff1d>] free_conf+0x2d/0xf0 [raid456]
[<ffffffffa0060791>] stop+0x41/0x60 [raid456]
[<ffffffffa000276a>] md_stop+0x1a/0x60 [md_mod]
[<ffffffffa000c974>] do_md_stop+0x74/0x470 [md_mod]
[<ffffffffa000d0ff>] md_ioctl+0xff/0x11f0 [md_mod]
[<ffffffff8127c958>] blkdev_ioctl+0xd8/0x7a0
[<ffffffff8115ef6b>] block_ioctl+0x3b/0x40
[<ffffffff8113b9c6>] do_vfs_ioctl+0x96/0x560
[<ffffffff8113bf21>] sys_ioctl+0x91/0xa0
[<ffffffff816e9d22>] system_call_fastpath+0x16/0x1b

Then using kmemleak can found those messages:
unreferenced object 0xffff8800b6db7380 (size 112):
comm "mdadm", pid 5783, jiffies 4294810749 (age 90.589s) hex dump (first 32 bytes):

    01 01 db b6 ad 4e ad de ff ff ff ff ff ff ff ff  .....N..........
    ff ff ff ff ff ff ff ff 98 40 4a 82 ff ff ff ff  .........@J.....
  backtrace:
    [<ffffffff816b52c1>] kmemleak_alloc+0x21/0x50
    [<ffffffff8111a11b>] kmem_cache_alloc+0xeb/0x1b0
    [<ffffffff8111c431>] kmem_cache_open+0x2f1/0x430
    [<ffffffff8111c6c8>] kmem_cache_create+0x158/0x320
    [<ffffffffa008f979>] setup_conf+0x649/0x770 [raid456]
    [<ffffffffa009044b>] run+0x68b/0x840 [raid456]
    [<ffffffffa000bde9>] md_run+0x529/0x940 [md_mod]
    [<ffffffffa000c218>] do_md_run+0x18/0xc0 [md_mod]
    [<ffffffffa000dba8>] md_ioctl+0xba8/0x11f0 [md_mod]
    [<ffffffff81272b28>] blkdev_ioctl+0xd8/0x7a0
    [<ffffffff81155bfb>] block_ioctl+0x3b/0x40
    [<ffffffff811326d6>] do_vfs_ioctl+0x96/0x560
    [<ffffffff81132c31>] sys_ioctl+0x91/0xa0
    [<ffffffff816dd3a2>] system_call_fastpath+0x16/0x1b
    [<ffffffffffffffff>] 0xffffffffffffffff

Because kmemleak don't detect page leak, so the pages of slabs did not print.

Commit a8364d5555b2030d093cde0f0795 modified flush_all to only send IPI to flush per-cpu cache pages to CPUs that seems to have done.

---
 mm/slub.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
mm/slub.c +1 -1
index ffe13fd..6fce08f 100644
@@ -2040,7 +2040,7 @@ static bool has_cpu_slab(int cpu, void *info)
 	struct kmem_cache *s = info;
 	struct kmem_cache_cpu *c = per_cpu_ptr(s->cpu_slab, cpu);
 
-	return !!(c->page);
+	return c->page || c->partial;
 }
 
 static void flush_all(struct kmem_cache *s)
Signature · 15 lines
1.7.5.4



Thanks all. 
majianpeng
2012-05-09


--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
#5 lore raw

Re: Re: [PATCH] slub: Using judgement !!c to judge per cpu has obj infucntion has_cpu_slab().

Quoted 2 lines · majianpeng

Commit a8364d5555b2030d093cde0f0795 modified flush_all to only send IPI to flush per-cpu cache pages to CPUs that seems to have done.

Add some information as to why this happened to the changelog please. The commit did not include checks for per cpu partial pages being present on a cpu.

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#6 lore raw

Re: Re: [PATCH] slub: Using judgement !!c to judge per cpu has obj infucntion has_cpu_slab().

Quoted 8 lines · Christoph Lameter
Quoted 2 lines · majianpeng

Commit a8364d5555b2030d093cde0f0795 modified flush_all to only send IPI to flush per-cpu cache pages to CPUs that seems to have done.

Add some information as to why this happened to the changelog please. The commit did not include checks for per cpu partial pages being present on a cpu.

Feel free to use this for a commit message, majianeng:

Commit a8364d5555b2030d093cde0f0795 modified flush_all to only send IPI to flush per-cpu cache pages to CPUs that seems to have done.

However, the test for flush work to be done on CPU was too relaxed, causing an IPI not to be sent for CPUs with partial pages with the result of log showing errors such as the following:

LUB raid5-md127: kmem_cache_destroy called for cache that still has objects.
Pid: 6143, comm: mdadm Tainted: G O 3.4.0-rc6+ #75

Call Trace:
[<ffffffff811227f8>] kmem_cache_destroy+0x328/0x400
[<ffffffffa005ff1d>] free_conf+0x2d/0xf0 [raid456]
[<ffffffffa0060791>] stop+0x41/0x60 [raid456]
[<ffffffffa000276a>] md_stop+0x1a/0x60 [md_mod]
[<ffffffffa000c974>] do_md_stop+0x74/0x470 [md_mod]
[<ffffffffa000d0ff>] md_ioctl+0xff/0x11f0 [md_mod]
[<ffffffff8127c958>] blkdev_ioctl+0xd8/0x7a0
[<ffffffff8115ef6b>] block_ioctl+0x3b/0x40
[<ffffffff8113b9c6>] do_vfs_ioctl+0x96/0x560
[<ffffffff8113bf21>] sys_ioctl+0x91/0xa0
[<ffffffff816e9d22>] system_call_fastpath+0x16/0x1b

Fix this by testing for partial pages presence as well.

Gilad

Signature · 17 lines
Gilad Ben-Yossef
Chief Coffee Drinker
[email protected]
Israel Cell: +972-52-8260388
US Cell: +1-973-8260388
http://benyossef.com

"If you take a class in large-scale robotics, can you end up in a
situation where the homework eats your dog?"
 -- Jean-Baptiste Queru

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
author
#7 lore raw

Re: Re: [PATCH] slub: Using judgement !!c to judge per cpu has obj infucntion has_cpu_slab().

In reply to majianpeng

SSB0ZXN0ZWQgeW91ciBwYXRjaCxidXQgdGhlIGJ1ZyBpcyBzdGlsbC4NCg0KSSB0aGluayB0aGUg Y29kZSBtYXkgYmUgaXM6DQoNCmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMNCmlu ZGV4IGZmZTEzZmQuLmQ2NmFmYzQgMTAwNjQ0DQotLS0gYS9tbS9zbHViLmMNCisrKyBiL21tL3Ns dWIuYw0KQEAgLTIwNDAsNyArMjA0MCw3IEBAIHN0YXRpYyBib29sIGhhc19jcHVfc2xhYihpbnQg Y3B1LCB2b2lkICppbmZvKQ0KIAlzdHJ1Y3Qga21lbV9jYWNoZSAqcyA9IGluZm87DQogCXN0cnVj dCBrbWVtX2NhY2hlX2NwdSAqYyA9IHBlcl9jcHVfcHRyKHMtPmNwdV9zbGFiLCBjcHUpOw0KDQot CXJldHVybiAhIShjLT5wYWdlKTsNCisJcmV0dXJuICEhKGMtPnBhZ2UgfHwgYy0+cGFydGlhbCk7 DQogfQ0KDQogc3RhdGljIHZvaWQgZmx1c2hfYWxsKHN0cnVjdCBrbWVtX2NhY2hlICpzKQ0KDQoN CkJlY2F1c2UgdGhlIGZ1bmN0aW9uOg0KIF9fZmx1c2hfY3B1X3NsYWIoc3RydWN0IGttZW1fY2Fj aGUgKnMsIGludCBjcHUpDQp7DQoJc3RydWN0IGttZW1fY2FjaGVfY3B1ICpjID0gcGVyX2NwdV9w dHIocy0+Y3B1X3NsYWIsIGNwdSk7DQoNCglpZiAobGlrZWx5KGMpKSB7DQoJCWlmIChjLT5wYWdl KQ0KCQkJZmx1c2hfc2xhYihzLCBjKTsNCg0KCQl1bmZyZWV6ZV9wYXJ0aWFscyhzKTsNCgl9DQp9 DQpJdCBmbHVzaF9zbGFiIGFuZCB1bmZyZWV6ZV9wYXJ0aWFsLHNvIGlmIGMtPnBhZ2Ugb3IgYy0+ cGFyaXRhbCBpcyBvaywgc2hvdWxkIGRvIF9fZmx1c2hfY3B1X3NsYWIuDQoNCg0KLS0tLS0tLS0t LS0tLS0tLS0tCQkJCSANCm1hamlhbnBlbmcNCjIwMTItMDUtMDgNCg0KLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K5Y+R5Lu25Lq6 77yaR2lsYWQgQmVuLVlvc3NlZg0K5Y+R6YCB5pel5pyf77yaMjAxMi0wNS0wOCAxNToyOTozMQ0K 5pS25Lu25Lq677yabWFqaWFucGVuZw0K5oqE6YCB77yabGludXgtbW07IEFuZHJldyBNb3J0b247 IFBla2thIEVuYmVyZzsgQ2hyaXN0b3BoIExhbWV0ZXINCuS4u+mimO+8mlJlOiBbUEFUQ0hdIHNs dWI6IFVzaW5nIGp1ZGdlbWVudCAhIWMgdG8ganVkZ2UgcGVyIGNwdSBoYXMgb2JqIGluZnVjbnRp b24gaGFzX2NwdV9zbGFiKCkuDQoNCkhpIE1hamlhbnBlbmcsDQoNCk9uIFR1ZSwgTWF5IDgsIDIw MTIgYXQgNDozMSBBTSwgbWFqaWFucGVuZyA8bWFqaWFucGVuZ0BnbWFpbC5jb20+IHdyb3RlOg0K PiBBdCBwcmVzZW50LCBJIGZvdW5kIHNvbWUga2VybmVsIG1lc3NhZ2UgbGlrZToNCj4gTFVCIHJh aWQ1LW1kMTI3OiBrbWVtX2NhY2hlX2Rlc3Ryb3kgY2FsbGVkIGZvciBjYWNoZSB0aGF0IHN0aWxs IGhhcyBvYmplY3RzLg0KPiBQaWQ6IDYxNDMsIGNvbW06IG1kYWRtIFRhaW50ZWQ6IEcgwqAgwqAg wqAgwqAgwqAgTyAzLjQuMC1yYzYrIMKgIMKgIMKgIMKgIzc1DQo+IENhbGwgVHJhY2U6DQo+IFs8 ZmZmZmZmZmY4MTEyMjdmOD5dIGttZW1fY2FjaGVfZGVzdHJveSsweDMyOC8weDQwMA0KPiBbPGZm ZmZmZmZmYTAwNWZmMWQ+XSBmcmVlX2NvbmYrMHgyZC8weGYwIFtyYWlkNDU2XQ0KPiBbPGZmZmZm ZmZmYTAwNjA3OTE+XSBzdG9wKzB4NDEvMHg2MCBbcmFpZDQ1Nl0NCj4gWzxmZmZmZmZmZmEwMDAy NzZhPl0gbWRfc3RvcCsweDFhLzB4NjAgW21kX21vZF0NCj4gWzxmZmZmZmZmZmEwMDBjOTc0Pl0g ZG9fbWRfc3RvcCsweDc0LzB4NDcwIFttZF9tb2RdDQo+IFs8ZmZmZmZmZmZhMDAwZDBmZj5dIG1k X2lvY3RsKzB4ZmYvMHgxMWYwIFttZF9tb2RdDQo+IFs8ZmZmZmZmZmY4MTI3Yzk1OD5dIGJsa2Rl dl9pb2N0bCsweGQ4LzB4N2EwDQo+IFs8ZmZmZmZmZmY4MTE1ZWY2Yj5dIGJsb2NrX2lvY3RsKzB4 M2IvMHg0MA0KPiBbPGZmZmZmZmZmODExM2I5YzY+XSBkb192ZnNfaW9jdGwrMHg5Ni8weDU2MA0K PiBbPGZmZmZmZmZmODExM2JmMjE+XSBzeXNfaW9jdGwrMHg5MS8weGEwDQo+IFs8ZmZmZmZmZmY4 MTZlOWQyMj5dIHN5c3RlbV9jYWxsX2Zhc3RwYXRoKzB4MTYvMHgxYg0KPg0KPiBUaGVuIHVzaW5n IGttZW1sZWFrIGNhbiBmb3VuZCB0aG9zZSBtZXNzYWdlczoNCj4gdW5yZWZlcmVuY2VkIG9iamVj dCAweGZmZmY4ODAwYjZkYjczODAgKHNpemUgMTEyKToNCj4gwqBjb21tICJtZGFkbSIsIHBpZCA1 NzgzLCBqaWZmaWVzIDQyOTQ4MTA3NDkgKGFnZSA5MC41ODlzKQ0KPiDCoGhleCBkdW1wIChmaXJz dCAzMiBieXRlcyk6DQo+IMKgIMKgMDEgMDEgZGIgYjYgYWQgNGUgYWQgZGUgZmYgZmYgZmYgZmYg ZmYgZmYgZmYgZmYgwqAuLi4uLk4uLi4uLi4uLi4uDQo+IMKgIMKgZmYgZmYgZmYgZmYgZmYgZmYg ZmYgZmYgOTggNDAgNGEgODIgZmYgZmYgZmYgZmYgwqAuLi4uLi4uLi5ASi4uLi4uDQo+IMKgYmFj a3RyYWNlOg0KPiDCoCDCoFs8ZmZmZmZmZmY4MTZiNTJjMT5dIGttZW1sZWFrX2FsbG9jKzB4MjEv MHg1MA0KPiDCoCDCoFs8ZmZmZmZmZmY4MTExYTExYj5dIGttZW1fY2FjaGVfYWxsb2MrMHhlYi8w eDFiMA0KPiDCoCDCoFs8ZmZmZmZmZmY4MTExYzQzMT5dIGttZW1fY2FjaGVfb3BlbisweDJmMS8w eDQzMA0KPiDCoCDCoFs8ZmZmZmZmZmY4MTExYzZjOD5dIGttZW1fY2FjaGVfY3JlYXRlKzB4MTU4 LzB4MzIwDQo+IMKgIMKgWzxmZmZmZmZmZmEwMDhmOTc5Pl0gc2V0dXBfY29uZisweDY0OS8weDc3 MCBbcmFpZDQ1Nl0NCj4gwqAgwqBbPGZmZmZmZmZmYTAwOTA0NGI+XSBydW4rMHg2OGIvMHg4NDAg W3JhaWQ0NTZdDQo+IMKgIMKgWzxmZmZmZmZmZmEwMDBiZGU5Pl0gbWRfcnVuKzB4NTI5LzB4OTQw IFttZF9tb2RdDQo+IMKgIMKgWzxmZmZmZmZmZmEwMDBjMjE4Pl0gZG9fbWRfcnVuKzB4MTgvMHhj MCBbbWRfbW9kXQ0KPiDCoCDCoFs8ZmZmZmZmZmZhMDAwZGJhOD5dIG1kX2lvY3RsKzB4YmE4LzB4 MTFmMCBbbWRfbW9kXQ0KPiDCoCDCoFs8ZmZmZmZmZmY4MTI3MmIyOD5dIGJsa2Rldl9pb2N0bCsw eGQ4LzB4N2EwDQo+IMKgIMKgWzxmZmZmZmZmZjgxMTU1YmZiPl0gYmxvY2tfaW9jdGwrMHgzYi8w eDQwDQo+IMKgIMKgWzxmZmZmZmZmZjgxMTMyNmQ2Pl0gZG9fdmZzX2lvY3RsKzB4OTYvMHg1NjAN Cj4gwqAgwqBbPGZmZmZmZmZmODExMzJjMzE+XSBzeXNfaW9jdGwrMHg5MS8weGEwDQo+IMKgIMKg WzxmZmZmZmZmZjgxNmRkM2EyPl0gc3lzdGVtX2NhbGxfZmFzdHBhdGgrMHgxNi8weDFiDQo+IMKg IMKgWzxmZmZmZmZmZmZmZmZmZmZmPl0gMHhmZmZmZmZmZmZmZmZmZmZmDQo+DQo+IEJlY2F1c2Ug a21lbWxlYWsgZG9uJ3QgZGV0ZWN0IHBhZ2UgbGVhaywgc28gdGhlIHBhZ2VzIG9mIHNsYWJzIGRp ZCBub3QgcHJpbnQuDQo+DQo+IENvbW1pdCBhODM2NGQ1NTU1YjIwMzBkMDkzY2RlMGYwNzk1IG1v ZGlmeSB0aGUgY29kZSBvZiBmbHVzaF9hbGwuDQo+DQoNCk1hbnkgdGhhbmtzIGZvciB5b3VyIHJl cG9ydC4NCg0KSWYgSSB1bmRlcnN0YW5kIGNvcnJlY3RseSwgeW91IGFyZSBzZWVpbmcgdGhlIGFi b3ZlIGVycm9yIG1lc3NhZ2VzIGluDQozLjQtcmNYIGJ1dCBub3QgaW4gMy4zLCByaWdodD8NCg0K PiBTaWduZWQtb2ZmLWJ5OiBtYWppYW5wZW5nIDxtYWppYW5wZW5nQGdtYWlsLmNvbT4NCj4gLS0t DQo+IMKgbW0vc2x1Yi5jIHwgwqAgwqAyICstDQo+IMKgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2Vy dGlvbnMoKyksIDEgZGVsZXRpb25zKC0pDQo+DQo+IGRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9t bS9zbHViLmMNCj4gaW5kZXggZmZlMTNmZC4uNmZjZTA4ZiAxMDA2NDQNCj4gLS0tIGEvbW0vc2x1 Yi5jDQo+ICsrKyBiL21tL3NsdWIuYw0KPiBAQCAtMjA0MCw3ICsyMDQwLDcgQEAgc3RhdGljIGJv b2wgaGFzX2NwdV9zbGFiKGludCBjcHUsIHZvaWQgKmluZm8pDQo+IMKgIMKgIMKgIMKgc3RydWN0 IGttZW1fY2FjaGUgKnMgPSBpbmZvOw0KPiDCoCDCoCDCoCDCoHN0cnVjdCBrbWVtX2NhY2hlX2Nw dSAqYyA9IHBlcl9jcHVfcHRyKHMtPmNwdV9zbGFiLCBjcHUpOw0KPg0KPiAtIMKgIMKgIMKgIHJl dHVybiAhIShjLT5wYWdlKTsNCj4gKyDCoCDCoCDCoCByZXR1cm4gISFjOw0KPiDCoH0NCj4NCj4g wqBzdGF0aWMgdm9pZCBmbHVzaF9hbGwoc3RydWN0IGttZW1fY2FjaGUgKnMpDQo+IC0tDQo+IDEu Ny41LjQNCg0KSSBhbHNvIHVuZGVyc3RhbmQgdGhhdCB0aGUgYWJvdmUgcGF0Y2ggbWFrZXMgdGhl IGVycm9ycyBkaXNhcHBlYXIsIGNvcnJlY3Q/DQoNCklmIHNvLCB0aGVuIHZlcnkgZ29vZCBjYXRj aCwgYnV0IEkgYmVsaWV2ZSB0aGUgcGF0Y2ggY2FuIGJlIHJlZmluZWQuDQpUaGlzIGlzIGJlY2F1 c2UNCiEhYyBoZXJlIHdpbGwgYWx3YXlzIGJlIHRydWUgYW5kIGluIGVmZmVjdCwgeW91IGFyZSBy ZXR1cm5pbmcgdGhlDQpzaXR1YXRpb24gdG8gdGhhdA0Kb2YgdGhlIHN0YXRlIG9mIExpbnV4IDMu Mywgd2hlcmUgYW4gSVBJIHdhcyBzZW50IHRvIGZsdXNoIHRvIGFsbCBDUFVzLA0Kd2hldGhlciB0 aGV5DQpoYXZlIHNvbWV0aGluZyB0byBmbHVzaCBvciBub3QuDQoNCkhhdmluZyBzYWlkIHRoYXQs IHlvdXIgcGF0Y2ggc2hvd3MgdGhhdCB3ZSBhcmUgdG9vIGFnZ3Jlc3NpdmUgaW4gbm90DQpzZW5k aW5nIHRoZSBJUEksDQpzb21ldGltZSBmYWlsaW5nIHRvIHNlbmQgaXQgd2hlbiB3ZSBzaG91bGQu IEkgdGhpbmsgdGhlIGZvbGxvd2luZw0KcGF0Y2ggZml4ZXMgdGhlIGlzc3VlLg0KSSBib290IHRl c3RlZCBvbiA4IHdheSB4ODYgVk0gYW5kIGZvcmNpbmcgYSBmbHVzaCB1c2luZw0KL3N5cy9rZXJu ZWwvc2xhYi9YWFgvdmFsaWRhdGUNCmFuZCBub3RoaW5nIGV4cGxvZGVkLiBDYW4geW91IHBsZWFz ZSB0ZXN0IGl0IGFuZCB2YWxpZGF0ZSB0aGF0IGl0DQppbmRlZWQgc29sdmVzIHRoZSBpc3N1ZT8N Cg0KRnJvbTogR2lsYWQgQmVuLVlvc3NlZiA8Z2lsYWRAYmVueW9zc2VmLmNvbT4NClN1YmplY3Q6 IHNsdWI6IG1pc3NpbmcgdGVzdCBmb3IgcGFydGlhbCBwYWdlcyBmbHVzaCB3b3JrIGluIGZsdXNo X2FsbA0KDQpDb21taXQgYTgzNjRkNTU1NWIyMDMwZDA5M2NkZTBmMDc5NSBtb2RpZmllZCBmbHVz aF9hbGwgdG8gb25seQ0Kc2VuZCBJUEkgdG8gZmx1c2ggcGVyLWNwdSBjYWNoZSBwYWdlcyB0byBD UFVzIHRoYXQgc2VlbXMgdG8gaGF2ZSBkb25lLg0KDQpIb3dldmVyLCB0aGUgdGVzdCBmb3IgZmx1 c2ggd29yayB0byBiZSBkb25lIG9uIENQVSB3YXMgdG9vIHJlbGF4ZWQsIGNhdXNpbmcNCmFuIElQ SSBub3QgdG8gYmUgc2VudCBmb3IgQ1BVcyB3aXRoIHBhcnRpYWwgcGFnZXMgd2l0aCB0aGUgcmVz dWx0IG9mIGxvZyBzaG93aW5nDQplcnJvcnMgc3VjaCBhcyB0aGUgZm9sbG93aW5nOg0KDQpMVUIg cmFpZDUtbWQxMjc6IGttZW1fY2FjaGVfZGVzdHJveSBjYWxsZWQgZm9yIGNhY2hlIHRoYXQgc3Rp bGwgaGFzIG9iamVjdHMuDQpQaWQ6IDYxNDMsIGNvbW06IG1kYWRtIFRhaW50ZWQ6IEcgICAgICAg ICAgIE8gMy40LjAtcmM2KyAgICAgICAgIzc1DQpDYWxsIFRyYWNlOg0KWzxmZmZmZmZmZjgxMTIy N2Y4Pl0ga21lbV9jYWNoZV9kZXN0cm95KzB4MzI4LzB4NDAwDQpbPGZmZmZmZmZmYTAwNWZmMWQ+ XSBmcmVlX2NvbmYrMHgyZC8weGYwIFtyYWlkNDU2XQ0KWzxmZmZmZmZmZmEwMDYwNzkxPl0gc3Rv cCsweDQxLzB4NjAgW3JhaWQ0NTZdDQpbPGZmZmZmZmZmYTAwMDI3NmE+XSBtZF9zdG9wKzB4MWEv MHg2MCBbbWRfbW9kXQ0KWzxmZmZmZmZmZmEwMDBjOTc0Pl0gZG9fbWRfc3RvcCsweDc0LzB4NDcw IFttZF9tb2RdDQpbPGZmZmZmZmZmYTAwMGQwZmY+XSBtZF9pb2N0bCsweGZmLzB4MTFmMCBbbWRf bW9kXQ0KWzxmZmZmZmZmZjgxMjdjOTU4Pl0gYmxrZGV2X2lvY3RsKzB4ZDgvMHg3YTANCls8ZmZm ZmZmZmY4MTE1ZWY2Yj5dIGJsb2NrX2lvY3RsKzB4M2IvMHg0MA0KWzxmZmZmZmZmZjgxMTNiOWM2 Pl0gZG9fdmZzX2lvY3RsKzB4OTYvMHg1NjANCls8ZmZmZmZmZmY4MTEzYmYyMT5dIHN5c19pb2N0 bCsweDkxLzB4YTANCls8ZmZmZmZmZmY4MTZlOWQyMj5dIHN5c3RlbV9jYWxsX2Zhc3RwYXRoKzB4 MTYvMHgxYg0KDQpGaXggdGhpcyBieSB0ZXN0aW5nIGZvciBwYXJ0aWFsIHBhZ2VzIHByZXNlbmNl IGFzIHdlbGwuDQoNClNpZ25lZC1vZmYtYnk6IEdpbGFkIEJlbi1Zb3NzZWYgPGdpbGFkQGJlbnlv c3NlZi5jb20+DQpSZXBvcnRlZC1ieTogbWFqaWFucGVuZyA8bWFqaWFucGVuZ0BnbWFpbC5jb20+ DQpDQzogIkFuZHJldyBNb3J0b24iIDxha3BtQGxpbnV4LWZvdW5kYXRpb24ub3JnPg0KQ0M6ICJD aHJpc3RvcGggTGFtZXRlciIgPGNsQGxpbnV4LmNvbT4NCkNDOiAiUGVra2EgRW5iZXJnIiA8cGVu YmVyZ0BrZXJuZWwub3JnPg0KLS0tDQpkaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5j DQppbmRleCBmZmUxM2ZkLi5kNjZhZmM0IDEwMDY0NA0KLS0tIGEvbW0vc2x1Yi5jDQorKysgYi9t bS9zbHViLmMNCkBAIC0yMDQwLDcgKzIwNDAsNyBAQCBzdGF0aWMgYm9vbCBoYXNfY3B1X3NsYWIo aW50IGNwdSwgdm9pZCAqaW5mbykNCiAJc3RydWN0IGttZW1fY2FjaGUgKnMgPSBpbmZvOw0KIAlz dHJ1Y3Qga21lbV9jYWNoZV9jcHUgKmMgPSBwZXJfY3B1X3B0cihzLT5jcHVfc2xhYiwgY3B1KTsN Cg0KLQlyZXR1cm4gISEoYy0+cGFnZSk7DQorCXJldHVybiAhIShjLT5wYWdlICYmIGMtPnBhcnRp YWwpOw0KIH0NCg0KIHN0YXRpYyB2b2lkIGZsdXNoX2FsbChzdHJ1Y3Qga21lbV9jYWNoZSAqcykN Cg0KDQoNCk1hbnkgdGhhbmtzIQ0KR2lsYWQNCg0KDQotLSANCkdpbGFkIEJlbi1Zb3NzZWYNCkNo aWVmIENvZmZlZSBEcmlua2VyDQpnaWxhZEBiZW55b3NzZWYuY29tDQpJc3JhZWwgQ2VsbDogKzk3 Mi01Mi04MjYwMzg4DQpVUyBDZWxsOiArMS05NzMtODI2MDM4OA0KaHR0cDovL2Jlbnlvc3NlZi5j b20NCg0KIklmIHlvdSB0YWtlIGEgY2xhc3MgaW4gbGFyZ2Utc2NhbGUgcm9ib3RpY3MsIGNhbiB5 b3UgZW5kIHVwIGluIGENCnNpdHVhdGlvbiB3aGVyZSB0aGUgaG9tZXdvcmsgZWF0cyB5b3VyIGRv Zz8iDQrCoC0tIEplYW4tQmFwdGlzdGUgUXVlcnUNCi4NCg==

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#8 lore raw

Re: Re: [PATCH] slub: Using judgement !!c to judge per cpu has obj infucntion has_cpu_slab().

Quoted 9 lines · majianpeng

I tested your patch,but the bug is still.

I think the code may be is:

mm/slub.c +0 -0
index ffe13fd..d66afc4 100644

mm/slub.c static bool has_cpu_slab(int cpu, void *info) · line 2044

Quoted 6 lines
mm/slub.c +1 -1
@@ -2040,7 +2040,7 @@ static bool has_cpu_slab(int cpu, void *info)
        struct kmem_cache *s = info;
        struct kmem_cache_cpu *c = per_cpu_ptr(s->cpu_slab, cpu);
 
-       return !!(c->page);
+       return !!(c->page || c->partial);
  }

You are very right. I shouldn't be sending patches before the first morning coffee...

I take it this last version of the patch fixes the issue? if so it should should go as a fix into 3.4-rc7

Thanks,
Gilad

Signature · 17 lines
Gilad Ben-Yossef
Chief Coffee Drinker
[email protected]
Israel Cell: +972-52-8260388
US Cell: +1-973-8260388
http://benyossef.com

"If you take a class in large-scale robotics, can you end up in a
situation where the homework eats your dog?"
 -- Jean-Baptiste Queru

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
#9 lore raw
In reply to majianpeng

mm/slub.c static bool has_cpu_slab(int cpu, void *info) · line 2044

Quoted 11 lines · majianpeng
mm/slub.c +1 -1
index ffe13fd..6fce08f 100644
@@ -2040,7 +2040,7 @@ static bool has_cpu_slab(int cpu, void *info)
 	struct kmem_cache *s = info;
 	struct kmem_cache_cpu *c = per_cpu_ptr(s->cpu_slab, cpu);
 
-	return !!(c->page);
+	return !!c;
 }

Dont do that. This will always return true since c will never be NULL. The check is pointless then and you have essentially reverted the patch to slub that avoids the IPI. Reverting
commit a8364d5555b2030d093cde0f07951628e55454e1 should have the same effect.

This issue suggests some sort of race condition that results in not releasing the per cpu slab or the population of the per cpu slab after the check was done.

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>