Commit ff99b18f authored by Xiongwei Song's avatar Xiongwei Song Committed by Vlastimil Babka
Browse files

mm/slub: simplify get_partial_node()



The break conditions for filling cpu partial can be more readable and
simple.

If slub_get_cpu_partial() returns 0, we can confirm that we don't need
to fill cpu partial, then we should break from the loop. On the other
hand, we also should break from the loop if we have added enough cpu
partial slabs.

Meanwhile, the logic above gets rid of the #ifdef and also fixes a weird
corner case that if we set cpu_partial_slabs to 0 from sysfs, we still
allocate at least one here.

Signed-off-by: default avatarXiongwei Song <xiongwei.song@windriver.com>
Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
parent 721a2f8b
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -2614,18 +2614,18 @@ static struct slab *get_partial_node(struct kmem_cache *s,
		if (!partial) {
			partial = slab;
			stat(s, ALLOC_FROM_PARTIAL);

			if ((slub_get_cpu_partial(s) == 0)) {
				break;
			}
		} else {
			put_cpu_partial(s, slab, 0);
			stat(s, CPU_PARTIAL_NODE);
			partial_slabs++;
		}
#ifdef CONFIG_SLUB_CPU_PARTIAL
		if (partial_slabs > s->cpu_partial_slabs / 2)
			break;
#else
		break;
#endif

			if (++partial_slabs > slub_get_cpu_partial(s) / 2) {
				break;
			}
		}
	}
	spin_unlock_irqrestore(&n->list_lock, flags);
	return partial;