lkml.org 
[lkml]   [2018]   [Aug]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH 16/17] btrfs: wait existing extents before truncating
    Date
    When truncating a file, file buffers which have already been allocated but
    not yet written may be truncated. Truncating these buffers could cause
    breakage of a sequential write pattern in a block group if the truncated
    blocks are for example followed by blocks allocated to another file. To
    avoid this problem, always wait for write out of all unwritten buffers
    before proceeding with the truncate execution.

    Signed-off-by: Naohiro Aota <naota@elisp.net>
    ---
    fs/btrfs/inode.c | 11 +++++++++++
    1 file changed, 11 insertions(+)

    diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
    index 05f5e05ccf37..d3f35f81834f 100644
    --- a/fs/btrfs/inode.c
    +++ b/fs/btrfs/inode.c
    @@ -5193,6 +5193,17 @@ static int btrfs_setsize(struct inode *inode, struct iattr *attr)
    btrfs_end_write_no_snapshotting(root);
    btrfs_end_transaction(trans);
    } else {
    + struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
    +
    + if (btrfs_fs_incompat(fs_info, HMZONED)) {
    + u64 sectormask = fs_info->sectorsize - 1;
    +
    + ret = btrfs_wait_ordered_range(inode,
    + newsize & (~sectormask),
    + (u64)-1);
    + if (ret)
    + return ret;
    + }

    /*
    * We're truncating a file that used to have good data down to
    --
    2.18.0
    \
     
     \ /
      Last update: 2018-08-09 20:07    [W:8.207 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site