On 11/20/22 19:57, Zhang Xiaoxu wrote: > There is a race between modprobe and mount as below: > > modprobe zonefs | mount -t zonefs > --------------------------------|------------------------- > zonefs_init | > register_filesystem [1] | > | zonefs_fill_super [2] > zonefs_sysfs_init [3] | > > 1. register zonefs suceess, then > 2. user can mount the zonefs > 3. if sysfs initialize failed, the module initialize failed. > > Then the mount process maybe some error happened since the module > initialize failed. > > Let's register zonefs after all dependency resource ready. And > reorder the dependency resource release in module exit. > > Fixes: 9277a6d4fbd4 ("zonefs: Export open zone resource information through sysfs") > Signed-off-by: Zhang Xiaoxu <zhangxiaoxu5@xxxxxxxxxx> Applied to for-6.1-fixes. Thanks ! > --- > fs/zonefs/super.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/fs/zonefs/super.c b/fs/zonefs/super.c > index 860f0b1032c6..625749fbedf4 100644 > --- a/fs/zonefs/super.c > +++ b/fs/zonefs/super.c > @@ -1905,18 +1905,18 @@ static int __init zonefs_init(void) > if (ret) > return ret; > > - ret = register_filesystem(&zonefs_type); > + ret = zonefs_sysfs_init(); > if (ret) > goto destroy_inodecache; > > - ret = zonefs_sysfs_init(); > + ret = register_filesystem(&zonefs_type); > if (ret) > - goto unregister_fs; > + goto sysfs_exit; > > return 0; > > -unregister_fs: > - unregister_filesystem(&zonefs_type); > +sysfs_exit: > + zonefs_sysfs_exit(); > destroy_inodecache: > zonefs_destroy_inodecache(); > > @@ -1925,9 +1925,9 @@ static int __init zonefs_init(void) > > static void __exit zonefs_exit(void) > { > + unregister_filesystem(&zonefs_type); > zonefs_sysfs_exit(); > zonefs_destroy_inodecache(); > - unregister_filesystem(&zonefs_type); > } > > MODULE_AUTHOR("Damien Le Moal"); -- Damien Le Moal Western Digital Research