On Tue 17-10-17 09:20:58, Kemi Wang wrote: [...] Other than two remarks below, it looks good to me and it also looks simpler. > diff --git a/mm/vmstat.c b/mm/vmstat.c > index 4bb13e7..e746ed1 100644 > --- a/mm/vmstat.c > +++ b/mm/vmstat.c > @@ -32,6 +32,76 @@ > > #define NUMA_STATS_THRESHOLD (U16_MAX - 2) > > +#ifdef CONFIG_NUMA > +int sysctl_vm_numa_stat = ENABLE_NUMA_STAT; > +static DEFINE_MUTEX(vm_numa_stat_lock); You can scope this mutex to the sysctl handler function > +int sysctl_vm_numa_stat_handler(struct ctl_table *table, int write, > + void __user *buffer, size_t *length, loff_t *ppos) > +{ > + int ret, oldval; > + > + mutex_lock(&vm_numa_stat_lock); > + if (write) > + oldval = sysctl_vm_numa_stat; > + ret = proc_dointvec(table, write, buffer, length, ppos); > + if (ret || !write) > + goto out; > + > + if (oldval == sysctl_vm_numa_stat) > + goto out; > + else if (oldval == DISABLE_NUMA_STAT) { So basically any value will enable numa stats. This means that we would never be able to extend this interface to e.g. auto mode (say value 2). I guess you meant to check sysctl_vm_numa_stat == ENABLE_NUMA_STAT? > + static_branch_enable(&vm_numa_stat_key); > + pr_info("enable numa statistics\n"); > + } else if (sysctl_vm_numa_stat == DISABLE_NUMA_STAT) { > + static_branch_disable(&vm_numa_stat_key); > + invalid_numa_statistics(); > + pr_info("disable numa statistics, and clear numa counters\n"); > + } > + > +out: > + mutex_unlock(&vm_numa_stat_lock); > + return ret; > +} > +#endif > + > #ifdef CONFIG_VM_EVENT_COUNTERS > DEFINE_PER_CPU(struct vm_event_state, vm_event_states) = {{0}}; > EXPORT_PER_CPU_SYMBOL(vm_event_states); > -- > 2.7.4 > -- Michal Hocko SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html