diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-08-09 11:42:16 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-08-09 11:42:16 -0400 |
| commit | e6a99d312687a42c077a9b8cb5e757f186edb1b9 (patch) | |
| tree | ca2d0aaf149beb82f601006bdc0c2a7b6a9d3bd5 | |
| parent | 6bb615bc396512992f77495180cda29f0f9791b5 (diff) | |
| parent | ef62fb32b7b21731e41aea3c1e08bcdb407c9eb9 (diff) | |
Merge branch 'slab/urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/penberg/slab-2.6
* 'slab/urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/penberg/slab-2.6:
slub: fix check_bytes() for slub debugging
slub: Fix full list corruption if debugging is on
| -rw-r--r-- | mm/slub.c | 8 |
1 files changed, 5 insertions, 3 deletions
| @@ -701,7 +701,7 @@ static u8 *check_bytes(u8 *start, u8 value, unsigned int bytes) | |||
| 701 | return check_bytes8(start, value, bytes); | 701 | return check_bytes8(start, value, bytes); |
| 702 | 702 | ||
| 703 | value64 = value | value << 8 | value << 16 | value << 24; | 703 | value64 = value | value << 8 | value << 16 | value << 24; |
| 704 | value64 = value64 | value64 << 32; | 704 | value64 = (value64 & 0xffffffff) | value64 << 32; |
| 705 | prefix = 8 - ((unsigned long)start) % 8; | 705 | prefix = 8 - ((unsigned long)start) % 8; |
| 706 | 706 | ||
| 707 | if (prefix) { | 707 | if (prefix) { |
| @@ -2387,11 +2387,13 @@ static void __slab_free(struct kmem_cache *s, struct page *page, | |||
| 2387 | slab_empty: | 2387 | slab_empty: |
| 2388 | if (prior) { | 2388 | if (prior) { |
| 2389 | /* | 2389 | /* |
| 2390 | * Slab still on the partial list. | 2390 | * Slab on the partial list. |
| 2391 | */ | 2391 | */ |
| 2392 | remove_partial(n, page); | 2392 | remove_partial(n, page); |
| 2393 | stat(s, FREE_REMOVE_PARTIAL); | 2393 | stat(s, FREE_REMOVE_PARTIAL); |
| 2394 | } | 2394 | } else |
| 2395 | /* Slab must be on the full list */ | ||
| 2396 | remove_full(s, page); | ||
| 2395 | 2397 | ||
| 2396 | spin_unlock_irqrestore(&n->list_lock, flags); | 2398 | spin_unlock_irqrestore(&n->list_lock, flags); |
| 2397 | stat(s, FREE_SLAB); | 2399 | stat(s, FREE_SLAB); |
