On Fri, 23 Feb 2024 11:42:01 -0600 John Groves <John@xxxxxxxxxx> wrote: > This commit introduces the module init and exit machinery for famfs. > > Signed-off-by: John Groves <john@xxxxxxxxxx> I'd prefer to see this from the start with the functionality of the module built up as you go + build logic in place. Makes it easy to spot places where the patches aren't appropriately self constrained. > --- > fs/famfs/famfs_inode.c | 44 ++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 44 insertions(+) > > diff --git a/fs/famfs/famfs_inode.c b/fs/famfs/famfs_inode.c > index ab46ec50b70d..0d659820e8ff 100644 > --- a/fs/famfs/famfs_inode.c > +++ b/fs/famfs/famfs_inode.c > @@ -462,4 +462,48 @@ static struct file_system_type famfs_fs_type = { > .fs_flags = FS_USERNS_MOUNT, > }; > > +/***************************************************************************************** > + * Module stuff I'd drop these drivers structure comments. They add little beyond a high possibility of being wrong after the code has evolved a bit. > + */ > +static struct kobject *famfs_kobj; > + > +static int __init init_famfs_fs(void) > +{ > + int rc; > + > +#if defined(CONFIG_DEV_DAX_IOMAP) > + pr_notice("%s: Your kernel supports famfs on /dev/dax\n", __func__); > +#else > + pr_notice("%s: Your kernel does not support famfs on /dev/dax\n", __func__); > +#endif > + famfs_kobj = kobject_create_and_add(MODULE_NAME, fs_kobj); > + if (!famfs_kobj) { > + pr_warn("Failed to create kobject\n"); > + return -ENOMEM; > + } > + > + rc = sysfs_create_group(famfs_kobj, &famfs_attr_group); > + if (rc) { > + kobject_put(famfs_kobj); > + pr_warn("%s: Failed to create sysfs group\n", __func__); > + return rc; > + } > + > + return register_filesystem(&famfs_fs_type); If this fails, do we not leak the kobj and sysfs groups? > +} > + > +static void > +__exit famfs_exit(void) > +{ > + sysfs_remove_group(famfs_kobj, &famfs_attr_group); > + kobject_put(famfs_kobj); > + unregister_filesystem(&famfs_fs_type); > + pr_info("%s: unregistered\n", __func__); > +} > + > + > +fs_initcall(init_famfs_fs); > +module_exit(famfs_exit); > + > +MODULE_AUTHOR("John Groves, Micron Technology"); > MODULE_LICENSE("GPL");