Commit 3bbf8b61 authored by Zhihao Cheng's avatar Zhihao Cheng Committed by openeuler-sync-bot
Browse files

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: default avatarZhihao Cheng <chengzhihao1@huawei.com>
(cherry picked from commit 4ae7e703)
parent 5616fd86
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -2682,6 +2682,9 @@ static int ext4_writepages(struct address_space *mapping,
	struct ext4_sb_info *sbi = EXT4_SB(mapping->host->i_sb);
	struct blk_plug plug;
	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))))
		return -EIO;
@@ -2863,6 +2866,15 @@ static int ext4_writepages(struct address_space *mapping,
		mpd.io_submit.io_end = NULL;

		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
			 * free blocks released in the transaction
@@ -2871,6 +2883,8 @@ static int ext4_writepages(struct address_space *mapping,
			jbd2_journal_force_commit_nested(sbi->s_journal);
			ret = 0;
			continue;
		} else {
			retry_warn_ddl = 0;
		}
		/* Fatal error - ENOMEM, EIO... */
		if (ret)