lkml.org 
[lkml]   [2017]   [May]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 14/28] ext4: fix ext4_xattr_make_inode_space() value size calculation
    Date
    ext4_xattr_make_inode_space() is interested in calculating the inline
    space used in an inode. When a xattr entry refers to an external inode
    the value size indicates the external inode size, not the value size in
    the inline area. Change the function to take this into account.

    Signed-off-by: Tahsin Erdogan <tahsin@google.com>
    ---
    fs/ext4/xattr.c | 13 ++++++++-----
    1 file changed, 8 insertions(+), 5 deletions(-)

    diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
    index 681a9b5eefd8..6a6bee246873 100644
    --- a/fs/ext4/xattr.c
    +++ b/fs/ext4/xattr.c
    @@ -1747,9 +1747,10 @@ static int ext4_xattr_make_inode_space(handle_t *handle, struct inode *inode,
    last = IFIRST(header);
    /* Find the entry best suited to be pushed into EA block */
    for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
    - total_size =
    - EXT4_XATTR_SIZE(le32_to_cpu(last->e_value_size)) +
    - EXT4_XATTR_LEN(last->e_name_len);
    + total_size = EXT4_XATTR_LEN(last->e_name_len);
    + if (!last->e_value_inum)
    + total_size += EXT4_XATTR_SIZE(
    + le32_to_cpu(last->e_value_size));
    if (total_size <= bfree &&
    total_size < min_total_size) {
    if (total_size + ifree < isize_diff) {
    @@ -1768,8 +1769,10 @@ static int ext4_xattr_make_inode_space(handle_t *handle, struct inode *inode,
    }

    entry_size = EXT4_XATTR_LEN(entry->e_name_len);
    - total_size = entry_size +
    - EXT4_XATTR_SIZE(le32_to_cpu(entry->e_value_size));
    + total_size = entry_size;
    + if (!entry->e_value_inum)
    + total_size += EXT4_XATTR_SIZE(
    + le32_to_cpu(entry->e_value_size));
    error = ext4_xattr_move_to_block(handle, inode, raw_inode,
    entry);
    if (error)
    --
    2.13.0.219.gdb65acc882-goog
    \
     
     \ /
      Last update: 2017-05-31 10:23    [W:4.083 / U:0.096 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site