Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f78bb8ad authored by Linus Torvalds's avatar Linus Torvalds
Browse files

slab: fix calculate_slab_order() for SLAB_RECLAIM_ACCOUNT



Instead of having a hard-to-read and confusing conditional in the
caller, just make the slab order calculation handle this special case,
since it's simple and obvious there.

Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 7986824e
Loading
Loading
Loading
Loading
+9 −11
Original line number Diff line number Diff line
@@ -1647,6 +1647,14 @@ static inline size_t calculate_slab_order(struct kmem_cache *cachep,
		cachep->gfporder = gfporder;
		left_over = remainder;

		/*
		 * A VFS-reclaimable slab tends to have most allocations
		 * as GFP_NOFS and we really don't want to have to be allocating
		 * higher-order pages when we are unable to shrink dcache.
		 */
		if (flags & SLAB_RECLAIM_ACCOUNT)
			break;

		/*
		 * Large number of objects is good, but very large slabs are
		 * currently bad for the gfp()s.
@@ -1869,16 +1877,6 @@ kmem_cache_create (const char *name, size_t size, size_t align,

	size = ALIGN(size, align);

	if ((flags & SLAB_RECLAIM_ACCOUNT) && size <= PAGE_SIZE) {
		/*
		 * A VFS-reclaimable slab tends to have most allocations
		 * as GFP_NOFS and we really don't want to have to be allocating
		 * higher-order pages when we are unable to shrink dcache.
		 */
		cachep->gfporder = 0;
		cache_estimate(cachep->gfporder, size, align, flags,
			       &left_over, &cachep->num);
	} else
	left_over = calculate_slab_order(cachep, size, align, flags);

	if (!cachep->num) {