forked from luck/tmp_suning_uos_patched
GFS2: Prevent BUG from occurring when normal Withdraws occur
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>
This commit is contained in:
parent
69eea5a4ab
commit
0d1c7ae9d8
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user