* [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 a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).