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[51/90] ext4: retry failed direct IO allocations
    2.6.31-stable review patch.  If anyone has any objections, please let us know.

    ------------------
    (cherry picked from commit fbbf69456619de5d251cb9f1df609069178c62d5)

    On a 256M filesystem, doing this in a loop:

    xfs_io -F -f -d -c 'pwrite 0 64m' test
    rm -f test

    eventually leads to ENOSPC. (the xfs_io command does a
    64m direct IO write to the file "test")

    As with other block allocation callers, it looks like we need to
    potentially retry the allocations on the initial ENOSPC.

    Signed-off-by: Eric Sandeen <sandeen@redhat.com>
    Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
    ---
    fs/ext4/inode.c | 4 ++++
    1 file changed, 4 insertions(+)

    --- a/fs/ext4/inode.c
    +++ b/fs/ext4/inode.c
    @@ -3372,6 +3372,7 @@ static ssize_t ext4_ind_direct_IO(int rw
    ssize_t ret;
    int orphan = 0;
    size_t count = iov_length(iov, nr_segs);
    + int retries = 0;

    if (rw == WRITE) {
    loff_t final_size = offset + count;
    @@ -3394,9 +3395,12 @@ static ssize_t ext4_ind_direct_IO(int rw
    }
    }

    +retry:
    ret = blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov,
    offset, nr_segs,
    ext4_get_block, NULL);
    + if (ret == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries))
    + goto retry;

    if (orphan) {
    int err;



    \
     
     \ /
      Last update: 2009-12-11 05:55    [W:0.021 / U:32.340 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site