| From 292db1bc6c105d86111e858859456bcb11f90f91 Mon Sep 17 00:00:00 2001 |
| From: "Darrick J. Wong" <darrick.wong@oracle.com> |
| Date: Sun, 21 Jun 2015 21:10:51 -0400 |
| Subject: ext4: don't retry file block mapping on bigalloc fs with non-extent file |
| |
| From: "Darrick J. Wong" <darrick.wong@oracle.com> |
| |
| commit 292db1bc6c105d86111e858859456bcb11f90f91 upstream. |
| |
| ext4 isn't willing to map clusters to a non-extent file. Don't signal |
| this with an out of space error, since the FS will retry the |
| allocation (which didn't fail) forever. Instead, return EUCLEAN so |
| that the operation will fail immediately all the way back to userspace. |
| |
| (The fix is either to run e2fsck -E bmap2extent, or to chattr +e the file.) |
| |
| Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> |
| Signed-off-by: Theodore Ts'o <tytso@mit.edu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/ext4/indirect.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/fs/ext4/indirect.c |
| +++ b/fs/ext4/indirect.c |
| @@ -577,7 +577,7 @@ int ext4_ind_map_blocks(handle_t *handle |
| EXT4_FEATURE_RO_COMPAT_BIGALLOC)) { |
| EXT4_ERROR_INODE(inode, "Can't allocate blocks for " |
| "non-extent mapped inodes with bigalloc"); |
| - return -ENOSPC; |
| + return -EUCLEAN; |
| } |
| |
| goal = ext4_find_goal(inode, map->m_lblk, partial); |