The patch titled slub: limit the maximum size of merged slab caches has been removed from the -mm tree. Its filename was slub-limit-the-maximum-size-of-merged-slab-caches.patch This patch was dropped because it is obsolete ------------------------------------------------------ Subject: slub: limit the maximum size of merged slab caches From: Christoph Lameter <clameter@xxxxxxx> <davem>When I force SLUB debugging on sparc64, it barfs on early bootup while making the sysfs nodes.</davem> We always switch off the debugging bits of slabs that are too large for free pointer relocation. This means that we may create separate caches even if slub_debug is set. Sysfs later thinks they are mergeable and thus creates unique ids that may then clash. Signed-off-by: Christoph Lameter <clameter@xxxxxxx> Tested-by: David Miller <davem@xxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- mm/slub.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff -puN mm/slub.c~slub-limit-the-maximum-size-of-merged-slab-caches mm/slub.c --- a/mm/slub.c~slub-limit-the-maximum-size-of-merged-slab-caches +++ a/mm/slub.c @@ -209,6 +209,7 @@ static inline void ClearSlabDebug(struct * The page->inuse field is 16 bit thus we have this limitation */ #define MAX_OBJECTS_PER_SLAB 65535 +#define MAX_MERGE_SIZE (MAX_OBJECTS_PER_SLAB * sizeof(void)) /* Internal SLUB flags */ #define __OBJECT_POISON 0x80000000 /* Poison object */ @@ -1002,7 +1003,7 @@ static unsigned long kmem_cache_flags(un * Debugging or ctor may create a need to move the free * pointer. Fail if this happens. */ - if (objsize >= 65535 * sizeof(void *)) { + if (objsize >= MAX_MERGE_SIZE) { BUG_ON(flags & (SLAB_RED_ZONE | SLAB_POISON | SLAB_STORE_USER | SLAB_DESTROY_BY_RCU)); BUG_ON(ctor); @@ -2664,6 +2665,12 @@ static int slab_unmergeable(struct kmem_ if (s->refcount < 0) return 1; + /* + * Or a slab that is too large for merging + */ + if (s->size >= MAX_MERGE_SIZE) + return 1; + return 0; } @@ -2684,6 +2691,9 @@ static struct kmem_cache *find_mergeable size = ALIGN(size, align); flags = kmem_cache_flags(size, flags, name, NULL); + if (size >= MAX_MERGE_SIZE) + return NULL; + list_for_each_entry(s, &slab_caches, list) { if (slab_unmergeable(s)) continue; _ Patches currently in -mm which might be from clameter@xxxxxxx are revert-highmem-catch-illegal-nesting.patch slub-accurately-compare-debug-flags-during-slab-cache-merge.patch slub-limit-the-maximum-size-of-merged-slab-caches.patch infiniband-work-around-gcc-slub-problem.patch net-use-numa_node-in-net_devcice-dev-instead-of-parent.patch pa-risc-use-page-allocator-instead-of-slab-allocator.patch dma-use-dev_to_node-to-get-node-for-device-in-dma_alloc_pages.patch x86-fix-cpu_to_node-references.patch x86-convert-cpu_core_map-to-be-a-per-cpu-variable.patch x86-convert-cpu_sibling_map-to-be-a-per-cpu-variable.patch x86-convert-cpu_sibling_map-to-be-a-per-cpu-variable-broke-ia64.patch x86-convert-x86_cpu_to_apicid-to-be-a-per-cpu-variable.patch x86-convert-cpu_llc_id-to-be-a-per-cpu-variable.patch x86-acpi-use-cpu_physical_id.patch sparsemem-clean-up-spelling-error-in-comments.patch sparsemem-record-when-a-section-has-a-valid-mem_map.patch generic-virtual-memmap-support-for-sparsemem.patch generic-virtual-memmap-support-for-sparsemem-remove-excess-debugging.patch generic-virtual-memmap-support-for-sparsemem-simplify-initialisation-code-and-reduce-duplication.patch generic-virtual-memmap-support-for-sparsemem-pull-out-the-vmemmap-code-into-its-own-file.patch generic-virtual-memmap-support-vmemmap-generify-initialisation-via-helpers.patch x86_64-sparsemem_vmemmap-2m-page-size-support.patch x86_64-sparsemem_vmemmap-2m-page-size-support-ensure-end-of-section-memmap-is-initialised.patch x86_64-sparsemem_vmemmap-vmemmap-x86_64-convert-to-new-helper-based-initialisation.patch ia64-sparsemem_vmemmap-16k-page-size-support.patch ia64-sparsemem_vmemmap-16k-page-size-support-convert-to-new-helper-based-initialisation.patch sparc64-sparsemem_vmemmap-support.patch sparc64-sparsemem_vmemmap-support-vmemmap-convert-to-new-config-options.patch ppc64-sparsemem_vmemmap-support.patch ppc64-sparsemem_vmemmap-support-vmemmap-ppc64-convert-vmm_-macros-to-a-real-function.patch ppc64-sparsemem_vmemmap-support-convert-to-new-config-options.patch slubcearly_kmem_cache_node_alloc-shouldnt-be.patch slub-direct-pass-through-of-page-size-or-higher-kmalloc.patch slub-slob-use-unlikely-for-kfreezero_or_null_ptr-check.patch slab-allocators-fail-if-ksize-is-called-with-a-null-parameter.patch memoryless-nodes-generic-management-of-nodemasks-for-various-purposes.patch memoryless-nodes-generic-management-of-nodemasks-for-various-purposes-fix.patch memoryless-nodes-introduce-mask-of-nodes-with-memory.patch memoryless-nodes-introduce-mask-of-nodes-with-memory-fix.patch memoryless-nodes-fix-interleave-behavior-for-memoryless-nodes.patch memoryless-nodes-oom-use-n_high_memory-map-instead-of-constructing-one-on-the-fly.patch memoryless-nodes-no-need-for-kswapd.patch memoryless-nodes-slab-support.patch memoryless-nodes-slub-support.patch memoryless-nodes-uncached-allocator-updates.patch memoryless-nodes-allow-profiling-data-to-fall-back-to-other-nodes.patch memoryless-nodes-update-memory-policy-and-page-migration.patch memoryless-nodes-add-n_cpu-node-state.patch memoryless-nodes-add-n_cpu-node-state-move-setup-of-n_cpu-node-state-mask.patch memoryless-nodes-drop-one-memoryless-node-boot-warning.patch memoryless-nodes-fix-gfp_thisnode-behavior.patch memoryless-nodes-use-n_high_memory-for-cpusets.patch memoryless-nodes-fixup-uses-of-node_online_map-in-generic-code.patch memoryless-nodes-fixup-uses-of-node_online_map-in-generic-code-fix.patch memoryless-nodes-fixup-uses-of-node_online_map-in-generic-code-fix-2.patch update-n_high_memory-node-state-for-memory-hotadd.patch categorize-gfp-flags.patch categorize-gfp-flags-fix.patch flush-cache-before-installing-new-page-at-migraton.patch flush-icache-before-set_pte-on-ia64-flush-icache-at-set_pte.patch flush-icache-before-set_pte-on-ia64-flush-icache-at-set_pte-fix.patch flush-icache-before-set_pte-on-ia64-flush-icache-at-set_pte-fix-update.patch group-short-lived-and-reclaimable-kernel-allocations.patch fix-calculation-in-move_freepages_block-for-counting-pages.patch breakout-page_order-to-internalh-to-avoid-special-knowledge-of-the-buddy-allocator.patch do-not-depend-on-max_order-when-grouping-pages-by-mobility.patch print-out-statistics-in-relation-to-fragmentation-avoidance-to-proc-pagetypeinfo.patch slub-avoid-page-struct-cacheline-bouncing-due-to-remote-frees-to-cpu-slab.patch slub-do-not-use-page-mapping.patch slub-move-page-offset-to-kmem_cache_cpu-offset.patch slub-avoid-touching-page-struct-when-freeing-to-per-cpu-slab.patch slub-place-kmem_cache_cpu-structures-in-a-numa-aware-way.patch slub-optimize-cacheline-use-for-zeroing.patch have-kswapd-keep-a-minimum-order-free-other-than-order-0.patch only-check-absolute-watermarks-for-alloc_high-and-alloc_harder-allocations.patch slub-exploit-page-mobility-to-increase-allocation-order.patch slub-reduce-antifrag-max-order.patch slub-slab-validation-move-tracking-information-alloc-outside-of-melstuff.patch memory-hotplug-hot-add-with-sparsemem-vmemmap.patch memory-hotplug-hot-add-with-sparsemem-vmemmap-update.patch mm-mempolicyc-cleanups.patch mm-mempolicyc-cleanups-fix.patch mm-vmstatc-cleanups.patch config_zone_movable-zone-ifdef-cleanup-by-renumbering.patch config_zone_movable-config-zone-movable.patch avoid-negative-and-full-width-shifts-in-radix-treec.patch cpu-hotplug-slab-cleanup-cpuup_callback.patch cpu-hotplug-slab-fix-memory-leak-in-cpu-hotplug-error-path.patch intel-iommu-dmar-detection-and-parsing-logic.patch intel-iommu-pci-generic-helper-function.patch intel-iommu-clflush_cache_range-now-takes-size-param.patch intel-iommu-iova-allocation-and-management-routines.patch intel-iommu-intel-iommu-driver.patch intel-iommu-avoid-memory-allocation-failures-in-dma-map-api-calls.patch intel-iommu-intel-iommu-cmdline-option-forcedac.patch intel-iommu-dmar-fault-handling-support.patch intel-iommu-iommu-gfx-workaround.patch intel-iommu-iommu-floppy-workaround.patch revoke-core-code.patch cpuset-zero-malloc-revert-the-old-cpuset-fix.patch hotplug-cpu-migrate-a-task-within-its-cpuset.patch hotplug-cpu-migrate-a-task-within-its-cpuset-fix.patch hotplug-cpu-migrate-a-task-within-its-cpuset-doc.patch bit_spin_lock-use-lock-bitops.patch page-owner-tracking-leak-detector.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html