Patchwork [1/5] ext4: Remove restrictive checks for EOFBLOCKS_FL

login
register
mail settings
Submitter Lukas Czerner
Date March 21, 2012, 7:23 a.m.
Message ID <1332314639-22875-1-git-send-email-lczerner@redhat.com>
Download mbox | patch
Permalink /patch/147921/
State Superseded
Headers show

Comments

Lukas Czerner - March 21, 2012, 7:23 a.m.
We are going to remove the EOFBLOCKS_FL flag in the future, so this is
the first part of the removal. We can not remove it entirely just now,
since the e2fsck is still checking for it and it might cause headache to
some people. Instead, remove the restrictive checks now and the rest
later, when the new e2fsck code is out and common enough.

This is also needed because punch hole already breaks the EOFBLOCKS_FL
semantics, so it might cause the some troubles. So simply remove it.

Signed-off-by: Lukas Czerner <lczerner@redhat.com>
---
 fs/ext4/extents.c |   13 ++++++++-----
 fs/ext4/inode.c   |    6 ++----
 2 files changed, 10 insertions(+), 9 deletions(-)
Allison Henderson - March 22, 2012, 12:10 a.m.
On 03/21/2012 12:23 AM, Lukas Czerner wrote:
> We are going to remove the EOFBLOCKS_FL flag in the future, so this is
> the first part of the removal. We can not remove it entirely just now,
> since the e2fsck is still checking for it and it might cause headache to
> some people. Instead, remove the restrictive checks now and the rest
> later, when the new e2fsck code is out and common enough.
>
> This is also needed because punch hole already breaks the EOFBLOCKS_FL
> semantics, so it might cause the some troubles. So simply remove it.
>
> Signed-off-by: Lukas Czerner<lczerner@redhat.com>

Alrighty, I went over your set and it all looks good to me.  Thx Lukas!

Allison Henderson

> ---
>   fs/ext4/extents.c |   13 ++++++++-----
>   fs/ext4/inode.c   |    6 ++----
>   2 files changed, 10 insertions(+), 9 deletions(-)
>
> diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
> index 9e10b82..06b0792 100644
> --- a/fs/ext4/extents.c
> +++ b/fs/ext4/extents.c
> @@ -3291,11 +3291,13 @@ static int check_eofblocks_fl(handle_t *handle, struct inode *inode,
>   	depth = ext_depth(inode);
>   	eh = path[depth].p_hdr;
>
> -	if (unlikely(!eh->eh_entries)) {
> -		EXT4_ERROR_INODE(inode, "eh->eh_entries == 0 and "
> -				 "EOFBLOCKS_FL set");
> -		return -EIO;
> -	}
> +	/*
> +	 * We're going to remove EOFBLOCKS_FL entirely in future so we
> +	 * do not care for this case anymore. Simply remove the flag
> +	 * if there are no extents.
> +	 */
> +	if (unlikely(!eh->eh_entries))
> +		goto out;
>   	last_ex = EXT_LAST_EXTENT(eh);
>   	/*
>   	 * We should clear the EOFBLOCKS_FL flag if we are writing the
> @@ -3319,6 +3321,7 @@ static int check_eofblocks_fl(handle_t *handle, struct inode *inode,
>   	for (i = depth-1; i>= 0; i--)
>   		if (path[i].p_idx != EXT_LAST_INDEX(path[i].p_hdr))
>   			return 0;
> +out:
>   	ext4_clear_inode_flag(inode, EXT4_INODE_EOFBLOCKS);
>   	return ext4_mark_inode_dirty(handle, inode);
>   }
> diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
> index feaa82f..55f5b91 100644
> --- a/fs/ext4/inode.c
> +++ b/fs/ext4/inode.c
> @@ -4152,11 +4152,9 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr)
>   	}
>
>   	if (attr->ia_valid&  ATTR_SIZE) {
> -		if (attr->ia_size != i_size_read(inode)) {
> +		if (attr->ia_size != i_size_read(inode))
>   			truncate_setsize(inode, attr->ia_size);
> -			ext4_truncate(inode);
> -		} else if (ext4_test_inode_flag(inode, EXT4_INODE_EOFBLOCKS))
> -			ext4_truncate(inode);
> +		ext4_truncate(inode);
>   	}
>
>   	if (!rc) {

--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index 9e10b82..06b0792 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -3291,11 +3291,13 @@  static int check_eofblocks_fl(handle_t *handle, struct inode *inode,
 	depth = ext_depth(inode);
 	eh = path[depth].p_hdr;
 
-	if (unlikely(!eh->eh_entries)) {
-		EXT4_ERROR_INODE(inode, "eh->eh_entries == 0 and "
-				 "EOFBLOCKS_FL set");
-		return -EIO;
-	}
+	/*
+	 * We're going to remove EOFBLOCKS_FL entirely in future so we
+	 * do not care for this case anymore. Simply remove the flag
+	 * if there are no extents.
+	 */
+	if (unlikely(!eh->eh_entries))
+		goto out;
 	last_ex = EXT_LAST_EXTENT(eh);
 	/*
 	 * We should clear the EOFBLOCKS_FL flag if we are writing the
@@ -3319,6 +3321,7 @@  static int check_eofblocks_fl(handle_t *handle, struct inode *inode,
 	for (i = depth-1; i >= 0; i--)
 		if (path[i].p_idx != EXT_LAST_INDEX(path[i].p_hdr))
 			return 0;
+out:
 	ext4_clear_inode_flag(inode, EXT4_INODE_EOFBLOCKS);
 	return ext4_mark_inode_dirty(handle, inode);
 }
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index feaa82f..55f5b91 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -4152,11 +4152,9 @@  int ext4_setattr(struct dentry *dentry, struct iattr *attr)
 	}
 
 	if (attr->ia_valid & ATTR_SIZE) {
-		if (attr->ia_size != i_size_read(inode)) {
+		if (attr->ia_size != i_size_read(inode))
 			truncate_setsize(inode, attr->ia_size);
-			ext4_truncate(inode);
-		} else if (ext4_test_inode_flag(inode, EXT4_INODE_EOFBLOCKS))
-			ext4_truncate(inode);
+		ext4_truncate(inode);
 	}
 
 	if (!rc) {