Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1553083

[PATCH v2 2/2] ext4: Do not populate extents tree with outdated offsets while shifting extents

From Roman Pen <roman.penyaev@profitbricks.com>
Newsgroups linux.kernel
Subject [PATCH v2 2/2] ext4: Do not populate extents tree with outdated offsets while shifting extents
Date 2017-01-06 21:30 +0100
Message-ID <sWJjc-71s-11@gated-at.bofh.it> (permalink)
References <sWJjb-71s-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


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.

Signed-off-by: Roman Pen <roman.penyaev@profitbricks.com>
Cc: Namjae Jeon <namjae.jeon@samsung.com>
Cc: "Theodore Ts'o" <tytso@mit.edu>
Cc: Andreas Dilger <adilger.kernel@dilger.ca>
Cc: linux-ext4@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
---
 fs/ext4/extents.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index 4d3014b5a3f9..2a97dff87b96 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -5334,7 +5334,8 @@ ext4_ext_shift_extents(struct inode *inode, handle_t *handle,
 	ext4_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);
 
@@ -5350,7 +5351,8 @@ ext4_ext_shift_extents(struct inode *inode, handle_t *handle,
 	 * 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;
@@ -5388,7 +5390,8 @@ ext4_ext_shift_extents(struct inode *inode, handle_t *handle,
 	 * 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;
-- 
2.10.2

Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v2 0/2] ext4: fallocate insert/collapse range fixes Roman Pen <roman.penyaev@profitbricks.com> - 2017-01-06 21:30 +0100
  [PATCH v2 2/2] ext4: Do not populate extents tree with outdated offsets while shifting extents Roman Pen <roman.penyaev@profitbricks.com> - 2017-01-06 21:30 +0100
    Re: [PATCH v2 2/2] ext4: Do not populate extents tree with outdated  offsets while shifting extents Theodore Ts'o <tytso@mit.edu> - 2017-01-07 22:30 +0100
      Re: [PATCH v2 2/2] ext4: Do not populate extents tree with outdated  offsets while shifting extents Roman Penyaev <roman.penyaev@profitbricks.com> - 2017-01-09 13:40 +0100

csiph-web