提交 afcff5d8 编写于 作者: L Lukas Czerner 提交者: Theodore Ts'o

ext4: remove restrictive checks for EOFBLOCKS_FL

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: NLukas Czerner <lczerner@redhat.com>
Signed-off-by: N"Theodore Ts'o" <tytso@mit.edu>
上级 a7967f05
...@@ -3293,11 +3293,13 @@ static int check_eofblocks_fl(handle_t *handle, struct inode *inode, ...@@ -3293,11 +3293,13 @@ static int check_eofblocks_fl(handle_t *handle, struct inode *inode,
depth = ext_depth(inode); depth = ext_depth(inode);
eh = path[depth].p_hdr; eh = path[depth].p_hdr;
if (unlikely(!eh->eh_entries)) { /*
EXT4_ERROR_INODE(inode, "eh->eh_entries == 0 and " * We're going to remove EOFBLOCKS_FL entirely in future so we
"EOFBLOCKS_FL set"); * do not care for this case anymore. Simply remove the flag
return -EIO; * if there are no extents.
} */
if (unlikely(!eh->eh_entries))
goto out;
last_ex = EXT_LAST_EXTENT(eh); last_ex = EXT_LAST_EXTENT(eh);
/* /*
* We should clear the EOFBLOCKS_FL flag if we are writing the * We should clear the EOFBLOCKS_FL flag if we are writing the
...@@ -3321,6 +3323,7 @@ static int check_eofblocks_fl(handle_t *handle, struct inode *inode, ...@@ -3321,6 +3323,7 @@ static int check_eofblocks_fl(handle_t *handle, struct inode *inode,
for (i = depth-1; i >= 0; i--) for (i = depth-1; i >= 0; i--)
if (path[i].p_idx != EXT_LAST_INDEX(path[i].p_hdr)) if (path[i].p_idx != EXT_LAST_INDEX(path[i].p_hdr))
return 0; return 0;
out:
ext4_clear_inode_flag(inode, EXT4_INODE_EOFBLOCKS); ext4_clear_inode_flag(inode, EXT4_INODE_EOFBLOCKS);
return ext4_mark_inode_dirty(handle, inode); return ext4_mark_inode_dirty(handle, inode);
} }
......
...@@ -4163,11 +4163,9 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr) ...@@ -4163,11 +4163,9 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr)
} }
if (attr->ia_valid & ATTR_SIZE) { 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); truncate_setsize(inode, attr->ia_size);
ext4_truncate(inode); ext4_truncate(inode);
} else if (ext4_test_inode_flag(inode, EXT4_INODE_EOFBLOCKS))
ext4_truncate(inode);
} }
if (!rc) { if (!rc) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册