Unverified Commit 14ae8982 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!1331 [sync] PR-1314: ext4: Stop trying writing pages if no free blocks generated

parents 3cb64cbb b02515a3
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -700,6 +700,7 @@ enum {
#define EXT4_FREE_BLOCKS_NOFREE_FIRST_CLUSTER	0x0010
#define EXT4_FREE_BLOCKS_NOFREE_LAST_CLUSTER	0x0020
#define EXT4_FREE_BLOCKS_RERESERVE_CLUSTER      0x0040
#define EXT4_FREE_BLOCKS_DONT_WAIT_JOURNAL      0x0080

/*
 * ioctl commands
+3 −1
Original line number Diff line number Diff line
@@ -1294,7 +1294,8 @@ static int ext4_ext_split(handle_t *handle, struct inode *inode,
			if (!ablocks[i])
				continue;
			ext4_free_blocks(handle, inode, NULL, ablocks[i], 1,
					 EXT4_FREE_BLOCKS_METADATA);
					 EXT4_FREE_BLOCKS_METADATA |
					 EXT4_FREE_BLOCKS_DONT_WAIT_JOURNAL);
		}
	}
	kfree(ablocks);
@@ -4329,6 +4330,7 @@ int ext4_ext_map_blocks(handle_t *handle, struct inode *inode,
			ext4_discard_preallocations(inode, 0);
			if (flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE)
				fb_flags = EXT4_FREE_BLOCKS_NO_QUOT_UPDATE;
			fb_flags |= EXT4_FREE_BLOCKS_DONT_WAIT_JOURNAL;
			ext4_free_blocks(handle, inode, NULL, newblock,
					 EXT4_C2B(sbi, allocated_clusters),
					 fb_flags);
+1 −1
Original line number Diff line number Diff line
@@ -2465,7 +2465,7 @@ static int mpage_map_and_submit_extent(handle_t *handle,
			 * is non-zero, a commit should free up blocks.
			 */
			if ((err == -ENOMEM) ||
			    (err == -ENOSPC && ext4_count_free_clusters(sb))) {
			    (err == -ENOSPC && EXT4_SB(sb)->s_mb_free_pending)) {
				if (progress)
					goto update_disksize;
				return err;
+3 −2
Original line number Diff line number Diff line
@@ -5496,8 +5496,9 @@ void ext4_free_blocks(handle_t *handle, struct inode *inode,
	 * consistency guarantees.
	 */
	if (ext4_handle_valid(handle) &&
	    ((flags & EXT4_FREE_BLOCKS_METADATA) ||
	     !ext4_should_writeback_data(inode))) {
	    (((flags & EXT4_FREE_BLOCKS_METADATA) ||
	     !ext4_should_writeback_data(inode)) &&
	     !(flags & EXT4_FREE_BLOCKS_DONT_WAIT_JOURNAL))) {
		struct ext4_free_data *new_entry;
		/*
		 * We use __GFP_NOFAIL because ext4_free_blocks() is not allowed