zonefs: Fix race between modprobe and mount
authorZhang Xiaoxu <zhangxiaoxu5@huawei.com>
Sun, 20 Nov 2022 10:57:59 +0000 (18:57 +0800)
committerDamien Le Moal <damien.lemoal@opensource.wdc.com>
Tue, 22 Nov 2022 05:18:32 +0000 (14:18 +0900)
commit4e45886956a20942800259f326a04417292ae314
tree67a28fe370db741219eeb1b5a7cc9ee255876af2
parent61ba9e9712e187e019e6451bb9fc8eb24685fc50
zonefs: Fix race between modprobe and mount

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@huawei.com>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
fs/zonefs/super.c