ext4_ext_rm_leaf() may return -EAGAIN due to transaction restart, repeat attempt in that case. Signed-off-by: Dmitry Monakhov <dmonakhov@xxxxxxxxxx> --- fs/ext4/extents.c | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletions(-) diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index 5cce39a..a77cde2 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -3795,7 +3795,7 @@ static int get_implied_cluster_alloc(struct super_block *sb, int ext4_ext_map_blocks(handle_t *handle, struct inode *inode, struct ext4_map_blocks *map, int flags) { - struct ext4_ext_path *path = NULL; + struct ext4_ext_path *path; struct ext4_extent newex, *ex, *ex2; struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); ext4_fsblk_t newblock = 0; @@ -3811,6 +3811,9 @@ int ext4_ext_map_blocks(handle_t *handle, struct inode *inode, map->m_lblk, map->m_len, inode->i_ino); trace_ext4_ext_map_blocks_enter(inode, map->m_lblk, map->m_len, flags); +again: + path = NULL; + /* check in cache */ if (!(flags & EXT4_GET_BLOCKS_PUNCH_OUT_EXT) && ext4_ext_in_cache(inode, map->m_lblk, &newex)) { @@ -3904,6 +3907,8 @@ int ext4_ext_map_blocks(handle_t *handle, struct inode *inode, } ret = ext4_ext_handle_punched_extent(handle, inode, map, path); + if (ret == -EAGAIN) + goto again; return ret; } } -- 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html