Patch "ext4: do not polute the extents cache while shifting extents" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
ext4: do not polute the extents cache while shifting extents
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
ext4-do-not-polute-the-extents-cache-while-shifting-extents.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
03e916fa8b5577d85471452a3d0c5738aa658daeMon Sep 17 00:00:00 2001
From: Roman Pen <[email protected]>
Date: Sun, 8 Jan 2017 21:00:35 -0500
Subject: ext4: do not polute the extents cache while shifting extents
From: Roman Pen <[email protected]>
commit 03e916fa8b5577d85471452a3d0c5738aa658dae upstream.
Inside ext4_ext_shift_extents() function ext4_find_extent() is called without EXT4_EX_NOCACHE flag, which should prevent cache population.
This leads to oudated offsets in the extents tree and wrong blocks afterwards.
Patch fixes the problem providing EXT4_EX_NOCACHE flag for each ext4_find_extents() call inside ext4_ext_shift_extents function.
--- fs/ext4/extents.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
fs/ext4/extents.c +6 -3
@@ -5344,7 +5344,8 @@ ext4_ext_shift_extents(struct inode *inoext4_lblk_t stop, *iterator, ex_start, ex_end;/* Let path point to the last extent */ - path =ext4_find_extent (inode,EXT_MAX_BLOCKS -1 ,NULL ,0 ); + path =ext4_find_extent (inode,EXT_MAX_BLOCKS -1 ,NULL , +EXT4_EX_NOCACHE );if (IS_ERR (path))return PTR_ERR (path);
@@ -5360,7 +5361,8 @@ ext4_ext_shift_extents(struct inode *ino* sure the hole is big enough to accommodate the shift. */ if (SHIFT ==SHIFT_LEFT ) { - path =ext4_find_extent (inode, start -1 , &path,0 ); + path =ext4_find_extent (inode, start -1 , &path, +EXT4_EX_NOCACHE );if (IS_ERR (path))return PTR_ERR (path); depth = path->p_depth;
@@ -5398,7 +5400,8 @@ ext4_ext_shift_extents(struct inode *ino* becomes NULL to indicate the end of the loop. */ while (iterator && start <= stop) { - path =ext4_find_extent (inode, *iterator, &path,0 ); + path =ext4_find_extent (inode, *iterator, &path, +EXT4_EX_NOCACHE );if (IS_ERR (path))return PTR_ERR (path); depth = path->p_depth;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/ext4-include-forgotten-start-block-on-fallocate-insert-range.patch queue-4.9/ext4-do-not-polute-the-extents-cache-while-shifting-extents.patch