diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-08-09 08:42:16 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-08-09 08:42:16 -0700 |
commit | e6a99d312687a42c077a9b8cb5e757f186edb1b9 (patch) | |
tree | ca2d0aaf149beb82f601006bdc0c2a7b6a9d3bd5 /mm | |
parent | 6bb615bc396512992f77495180cda29f0f9791b5 (diff) | |
parent | ef62fb32b7b21731e41aea3c1e08bcdb407c9eb9 (diff) | |
download | linux-3.10-e6a99d312687a42c077a9b8cb5e757f186edb1b9.tar.gz linux-3.10-e6a99d312687a42c077a9b8cb5e757f186edb1b9.tar.bz2 linux-3.10-e6a99d312687a42c077a9b8cb5e757f186edb1b9.zip |
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
Diffstat (limited to 'mm')
-rw-r--r-- | mm/slub.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/mm/slub.c b/mm/slub.c index eb5a8f93338..6da68597bde 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -701,7 +701,7 @@ static u8 *check_bytes(u8 *start, u8 value, unsigned int bytes) return check_bytes8(start, value, bytes); value64 = value | value << 8 | value << 16 | value << 24; - value64 = value64 | value64 << 32; + value64 = (value64 & 0xffffffff) | value64 << 32; prefix = 8 - ((unsigned long)start) % 8; if (prefix) { @@ -2387,11 +2387,13 @@ static void __slab_free(struct kmem_cache *s, struct page *page, slab_empty: if (prior) { /* - * Slab still on the partial list. + * Slab on the partial list. */ remove_partial(n, page); stat(s, FREE_REMOVE_PARTIAL); - } + } else + /* Slab must be on the full list */ + remove_full(s, page); spin_unlock_irqrestore(&n->list_lock, flags); stat(s, FREE_SLAB); |