On Thu, 2011-11-10 at 14:08 +0800, David Rientjes wrote: > On Thu, 10 Nov 2011, Shaohua Li wrote: > > > Index: linux/mm/huge_memory.c > > =================================================================== > > --- linux.orig/mm/huge_memory.c 2011-11-07 13:52:48.000000000 +0800 > > +++ linux/mm/huge_memory.c 2011-11-10 13:52:08.000000000 +0800 > > @@ -487,41 +487,68 @@ static struct attribute_group khugepaged > > .attrs = khugepaged_attr, > > .name = "khugepaged", > > }; > > -#endif /* CONFIG_SYSFS */ > > > > -static int __init hugepage_init(void) > > +static struct kobject *hugepage_kobj; > > +static int __init hugepage_init_sysfs(void) > > { > > int err; > > -#ifdef CONFIG_SYSFS > > - static struct kobject *hugepage_kobj; > > -#endif > > > > - err = -EINVAL; > > - if (!has_transparent_hugepage()) { > > - transparent_hugepage_flags = 0; > > - goto out; > > - } > > - > > -#ifdef CONFIG_SYSFS > > - err = -ENOMEM; > > hugepage_kobj = kobject_create_and_add("transparent_hugepage", mm_kobj); > > if (unlikely(!hugepage_kobj)) { > > printk(KERN_ERR "hugepage: failed kobject create\n"); > > - goto out; > > + return -ENOMEM; > > } > > > > err = sysfs_create_group(hugepage_kobj, &hugepage_attr_group); > > if (err) { > > printk(KERN_ERR "hugepage: failed register hugeage group\n"); > > - goto out; > > + goto delete_obj; > > } > > > > err = sysfs_create_group(hugepage_kobj, &khugepaged_attr_group); > > if (err) { > > printk(KERN_ERR "hugepage: failed register hugeage group\n"); > > - goto out; > > + goto remove_hp_group; > > } > > -#endif > > + > > + return 0; > > + > > +remove_hp_group: > > + sysfs_remove_group(hugepage_kobj, &hugepage_attr_group); > > +delete_obj: > > + kobject_put(hugepage_kobj); > > + return err; > > +} > > + > > +static void __init hugepage_exit_sysfs(void) > > +{ > > + sysfs_remove_group(hugepage_kobj, &khugepaged_attr_group); > > + sysfs_remove_group(hugepage_kobj, &hugepage_attr_group); > > + kobject_put(hugepage_kobj); > > +} > > As mentioned previously, if khugepaged_slab_init() and > mm_slots_hash_init() is done first before sysfs is initialized, then you > shouldn't need hugepage_exit_sysfs() at all; all its error handling should > be localized to hugepage_init(). then we just move some error handling code to hugepage_init(). It doesn't mean this one is better or that one is better, but I really see no point to refresh the patch again. Thanks, Shaohua -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>