patch-2.1.111 linux/mm/slab.c
Next file: linux/net/ax25/af_ax25.c
Previous file: linux/mm/mmap.c
Back to the patch index
Back to the overall index
- Lines: 42
- Date:
Thu Jul 23 16:24:17 1998
- Orig file:
v2.1.110/linux/mm/slab.c
- Orig date:
Wed Jun 24 22:54:14 1998
diff -u --recursive --new-file v2.1.110/linux/mm/slab.c linux/mm/slab.c
@@ -313,7 +313,9 @@
/* If the num of objs per slab is <= SLAB_MIN_OBJS_PER_SLAB,
* then the page order must be less than this before trying the next order.
*/
-#define SLAB_BREAK_GFP_ORDER 2
+#define SLAB_BREAK_GFP_ORDER_HI 2
+#define SLAB_BREAK_GFP_ORDER_LO 1
+static int slab_break_gfp_order = SLAB_BREAK_GFP_ORDER_LO;
/* Macros for storing/retrieving the cachep and or slab from the
* global 'mem_map'. With off-slab bufctls, these are used to find the
@@ -447,6 +449,12 @@
cache_cache.c_colour = (i-(cache_cache.c_num*size))/L1_CACHE_BYTES;
cache_cache.c_colour_next = cache_cache.c_colour;
+ /*
+ * Fragmentation resistance on low memory - only use bigger
+ * page orders on machines with more than 32MB of memory.
+ */
+ if (num_physpages > (32 << 20) >> PAGE_SHIFT)
+ slab_break_gfp_order = SLAB_BREAK_GFP_ORDER_HI;
return start;
}
@@ -604,7 +612,7 @@
{
if (cachep->c_dtor
#if SLAB_DEBUG_SUPPORT
- || cachep->c_flags & (SLAB_POISON || SLAB_RED_ZONE)
+ || cachep->c_flags & (SLAB_POISON | SLAB_RED_ZONE)
#endif /*SLAB_DEBUG_SUPPORT*/
) {
/* Doesn't use the bufctl ptrs to find objs. */
@@ -869,7 +877,7 @@
* bad for the gfp()s.
*/
if (cachep->c_num <= SLAB_MIN_OBJS_PER_SLAB) {
- if (cachep->c_gfporder < SLAB_BREAK_GFP_ORDER)
+ if (cachep->c_gfporder < slab_break_gfp_order)
goto next;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov