All of lore.kernel.org
 help / color / mirror / Atom feed
* [Cluster-devel] [GFS2 PATCH] GFS2: Prevent BUG from occurring when normal Withdraws occur
       [not found] <1329729110.30027117.1488562921314.JavaMail.zimbra@redhat.com>
@ 2017-03-03 17:42 ` Bob Peterson
  2017-03-06 12:03   ` Steven Whitehouse
  0 siblings, 1 reply; 2+ messages in thread
From: Bob Peterson @ 2017-03-03 17:42 UTC (permalink / raw)
  To: cluster-devel.redhat.com

Hi,

When the GFS2 file system withdraws due to metadata corruption, it
often has outstanding transactions in the journal and delayed work
queued for its glocks. This patch adds some new checks for a
withdrawn file system before proceeding with operations that would
obviously cause a BUG() to be triggered. That allows GFS2 to be
safely unmounted rather than cause the system to go down.

Signed-off-by: Bob Peterson <rpeterso@redhat.com>
---
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
index ec0848f..694167b 100644
--- a/fs/gfs2/glock.c
+++ b/fs/gfs2/glock.c
@@ -449,6 +449,8 @@ __acquires(&gl->gl_lockref.lock)
 	unsigned int lck_flags = (unsigned int)(gh ? gh->gh_flags : 0);
 	int ret;
 
+	if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags)))
+		return;
 	lck_flags &= (LM_FLAG_TRY | LM_FLAG_TRY_1CB | LM_FLAG_NOEXP |
 		      LM_FLAG_PRIORITY);
 	GLOCK_BUG_ON(gl, gl->gl_state == target);
diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c
index e3ee387..8b0139c 100644
--- a/fs/gfs2/super.c
+++ b/fs/gfs2/super.c
@@ -793,7 +793,8 @@ static void gfs2_dirty_inode(struct inode *inode, int flags)
 
 	if (!(flags & (I_DIRTY_DATASYNC|I_DIRTY_SYNC)))
 		return;
-
+	if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags)))
+		return;
 	if (!gfs2_glock_is_locked_by_me(ip->i_gl)) {
 		ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh);
 		if (ret) {



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

* [Cluster-devel] [GFS2 PATCH] GFS2: Prevent BUG from occurring when normal Withdraws occur
  2017-03-03 17:42 ` [Cluster-devel] [GFS2 PATCH] GFS2: Prevent BUG from occurring when normal Withdraws occur Bob Peterson
@ 2017-03-06 12:03   ` Steven Whitehouse
  0 siblings, 0 replies; 2+ messages in thread
From: Steven Whitehouse @ 2017-03-06 12:03 UTC (permalink / raw)
  To: cluster-devel.redhat.com

Hi,

Acked-by: Steven Whitehouse <swhiteho@redhat.com>

Steve.

On 03/03/17 17:42, Bob Peterson wrote:
> Hi,
>
> When the GFS2 file system withdraws due to metadata corruption, it
> often has outstanding transactions in the journal and delayed work
> queued for its glocks. This patch adds some new checks for a
> withdrawn file system before proceeding with operations that would
> obviously cause a BUG() to be triggered. That allows GFS2 to be
> safely unmounted rather than cause the system to go down.
>
> Signed-off-by: Bob Peterson <rpeterso@redhat.com>
> ---
> diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
> index ec0848f..694167b 100644
> --- a/fs/gfs2/glock.c
> +++ b/fs/gfs2/glock.c
> @@ -449,6 +449,8 @@ __acquires(&gl->gl_lockref.lock)
>   	unsigned int lck_flags = (unsigned int)(gh ? gh->gh_flags : 0);
>   	int ret;
>   
> +	if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags)))
> +		return;
>   	lck_flags &= (LM_FLAG_TRY | LM_FLAG_TRY_1CB | LM_FLAG_NOEXP |
>   		      LM_FLAG_PRIORITY);
>   	GLOCK_BUG_ON(gl, gl->gl_state == target);
> diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c
> index e3ee387..8b0139c 100644
> --- a/fs/gfs2/super.c
> +++ b/fs/gfs2/super.c
> @@ -793,7 +793,8 @@ static void gfs2_dirty_inode(struct inode *inode, int flags)
>   
>   	if (!(flags & (I_DIRTY_DATASYNC|I_DIRTY_SYNC)))
>   		return;
> -
> +	if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags)))
> +		return;
>   	if (!gfs2_glock_is_locked_by_me(ip->i_gl)) {
>   		ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh);
>   		if (ret) {
>



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

end of thread, other threads:[~2017-03-06 12:03 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <1329729110.30027117.1488562921314.JavaMail.zimbra@redhat.com>
2017-03-03 17:42 ` [Cluster-devel] [GFS2 PATCH] GFS2: Prevent BUG from occurring when normal Withdraws occur Bob Peterson
2017-03-06 12:03   ` Steven Whitehouse

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.