public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] slab: Fix off by one in object max number tests.
@ 2014-05-05 20:20 David Miller
  2014-05-05 20:57 ` David Miller
  0 siblings, 1 reply; 9+ messages in thread
From: David Miller @ 2014-05-05 20:20 UTC (permalink / raw)
  To: linux-kernel; +Cc: iamjoonsoo.kim, sparclinux, hannes, cl, penberg, torvalds


If freelist_idx_t is a byte, SLAB_OBJ_MAX_NUM should be 255 not 256,
and likewise if freelist_idx_t is a short, then it should be 65535 not
65536.

Fixes: a41adfa ("slab: introduce byte sized index for the freelist of a slab")
Signed-off-by: David S. Miller <davem@davemloft.net>
---

This was leading to all kinds of random crashes on sparc64 where PAGE_SIZE
is 8192.  One problem shown was that if spinlock debugging was enabled,
we'd get deadlocks in copy_pte_range() or do_wp_page() with the same cpu
already holding a lock it shouldn't hold, or the lock belonging to a
completely unrelated process.

diff --git a/mm/slab.c b/mm/slab.c
index 388cb1a..37de3a7 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -166,7 +166,7 @@ typedef unsigned char freelist_idx_t;
 typedef unsigned short freelist_idx_t;
 #endif
 
-#define SLAB_OBJ_MAX_NUM (1 << sizeof(freelist_idx_t) * BITS_PER_BYTE)
+#define SLAB_OBJ_MAX_NUM ((1 << sizeof(freelist_idx_t) * BITS_PER_BYTE) - 1)
 
 /*
  * true if a page was allocated from pfmemalloc reserves for network-based

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH] slab: Fix off by one in object max number tests.
  2014-05-05 20:20 [PATCH] slab: Fix off by one in object max number tests David Miller
@ 2014-05-05 20:57 ` David Miller
  2014-05-05 21:05   ` Sam Ravnborg
  0 siblings, 1 reply; 9+ messages in thread
From: David Miller @ 2014-05-05 20:57 UTC (permalink / raw)
  To: linux-kernel; +Cc: iamjoonsoo.kim, sparclinux, hannes, cl, penberg, torvalds

From: David Miller <davem@davemloft.net>
Date: Mon, 05 May 2014 16:20:04 -0400 (EDT)

> 
> If freelist_idx_t is a byte, SLAB_OBJ_MAX_NUM should be 255 not 256,
> and likewise if freelist_idx_t is a short, then it should be 65535 not
> 65536.
> 
> Fixes: a41adfa ("slab: introduce byte sized index for the freelist of a slab")
> Signed-off-by: David S. Miller <davem@davemloft.net>
> ---
> 
> This was leading to all kinds of random crashes on sparc64 where PAGE_SIZE
> is 8192.  One problem shown was that if spinlock debugging was enabled,
> we'd get deadlocks in copy_pte_range() or do_wp_page() with the same cpu
> already holding a lock it shouldn't hold, or the lock belonging to a
> completely unrelated process.

It turns out that after some more testing, I'm still getting spinlock
debugging problems with this fix applied.

The change is still very much correct I think, however.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] slab: Fix off by one in object max number tests.
  2014-05-05 20:57 ` David Miller
@ 2014-05-05 21:05   ` Sam Ravnborg
  2014-05-05 21:08     ` David Miller
  0 siblings, 1 reply; 9+ messages in thread
From: Sam Ravnborg @ 2014-05-05 21:05 UTC (permalink / raw)
  To: David Miller
  Cc: linux-kernel, iamjoonsoo.kim, sparclinux, hannes, cl, penberg,
	torvalds

On Mon, May 05, 2014 at 04:57:56PM -0400, David Miller wrote:
> From: David Miller <davem@davemloft.net>
> Date: Mon, 05 May 2014 16:20:04 -0400 (EDT)
> 
> > 
> > If freelist_idx_t is a byte, SLAB_OBJ_MAX_NUM should be 255 not 256,
> > and likewise if freelist_idx_t is a short, then it should be 65535 not
> > 65536.
> > 
> > Fixes: a41adfa ("slab: introduce byte sized index for the freelist of a slab")
> > Signed-off-by: David S. Miller <davem@davemloft.net>
> > ---
> > 
> > This was leading to all kinds of random crashes on sparc64 where PAGE_SIZE
> > is 8192.  One problem shown was that if spinlock debugging was enabled,
> > we'd get deadlocks in copy_pte_range() or do_wp_page() with the same cpu
> > already holding a lock it shouldn't hold, or the lock belonging to a
> > completely unrelated process.
> 
> It turns out that after some more testing, I'm still getting spinlock
> debugging problems with this fix applied.
> 
> The change is still very much correct I think, however.

There is a related patch in this area which I think is not yet applied.

See: https://lkml.org/lkml/2014/4/18/28

Maybe this is realted.

	Sam

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] slab: Fix off by one in object max number tests.
  2014-05-05 21:05   ` Sam Ravnborg
@ 2014-05-05 21:08     ` David Miller
  2014-05-06  3:25       ` David Miller
  0 siblings, 1 reply; 9+ messages in thread
From: David Miller @ 2014-05-05 21:08 UTC (permalink / raw)
  To: sam; +Cc: linux-kernel, iamjoonsoo.kim, sparclinux, hannes, cl, penberg,
	torvalds

From: Sam Ravnborg <sam@ravnborg.org>
Date: Mon, 5 May 2014 23:05:07 +0200

> On Mon, May 05, 2014 at 04:57:56PM -0400, David Miller wrote:
>> From: David Miller <davem@davemloft.net>
>> Date: Mon, 05 May 2014 16:20:04 -0400 (EDT)
>> 
>> > 
>> > If freelist_idx_t is a byte, SLAB_OBJ_MAX_NUM should be 255 not 256,
>> > and likewise if freelist_idx_t is a short, then it should be 65535 not
>> > 65536.
>> > 
>> > Fixes: a41adfa ("slab: introduce byte sized index for the freelist of a slab")
>> > Signed-off-by: David S. Miller <davem@davemloft.net>
>> > ---
>> > 
>> > This was leading to all kinds of random crashes on sparc64 where PAGE_SIZE
>> > is 8192.  One problem shown was that if spinlock debugging was enabled,
>> > we'd get deadlocks in copy_pte_range() or do_wp_page() with the same cpu
>> > already holding a lock it shouldn't hold, or the lock belonging to a
>> > completely unrelated process.
>> 
>> It turns out that after some more testing, I'm still getting spinlock
>> debugging problems with this fix applied.
>> 
>> The change is still very much correct I think, however.
> 
> There is a related patch in this area which I think is not yet applied.
> 
> See: https://lkml.org/lkml/2014/4/18/28
> 
> Maybe this is realted.

Thanks, I'm testing with that patch added as well.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] slab: Fix off by one in object max number tests.
  2014-05-05 21:08     ` David Miller
@ 2014-05-06  3:25       ` David Miller
  2014-05-06  3:32         ` Linus Torvalds
  0 siblings, 1 reply; 9+ messages in thread
From: David Miller @ 2014-05-06  3:25 UTC (permalink / raw)
  To: sam; +Cc: linux-kernel, iamjoonsoo.kim, sparclinux, hannes, cl, penberg,
	torvalds

From: David Miller <davem@davemloft.net>
Date: Mon, 05 May 2014 17:08:55 -0400 (EDT)

> From: Sam Ravnborg <sam@ravnborg.org>
> Date: Mon, 5 May 2014 23:05:07 +0200
> 
>> On Mon, May 05, 2014 at 04:57:56PM -0400, David Miller wrote:
>>> From: David Miller <davem@davemloft.net>
>>> Date: Mon, 05 May 2014 16:20:04 -0400 (EDT)
>>> 
>>> > 
>>> > If freelist_idx_t is a byte, SLAB_OBJ_MAX_NUM should be 255 not 256,
>>> > and likewise if freelist_idx_t is a short, then it should be 65535 not
>>> > 65536.
>>> > 
>>> > Fixes: a41adfa ("slab: introduce byte sized index for the freelist of a slab")
>>> > Signed-off-by: David S. Miller <davem@davemloft.net>
>>> > ---
>>> > 
>>> > This was leading to all kinds of random crashes on sparc64 where PAGE_SIZE
>>> > is 8192.  One problem shown was that if spinlock debugging was enabled,
>>> > we'd get deadlocks in copy_pte_range() or do_wp_page() with the same cpu
>>> > already holding a lock it shouldn't hold, or the lock belonging to a
>>> > completely unrelated process.
>>> 
>>> It turns out that after some more testing, I'm still getting spinlock
>>> debugging problems with this fix applied.
>>> 
>>> The change is still very much correct I think, however.
>> 
>> There is a related patch in this area which I think is not yet applied.
>> 
>> See: https://lkml.org/lkml/2014/4/18/28
>> 
>> Maybe this is realted.
> 
> Thanks, I'm testing with that patch added as well.

I can confirm that this fixes my problems completely.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] slab: Fix off by one in object max number tests.
  2014-05-06  3:25       ` David Miller
@ 2014-05-06  3:32         ` Linus Torvalds
  2014-05-06  3:46           ` Linus Torvalds
  2014-05-06  4:04           ` Pekka Enberg
  0 siblings, 2 replies; 9+ messages in thread
From: Linus Torvalds @ 2014-05-06  3:32 UTC (permalink / raw)
  To: David Miller
  Cc: Sam Ravnborg, Linux Kernel Mailing List, Joonsoo Kim, sparclinux,
	Johannes Weiner, Christoph Lameter, Pekka Enberg

On Mon, May 5, 2014 at 8:25 PM, David Miller <davem@davemloft.net> wrote:
>
>> Sam Ravnborg <sam@ravnborg.org> wrote:
>>>
>>> There is a related patch in this area which I think is not yet applied.
>>>
>>> See: https://lkml.org/lkml/2014/4/18/28
>>>
>>> Maybe this is related.
>>
>> Thanks, I'm testing with that patch added as well.
>
> I can confirm that this fixes my problems completely.

Ugh. That patch has been out two weeks already. Pekka?

I guess I'll apply both patches directly.

              Linus

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] slab: Fix off by one in object max number tests.
  2014-05-06  3:32         ` Linus Torvalds
@ 2014-05-06  3:46           ` Linus Torvalds
  2014-05-06  3:48             ` David Miller
  2014-05-06  4:04           ` Pekka Enberg
  1 sibling, 1 reply; 9+ messages in thread
From: Linus Torvalds @ 2014-05-06  3:46 UTC (permalink / raw)
  To: David Miller
  Cc: Sam Ravnborg, Linux Kernel Mailing List, Joonsoo Kim, sparclinux,
	Johannes Weiner, Christoph Lameter, Pekka Enberg

On Mon, May 5, 2014 at 8:32 PM, Linus Torvalds
<torvalds@linux-foundation.org> wrote:
>
> I guess I'll apply both patches directly.

Applied and pushed out. Davem, I hope this means current -git works
for you on sparc64 again?

                Linus

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] slab: Fix off by one in object max number tests.
  2014-05-06  3:46           ` Linus Torvalds
@ 2014-05-06  3:48             ` David Miller
  0 siblings, 0 replies; 9+ messages in thread
From: David Miller @ 2014-05-06  3:48 UTC (permalink / raw)
  To: torvalds; +Cc: sam, linux-kernel, iamjoonsoo.kim, sparclinux, hannes, cl,
	penberg

From: Linus Torvalds <torvalds@linux-foundation.org>
Date: Mon, 5 May 2014 20:46:32 -0700

> On Mon, May 5, 2014 at 8:32 PM, Linus Torvalds
> <torvalds@linux-foundation.org> wrote:
>>
>> I guess I'll apply both patches directly.
> 
> Applied and pushed out. Davem, I hope this means current -git works
> for you on sparc64 again?

Yes it absoultely should, and I'll double check to make sure.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] slab: Fix off by one in object max number tests.
  2014-05-06  3:32         ` Linus Torvalds
  2014-05-06  3:46           ` Linus Torvalds
@ 2014-05-06  4:04           ` Pekka Enberg
  1 sibling, 0 replies; 9+ messages in thread
From: Pekka Enberg @ 2014-05-06  4:04 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: David Miller, Sam Ravnborg, Linux Kernel Mailing List,
	Joonsoo Kim, sparclinux, Johannes Weiner, Christoph Lameter

On Tue, May 6, 2014 at 6:32 AM, Linus Torvalds
<torvalds@linux-foundation.org> wrote:
> On Mon, May 5, 2014 at 8:25 PM, David Miller <davem@davemloft.net> wrote:
>>
>>> Sam Ravnborg <sam@ravnborg.org> wrote:
>>>>
>>>> There is a related patch in this area which I think is not yet applied.
>>>>
>>>> See: https://lkml.org/lkml/2014/4/18/28
>>>>
>>>> Maybe this is related.
>>>
>>> Thanks, I'm testing with that patch added as well.
>>
>> I can confirm that this fixes my problems completely.
>
> Ugh. That patch has been out two weeks already. Pekka?

Sorry, I missed that completely.

> I guess I'll apply both patches directly.

Thanks!

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2014-05-06  4:04 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-05 20:20 [PATCH] slab: Fix off by one in object max number tests David Miller
2014-05-05 20:57 ` David Miller
2014-05-05 21:05   ` Sam Ravnborg
2014-05-05 21:08     ` David Miller
2014-05-06  3:25       ` David Miller
2014-05-06  3:32         ` Linus Torvalds
2014-05-06  3:46           ` Linus Torvalds
2014-05-06  3:48             ` David Miller
2014-05-06  4:04           ` Pekka Enberg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox