All of lore.kernel.org
 help / color / mirror / Atom feed
* [Cluster-devel] [PATCH] gfs2: Register fs after creating workqueues
@ 2022-08-30 18:52 Bob Peterson
  2022-09-20 16:01 ` Andreas Gruenbacher
  0 siblings, 1 reply; 2+ messages in thread
From: Bob Peterson @ 2022-08-30 18:52 UTC (permalink / raw)
  To: cluster-devel.redhat.com

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 <rpeterso@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


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [Cluster-devel] [PATCH] gfs2: Register fs after creating workqueues
  2022-08-30 18:52 [Cluster-devel] [PATCH] gfs2: Register fs after creating workqueues Bob Peterson
@ 2022-09-20 16:01 ` Andreas Gruenbacher
  0 siblings, 0 replies; 2+ messages in thread
From: Andreas Gruenbacher @ 2022-09-20 16:01 UTC (permalink / raw)
  To: cluster-devel.redhat.com

On Tue, Aug 30, 2022 at 8:52 PM Bob Peterson <rpeterso@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 <rpeterso@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


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-09-20 16:01 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-30 18:52 [Cluster-devel] [PATCH] gfs2: Register fs after creating workqueues Bob Peterson
2022-09-20 16:01 ` Andreas Gruenbacher

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.