On Fri, Mar 08, 2019 at 09:01:51AM -0700, Tycho Andersen wrote: > On Fri, Mar 08, 2019 at 03:14:18PM +1100, Tobin C. Harding wrote: > > --- a/mm/slub.c > > +++ b/mm/slub.c > > @@ -3642,6 +3642,7 @@ static int kmem_cache_open(struct kmem_cache *s, slab_flags_t flags) > > > > set_cpu_partial(s); > > > > + s->defrag_used_ratio = 30; > > #ifdef CONFIG_NUMA > > s->remote_node_defrag_ratio = 1000; > > #endif > > @@ -5261,6 +5262,28 @@ static ssize_t destroy_by_rcu_show(struct kmem_cache *s, char *buf) > > } > > SLAB_ATTR_RO(destroy_by_rcu); > > > > +static ssize_t defrag_used_ratio_show(struct kmem_cache *s, char *buf) > > +{ > > + return sprintf(buf, "%d\n", s->defrag_used_ratio); > > +} > > + > > +static ssize_t defrag_used_ratio_store(struct kmem_cache *s, > > + const char *buf, size_t length) > > +{ > > + unsigned long ratio; > > + int err; > > + > > + err = kstrtoul(buf, 10, &ratio); > > + if (err) > > + return err; > > + > > + if (ratio <= 100) > > + s->defrag_used_ratio = ratio; > else > return -EINVAL; Nice, thanks. I moulded your suggestion into if (ratio > 100) return -EINVAL; s->defrag_used_ratio = ratio; return length; thanks, Tobin.