lkml.org 
[lkml]   [2019]   [Jan]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 50/51] ext4: fix a potential fiemap/page fault deadlock w/ inline_data
    Date
    4.4-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Theodore Ts'o <tytso@mit.edu>

    commit 2b08b1f12cd664dc7d5c84ead9ff25ae97ad5491 upstream.

    The ext4_inline_data_fiemap() function calls fiemap_fill_next_extent()
    while still holding the xattr semaphore. This is not necessary and it
    triggers a circular lockdep warning. This is because
    fiemap_fill_next_extent() could trigger a page fault when it writes
    into page which triggers a page fault. If that page is mmaped from
    the inline file in question, this could very well result in a
    deadlock.

    This problem can be reproduced using generic/519 with a file system
    configuration which has the inline_data feature enabled.

    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/ext4/inline.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    --- a/fs/ext4/inline.c
    +++ b/fs/ext4/inline.c
    @@ -1861,12 +1861,12 @@ int ext4_inline_data_fiemap(struct inode
    physical += (char *)ext4_raw_inode(&iloc) - iloc.bh->b_data;
    physical += offsetof(struct ext4_inode, i_block);

    - if (physical)
    - error = fiemap_fill_next_extent(fieinfo, start, physical,
    - inline_len, flags);
    brelse(iloc.bh);
    out:
    up_read(&EXT4_I(inode)->xattr_sem);
    + if (physical)
    + error = fiemap_fill_next_extent(fieinfo, start, physical,
    + inline_len, flags);
    return (error < 0 ? error : 0);
    }


    \
     
     \ /
      Last update: 2019-01-15 18:00    [W:4.988 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site