lkml.org 
[lkml]   [2018]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 171/329] Btrfs: send, fix issuing write op when processing hole in no data mode
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

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

    From: Filipe Manana <fdmanana@suse.com>

    [ Upstream commit d4dfc0f4d39475ccbbac947880b5464a74c30b99 ]

    When doing an incremental send of a filesystem with the no-holes feature
    enabled, we end up issuing a write operation when using the no data mode
    send flag, instead of issuing an update extent operation. Fix this by
    issuing the update extent operation instead.

    Trivial reproducer:

    $ mkfs.btrfs -f -O no-holes /dev/sdc
    $ mkfs.btrfs -f /dev/sdd
    $ mount /dev/sdc /mnt/sdc
    $ mount /dev/sdd /mnt/sdd

    $ xfs_io -f -c "pwrite -S 0xab 0 32K" /mnt/sdc/foobar
    $ btrfs subvolume snapshot -r /mnt/sdc /mnt/sdc/snap1

    $ xfs_io -c "fpunch 8K 8K" /mnt/sdc/foobar
    $ btrfs subvolume snapshot -r /mnt/sdc /mnt/sdc/snap2

    $ btrfs send /mnt/sdc/snap1 | btrfs receive /mnt/sdd
    $ btrfs send --no-data -p /mnt/sdc/snap1 /mnt/sdc/snap2 \
    | btrfs receive -vv /mnt/sdd

    Before this change the output of the second receive command is:

    receiving snapshot snap2 uuid=f6922049-8c22-e544-9ff9-fc6755918447...
    utimes
    write foobar, offset 8192, len 8192
    utimes foobar
    BTRFS_IOC_SET_RECEIVED_SUBVOL uuid=f6922049-8c22-e544-9ff9-...

    After this change it is:

    receiving snapshot snap2 uuid=564d36a3-ebc8-7343-aec9-bf6fda278e64...
    utimes
    update_extent foobar: offset=8192, len=8192
    utimes foobar
    BTRFS_IOC_SET_RECEIVED_SUBVOL uuid=564d36a3-ebc8-7343-aec9-bf6fda278e64...

    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    fs/btrfs/send.c | 3 +++
    1 file changed, 3 insertions(+)

    --- a/fs/btrfs/send.c
    +++ b/fs/btrfs/send.c
    @@ -4822,6 +4822,9 @@ static int send_hole(struct send_ctx *sc
    u64 len;
    int ret = 0;

    + if (sctx->flags & BTRFS_SEND_FLAG_NO_FILE_DATA)
    + return send_update_extent(sctx, offset, end - offset);
    +
    p = fs_path_alloc();
    if (!p)
    return -ENOMEM;

    \
     
     \ /
      Last update: 2018-05-28 12:35    [W:2.228 / U:0.760 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site