|
@@ -2723,6 +2723,17 @@ static void *cache_free_debugcheck(struct kmem_cache *cachep, void *objp,
|
|
#define cache_free_debugcheck(x,objp,z) (objp)
|
|
#define cache_free_debugcheck(x,objp,z) (objp)
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
+static inline void fixup_slab_list(struct kmem_cache *cachep,
|
|
|
|
+ struct kmem_cache_node *n, struct page *page)
|
|
|
|
+{
|
|
|
|
+ /* move slabp to correct slabp list: */
|
|
|
|
+ list_del(&page->lru);
|
|
|
|
+ if (page->active == cachep->num)
|
|
|
|
+ list_add(&page->lru, &n->slabs_full);
|
|
|
|
+ else
|
|
|
|
+ list_add(&page->lru, &n->slabs_partial);
|
|
|
|
+}
|
|
|
|
+
|
|
static struct page *get_first_slab(struct kmem_cache_node *n)
|
|
static struct page *get_first_slab(struct kmem_cache_node *n)
|
|
{
|
|
{
|
|
struct page *page;
|
|
struct page *page;
|
|
@@ -2796,12 +2807,7 @@ retry:
|
|
ac_put_obj(cachep, ac, slab_get_obj(cachep, page));
|
|
ac_put_obj(cachep, ac, slab_get_obj(cachep, page));
|
|
}
|
|
}
|
|
|
|
|
|
- /* move slabp to correct slabp list: */
|
|
|
|
- list_del(&page->lru);
|
|
|
|
- if (page->active == cachep->num)
|
|
|
|
- list_add(&page->lru, &n->slabs_full);
|
|
|
|
- else
|
|
|
|
- list_add(&page->lru, &n->slabs_partial);
|
|
|
|
|
|
+ fixup_slab_list(cachep, n, page);
|
|
}
|
|
}
|
|
|
|
|
|
must_grow:
|
|
must_grow:
|
|
@@ -3067,13 +3073,8 @@ retry:
|
|
|
|
|
|
obj = slab_get_obj(cachep, page);
|
|
obj = slab_get_obj(cachep, page);
|
|
n->free_objects--;
|
|
n->free_objects--;
|
|
- /* move slabp to correct slabp list: */
|
|
|
|
- list_del(&page->lru);
|
|
|
|
|
|
|
|
- if (page->active == cachep->num)
|
|
|
|
- list_add(&page->lru, &n->slabs_full);
|
|
|
|
- else
|
|
|
|
- list_add(&page->lru, &n->slabs_partial);
|
|
|
|
|
|
+ fixup_slab_list(cachep, n, page);
|
|
|
|
|
|
spin_unlock(&n->list_lock);
|
|
spin_unlock(&n->list_lock);
|
|
goto done;
|
|
goto done;
|