From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail137.messagelabs.com (mail137.messagelabs.com [216.82.249.19]) by kanga.kvack.org (Postfix) with SMTP id C5E3A6B0080 for ; Thu, 10 Nov 2011 09:14:27 -0500 (EST) Date: Thu, 10 Nov 2011 15:14:12 +0100 From: Andrea Arcangeli Subject: Re: [patch 1/5]thp: improve the error code path Message-ID: <20111110141412.GW5075@redhat.com> References: <1319511521.22361.135.camel@sli10-conroe> <20111025114406.GC10182@redhat.com> <1319593680.22361.145.camel@sli10-conroe> <1320643049.22361.204.camel@sli10-conroe> <20111110021853.GQ5075@redhat.com> <1320892395.22361.229.camel@sli10-conroe> <20111110030646.GT5075@redhat.com> <1320904609.22361.239.camel@sli10-conroe> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1320904609.22361.239.camel@sli10-conroe> Sender: owner-linux-mm@kvack.org List-ID: To: Shaohua Li Cc: David Rientjes , Andrew Morton , linux-mm , lkml On Thu, Nov 10, 2011 at 01:56:49PM +0800, Shaohua Li wrote: > +static struct kobject *hugepage_kobj; It's minor nitpick but we don't need to put this in .bss, passing it as hugepage_init_sysfs(struct kobject **hugepage_kobj) and storing it there in case the error returned by hugepage_init_sysfs is zero should be fine. The feature cannot be unloaded so we can lose the pointer after init is complete. Then I think we can be done with this... and it looks better now. > +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); > +} > +#else > +static inline int hugepage_init_sysfs(void) > +{ > + return 0; > +} > + > +static inline void hugepage_exit_sysfs(void) > +{ > +} > +#endif /* CONFIG_SYSFS */ > + > +static int __init hugepage_init(void) > +{ > + int err; struct kobject *hugepage_kobj; > + > + if (!has_transparent_hugepage()) { > + transparent_hugepage_flags = 0; > + return -EINVAL; > + } > + > + err = hugepage_init_sysfs(); err = hugepage_init_sysfs(&hugepage_kobj); > + if (err) > + return err; > > err = khugepaged_slab_init(); > if (err) > @@ -545,7 +572,9 @@ static int __init hugepage_init(void) > > set_recommended_min_free_kbytes(); > > + return 0; > out: > + hugepage_exit_sysfs(); hugepage_exit_sysfs(hugepage_kobj); > return err; > } > module_init(hugepage_init) > > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. 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: email@kvack.org