diff options
Diffstat (limited to 'mm/slub.c')
-rw-r--r-- | mm/slub.c | 10 |
1 files changed, 6 insertions, 4 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) { |
@@ -1854,7 +1854,7 @@ redo: | |||
1854 | 1854 | ||
1855 | new.frozen = 0; | 1855 | new.frozen = 0; |
1856 | 1856 | ||
1857 | if (!new.inuse && n->nr_partial < s->min_partial) | 1857 | if (!new.inuse && n->nr_partial > s->min_partial) |
1858 | m = M_FREE; | 1858 | m = M_FREE; |
1859 | else if (new.freelist) { | 1859 | else if (new.freelist) { |
1860 | m = M_PARTIAL; | 1860 | m = M_PARTIAL; |
@@ -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); |