提交 ad36cedd 编写于 作者: Z Zhihao Cheng 提交者: openeuler-sync-bot

ext4: Add debug message to notify user space is out of free

hulk inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I7CBCS
CVE: NA

--------------------------------

Add debug message to notify user that ext4_writepages is stuck in loop
caused by ENOSPC.
Signed-off-by: NZhihao Cheng <chengzhihao1@huawei.com>
(cherry picked from commit 4ae7e703)
上级 b42d3e12
...@@ -2696,6 +2696,9 @@ static int ext4_writepages(struct address_space *mapping, ...@@ -2696,6 +2696,9 @@ static int ext4_writepages(struct address_space *mapping,
struct ext4_sb_info *sbi = EXT4_SB(mapping->host->i_sb); struct ext4_sb_info *sbi = EXT4_SB(mapping->host->i_sb);
struct blk_plug plug; struct blk_plug plug;
bool give_up_on_write = false; bool give_up_on_write = false;
unsigned long retry_warn_ddl = 0;
#define RETRY_WARN_TIMEOUT (30 * HZ)
if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
return -EIO; return -EIO;
...@@ -2877,6 +2880,15 @@ static int ext4_writepages(struct address_space *mapping, ...@@ -2877,6 +2880,15 @@ static int ext4_writepages(struct address_space *mapping,
mpd.io_submit.io_end = NULL; mpd.io_submit.io_end = NULL;
if (ret == -ENOSPC && sbi->s_journal) { if (ret == -ENOSPC && sbi->s_journal) {
if (!retry_warn_ddl) {
retry_warn_ddl = jiffies + RETRY_WARN_TIMEOUT;
} else if (time_after(jiffies, retry_warn_ddl)) {
retry_warn_ddl = jiffies + RETRY_WARN_TIMEOUT;
ext4_warning(inode->i_sb, "There are no free blocks available for writing pages, total free %llu, pending free %u, please delete big files to free space",
ext4_count_free_clusters(inode->i_sb),
sbi->s_mb_free_pending);
}
/* /*
* Commit the transaction which would * Commit the transaction which would
* free blocks released in the transaction * free blocks released in the transaction
...@@ -2885,6 +2897,8 @@ static int ext4_writepages(struct address_space *mapping, ...@@ -2885,6 +2897,8 @@ static int ext4_writepages(struct address_space *mapping,
jbd2_journal_force_commit_nested(sbi->s_journal); jbd2_journal_force_commit_nested(sbi->s_journal);
ret = 0; ret = 0;
continue; continue;
} else {
retry_warn_ddl = 0;
} }
/* Fatal error - ENOMEM, EIO... */ /* Fatal error - ENOMEM, EIO... */
if (ret) if (ret)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册