Josef Bacik
2013-Sep-11 18:18 UTC
[PATCH] Btrfs: drop dir i_size when adding new names on replay
So if we have dir_index items in the log that means we also have the inode item as well, which means that the inode''s i_size is correct. However when we process dir_index''es we call btrfs_add_link() which will increase the directory''s i_size for the new entry. So to fix this just drop the name len size before we call btrfs_add_link() so the i_size ends out properly. Thanks, Signed-off-by: Josef Bacik <jbacik@fusionio.com> --- fs/btrfs/tree-log.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index c91309d..f0d34f5 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -1497,6 +1497,12 @@ static noinline int insert_one_name(struct btrfs_trans_handle *trans, iput(inode); return -EIO; } + /* + * We need to drop the name_len since add_link we re-add the size. If + * we have the dir_index items then we had to have had the inode in the + * log which means we have the correct i_size. + */ + btrfs_i_size_write(dir, dir->i_size - (name_len * 2)); ret = btrfs_add_link(trans, dir, inode, name, name_len, 1, index); /* FIXME, put inode into FIXUP list */ -- 1.7.7.6 -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Josef Bacik
2013-Sep-11 18:56 UTC
Re: [PATCH] Btrfs: drop dir i_size when adding new names on replay
On Wed, Sep 11, 2013 at 02:18:57PM -0400, Josef Bacik wrote:> So if we have dir_index items in the log that means we also have the inode item > as well, which means that the inode''s i_size is correct. However when we > process dir_index''es we call btrfs_add_link() which will increase the > directory''s i_size for the new entry. So to fix this just drop the name len > size before we call btrfs_add_link() so the i_size ends out properly. Thanks, >Ignore this, it isn''t quite right. Thanks, Josef -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html