mirror of https://gitee.com/openkylin/linux.git
gfs2: slow the deluge of io error messages
When an io error is hit, it calls gfs2_io_error_bh_i for every journal buffer it can't write. Since we changed gfs2_io_error_bh_i recently to withdraw later in the cycle, it sends a flood of errors to the console. This patch checks for the file system already being withdrawn, and if so, doesn't send more messages. It doesn't stop the flood of messages, but it slows it down and keeps it more reasonable. Signed-off-by: Bob Peterson <rpeterso@redhat.com>
This commit is contained in:
parent
4f36cb36c9
commit
b524abcc01
|
@ -623,6 +623,7 @@ enum {
|
|||
SDF_RORECOVERY = 7, /* read only recovery */
|
||||
SDF_SKIP_DLM_UNLOCK = 8,
|
||||
SDF_FORCE_AIL_FLUSH = 9,
|
||||
SDF_AIL1_IO_ERROR = 10,
|
||||
};
|
||||
|
||||
enum gfs2_freeze_state {
|
||||
|
|
|
@ -108,7 +108,9 @@ __acquires(&sdp->sd_ail_lock)
|
|||
gfs2_assert(sdp, bd->bd_tr == tr);
|
||||
|
||||
if (!buffer_busy(bh)) {
|
||||
if (!buffer_uptodate(bh)) {
|
||||
if (!buffer_uptodate(bh) &&
|
||||
!test_and_set_bit(SDF_AIL1_IO_ERROR,
|
||||
&sdp->sd_flags)) {
|
||||
gfs2_io_error_bh(sdp, bh);
|
||||
*withdraw = true;
|
||||
}
|
||||
|
@ -206,7 +208,8 @@ static void gfs2_ail1_empty_one(struct gfs2_sbd *sdp, struct gfs2_trans *tr,
|
|||
gfs2_assert(sdp, bd->bd_tr == tr);
|
||||
if (buffer_busy(bh))
|
||||
continue;
|
||||
if (!buffer_uptodate(bh)) {
|
||||
if (!buffer_uptodate(bh) &&
|
||||
!test_and_set_bit(SDF_AIL1_IO_ERROR, &sdp->sd_flags)) {
|
||||
gfs2_io_error_bh(sdp, bh);
|
||||
*withdraw = true;
|
||||
}
|
||||
|
|
|
@ -259,12 +259,13 @@ void gfs2_io_error_bh_i(struct gfs2_sbd *sdp, struct buffer_head *bh,
|
|||
const char *function, char *file, unsigned int line,
|
||||
bool withdraw)
|
||||
{
|
||||
fs_err(sdp,
|
||||
"fatal: I/O error\n"
|
||||
" block = %llu\n"
|
||||
" function = %s, file = %s, line = %u\n",
|
||||
(unsigned long long)bh->b_blocknr,
|
||||
function, file, line);
|
||||
if (!test_bit(SDF_SHUTDOWN, &sdp->sd_flags))
|
||||
fs_err(sdp,
|
||||
"fatal: I/O error\n"
|
||||
" block = %llu\n"
|
||||
" function = %s, file = %s, line = %u\n",
|
||||
(unsigned long long)bh->b_blocknr,
|
||||
function, file, line);
|
||||
if (withdraw)
|
||||
gfs2_lm_withdraw(sdp, NULL);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue