| From b780cc615ba4795a7ef0e93b19424828a5ad456a Mon Sep 17 00:00:00 2001 |
| From: Bob Peterson <rpeterso@redhat.com> |
| Date: Thu, 25 Jun 2020 13:30:18 -0500 |
| Subject: [PATCH] gfs2: read-only mounts should grab the sd_freeze_gl glock |
| |
| commit b780cc615ba4795a7ef0e93b19424828a5ad456a upstream. |
| |
| Before this patch, only read-write mounts would grab the freeze |
| glock in read-only mode, as part of gfs2_make_fs_rw. So the freeze |
| glock was never initialized. That meant requests to freeze, which |
| request the glock in EX, were granted without any state transition. |
| That meant you could mount a gfs2 file system, which is currently |
| frozen on a different cluster node, in read-only mode. |
| |
| This patch makes read-only mounts lock the freeze glock in SH mode, |
| which will block for file systems that are frozen on another node. |
| |
| Signed-off-by: Bob Peterson <rpeterso@redhat.com> |
| |
| diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c |
| index 094f5fe7c009..a2c0554a1890 100644 |
| --- a/fs/gfs2/ops_fstype.c |
| +++ b/fs/gfs2/ops_fstype.c |
| @@ -1136,7 +1136,17 @@ static int gfs2_fill_super(struct super_block *sb, struct fs_context *fc) |
| goto fail_per_node; |
| } |
| |
| - if (!sb_rdonly(sb)) { |
| + if (sb_rdonly(sb)) { |
| + struct gfs2_holder freeze_gh; |
| + |
| + error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_SHARED, |
| + GL_EXACT, &freeze_gh); |
| + if (error) { |
| + fs_err(sdp, "can't make FS RO: %d\n", error); |
| + goto fail_per_node; |
| + } |
| + gfs2_glock_dq_uninit(&freeze_gh); |
| + } else { |
| error = gfs2_make_fs_rw(sdp); |
| if (error) { |
| fs_err(sdp, "can't make FS RW: %d\n", error); |
| -- |
| 2.27.0 |
| |