Skip to content

Commit 0e2038a

Browse files
author
Andreas Gruenbacher
committed
gfs2: Withdraw immediately on log write errors
Now that gfs2_withdraw() is asynchronous, immediately withdraw when a log write error is detected. Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
1 parent 1b7d498 commit 0e2038a

2 files changed

Lines changed: 2 additions & 14 deletions

File tree

fs/gfs2/glock.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -710,6 +710,7 @@ __acquires(&gl->gl_lockref.lock)
710710
if (cmpxchg(&sdp->sd_log_error, 0, ret)) {
711711
fs_err(sdp, "Error %d syncing glock\n", ret);
712712
gfs2_dump_glock(NULL, gl, true);
713+
gfs2_withdraw(sdp);
713714
}
714715
spin_lock(&gl->gl_lockref.lock);
715716
goto skip_inval;
@@ -728,6 +729,7 @@ __acquires(&gl->gl_lockref.lock)
728729
gfs2_glock_assert_warn(gl,
729730
!atomic_read(&gl->gl_ail_count));
730731
gfs2_dump_glock(NULL, gl, true);
732+
gfs2_withdraw(sdp);
731733
}
732734
glops->go_inval(gl, target == LM_ST_DEFERRED ? 0 : DIO_METADATA);
733735
}
@@ -755,8 +757,6 @@ __acquires(&gl->gl_lockref.lock)
755757
* gfs2_gl_hash_clear calls clear_glock) and recovery is complete
756758
* then it's okay to tell dlm to unlock it.
757759
*/
758-
if (unlikely(sdp->sd_log_error) && !gfs2_withdrawn(sdp))
759-
gfs2_withdraw(sdp);
760760
if (glock_blocked_by_withdraw(gl) &&
761761
(target != LM_ST_UNLOCKED ||
762762
test_bit(SDF_WITHDRAW_RECOVERY, &sdp->sd_flags))) {

fs/gfs2/log.c

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1299,17 +1299,6 @@ int gfs2_logd(void *data)
12991299
if (gfs2_withdrawn(sdp))
13001300
break;
13011301

1302-
/* Check for errors writing to the journal */
1303-
if (sdp->sd_log_error) {
1304-
gfs2_lm(sdp,
1305-
"GFS2: fsid=%s: error %d: "
1306-
"withdrawing the file system to "
1307-
"prevent further damage.\n",
1308-
sdp->sd_fsname, sdp->sd_log_error);
1309-
gfs2_withdraw(sdp);
1310-
break;
1311-
}
1312-
13131302
if (gfs2_jrnl_flush_reqd(sdp) || t == 0) {
13141303
gfs2_ail1_empty(sdp, 0);
13151304
gfs2_log_flush(sdp, NULL, GFS2_LOG_HEAD_FLUSH_NORMAL |
@@ -1332,7 +1321,6 @@ int gfs2_logd(void *data)
13321321
test_bit(SDF_FORCE_AIL_FLUSH, &sdp->sd_flags) ||
13331322
gfs2_ail_flush_reqd(sdp) ||
13341323
gfs2_jrnl_flush_reqd(sdp) ||
1335-
sdp->sd_log_error ||
13361324
gfs2_withdrawn(sdp) ||
13371325
kthread_should_stop(),
13381326
t);

0 commit comments

Comments
 (0)