On Tue, Aug 30, 2022 at 8:52 PM Bob Peterson <rpete...@redhat.com> wrote: > Before this patch, the gfs2 file system was registered prior to creating > the three workqueues. In some cases this allowed dlm to send recovery > work to a workqueue that did not yet exist because gfs2 was still > initializing. > > This patch changes the order of gfs2's initialization routine so it only > registers the file system after the work queues are created. > > Signed-off-by: Bob Peterson <rpete...@redhat.com> > --- > fs/gfs2/main.c | 24 ++++++++++++------------ > 1 file changed, 12 insertions(+), 12 deletions(-) > > diff --git a/fs/gfs2/main.c b/fs/gfs2/main.c > index 14ae9de76277..afcb32854f14 100644 > --- a/fs/gfs2/main.c > +++ b/fs/gfs2/main.c > @@ -151,14 +151,6 @@ static int __init init_gfs2_fs(void) > if (error) > goto fail_shrinker; > > - error = register_filesystem(&gfs2_fs_type); > - if (error) > - goto fail_fs1; > - > - error = register_filesystem(&gfs2meta_fs_type); > - if (error) > - goto fail_fs2; > - > error = -ENOMEM; > gfs_recovery_wq = alloc_workqueue("gfs_recovery", > WQ_MEM_RECLAIM | WQ_FREEZABLE, 0); > @@ -180,11 +172,23 @@ static int __init init_gfs2_fs(void) > goto fail_mempool; > > gfs2_register_debugfs(); > + error = register_filesystem(&gfs2_fs_type); > + if (error) > + goto fail_fs1; > + > + error = register_filesystem(&gfs2meta_fs_type); > + if (error) > + goto fail_fs2; > + > > pr_info("GFS2 installed\n"); > > return 0; > > +fail_fs2: > + unregister_filesystem(&gfs2_fs_type); > +fail_fs1: > + mempool_destroy(gfs2_page_pool); > fail_mempool: > destroy_workqueue(gfs2_freeze_wq); > fail_wq3: > @@ -192,10 +196,6 @@ static int __init init_gfs2_fs(void) > fail_wq2: > destroy_workqueue(gfs_recovery_wq); > fail_wq1: > - unregister_filesystem(&gfs2meta_fs_type); > -fail_fs2: > - unregister_filesystem(&gfs2_fs_type); > -fail_fs1: > unregister_shrinker(&gfs2_qd_shrinker); > fail_shrinker: > kmem_cache_destroy(gfs2_trans_cachep); > -- > 2.37.2 >
Pushed to for-next. Thanks, Andreas