]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - mm/slab.c
mm/memory-hotplug: switch locking to a percpu rwsem
[karo-tx-linux.git] / mm / slab.c
index 2a31ee3c5814f192234385303a0d86cc77790580..04dec48c3ed7a12af3fef4958e928d0ddc31b64e 100644 (file)
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -1425,11 +1425,9 @@ static struct page *kmem_getpages(struct kmem_cache *cachep, gfp_t flags,
 
        nr_pages = (1 << cachep->gfporder);
        if (cachep->flags & SLAB_RECLAIM_ACCOUNT)
-               add_zone_page_state(page_zone(page),
-                       NR_SLAB_RECLAIMABLE, nr_pages);
+               mod_lruvec_page_state(page, NR_SLAB_RECLAIMABLE, nr_pages);
        else
-               add_zone_page_state(page_zone(page),
-                       NR_SLAB_UNRECLAIMABLE, nr_pages);
+               mod_lruvec_page_state(page, NR_SLAB_UNRECLAIMABLE, nr_pages);
 
        __SetPageSlab(page);
        /* Record if ALLOC_NO_WATERMARKS was set when allocating the slab */
@@ -1459,11 +1457,9 @@ static void kmem_freepages(struct kmem_cache *cachep, struct page *page)
        kmemcheck_free_shadow(page, order);
 
        if (cachep->flags & SLAB_RECLAIM_ACCOUNT)
-               sub_zone_page_state(page_zone(page),
-                               NR_SLAB_RECLAIMABLE, nr_freed);
+               mod_lruvec_page_state(page, NR_SLAB_RECLAIMABLE, -nr_freed);
        else
-               sub_zone_page_state(page_zone(page),
-                               NR_SLAB_UNRECLAIMABLE, nr_freed);
+               mod_lruvec_page_state(page, NR_SLAB_UNRECLAIMABLE, -nr_freed);
 
        BUG_ON(!PageSlab(page));
        __ClearPageSlabPfmemalloc(page);
@@ -2040,17 +2036,13 @@ __kmem_cache_create (struct kmem_cache *cachep, unsigned long flags)
         * unaligned accesses for some archs when redzoning is used, and makes
         * sure any on-slab bufctl's are also correctly aligned.
         */
-       if (size & (BYTES_PER_WORD - 1)) {
-               size += (BYTES_PER_WORD - 1);
-               size &= ~(BYTES_PER_WORD - 1);
-       }
+       size = ALIGN(size, BYTES_PER_WORD);
 
        if (flags & SLAB_RED_ZONE) {
                ralign = REDZONE_ALIGN;
                /* If redzoning, ensure that the second redzone is suitably
                 * aligned, by adjusting the object size accordingly. */
-               size += REDZONE_ALIGN - 1;
-               size &= ~(REDZONE_ALIGN - 1);
+               size = ALIGN(size, REDZONE_ALIGN);
        }
 
        /* 3) caller mandated alignment */