lkml.org 
[lkml]   [2009]   [Dec]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[15/90] ext4: Restore wbc->range_start in ext4_da_writepages()
    2.6.31-stable review patch.  If anyone has any objections, please let us know.

    ------------------
    (cherry picked from commit de89de6e0cf4b1eb13f27137cf2aa40d287aabdf)

    To solve a lock inversion problem, we implement part of the
    range_cyclic algorithm in ext4_da_writepages(). (See commit 2acf2c26
    for more details.)

    As part of that change wbc->range_start was modified by ext4's
    writepages function, which causes its callers to get confused since
    they aren't expecting the filesystem to modify it. The simplest fix
    is to save and restore wbc->range_start in ext4_da_writepages.

    Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
    ---
    fs/ext4/inode.c | 2 ++
    1 file changed, 2 insertions(+)

    --- a/fs/ext4/inode.c
    +++ b/fs/ext4/inode.c
    @@ -2750,6 +2750,7 @@ static int ext4_da_writepages(struct add
    long pages_skipped;
    int range_cyclic, cycled = 1, io_done = 0;
    int needed_blocks, ret = 0, nr_to_writebump = 0;
    + loff_t range_start = wbc->range_start;
    struct ext4_sb_info *sbi = EXT4_SB(mapping->host->i_sb);

    trace_ext4_da_writepages(inode, wbc);
    @@ -2918,6 +2919,7 @@ out_writepages:
    if (!no_nrwrite_index_update)
    wbc->no_nrwrite_index_update = 0;
    wbc->nr_to_write -= nr_to_writebump;
    + wbc->range_start = range_start;
    trace_ext4_da_writepages_result(inode, wbc, ret, pages_written);
    return ret;
    }



    \
     
     \ /
      Last update: 2009-12-11 05:53    [W:4.223 / U:0.188 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site