|
@@ -1966,6 +1966,7 @@ static void *__slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node,
|
|
|
goto new_slab;
|
|
|
|
|
|
if (unlikely(!node_match(c, node))) {
|
|
|
+ stat(s, ALLOC_NODE_MISMATCH);
|
|
|
deactivate_slab(s, c);
|
|
|
goto new_slab;
|
|
|
}
|
|
@@ -4671,6 +4672,7 @@ STAT_ATTR(FREE_REMOVE_PARTIAL, free_remove_partial);
|
|
|
STAT_ATTR(ALLOC_FROM_PARTIAL, alloc_from_partial);
|
|
|
STAT_ATTR(ALLOC_SLAB, alloc_slab);
|
|
|
STAT_ATTR(ALLOC_REFILL, alloc_refill);
|
|
|
+STAT_ATTR(ALLOC_NODE_MISMATCH, alloc_node_mismatch);
|
|
|
STAT_ATTR(FREE_SLAB, free_slab);
|
|
|
STAT_ATTR(CPUSLAB_FLUSH, cpuslab_flush);
|
|
|
STAT_ATTR(DEACTIVATE_FULL, deactivate_full);
|
|
@@ -4730,6 +4732,7 @@ static struct attribute *slab_attrs[] = {
|
|
|
&alloc_from_partial_attr.attr,
|
|
|
&alloc_slab_attr.attr,
|
|
|
&alloc_refill_attr.attr,
|
|
|
+ &alloc_node_mismatch_attr.attr,
|
|
|
&free_slab_attr.attr,
|
|
|
&cpuslab_flush_attr.attr,
|
|
|
&deactivate_full_attr.attr,
|