mbox series

[v14,0/7] btrfs: add send/receive support for reading/writing compressed data

Message ID cover.1647537027.git.osandov@fb.com (mailing list archive)
Headers show
Series btrfs: add send/receive support for reading/writing compressed data | expand

Message

Omar Sandoval March 17, 2022, 5:25 p.m. UTC
From: Omar Sandoval <osandov@fb.com>

This series adds support for sending compressed data via Btrfs send and
btrfs-progs support for sending/receiving compressed data and writing it
with BTRFS_IOC_ENCODED_WRITE, which was previously merged into
misc-next. See the previous posting for more details and benchmarks [1].

Patches 1 and 2 are cleanups for Btrfs send. Patches 3-5 prepare some
protocol changes for send stream v2. Patch 6 implements compressed send.
Patch 7 enables send stream v2 and compressed send in the send ioctl
when requested.

Changes since v13 [2]:

- Rebased on latest misc-next branch.
- Dropped ioctl patches which are already in misc-next.

1: https://lore.kernel.org/linux-btrfs/cover.1615922753.git.osandov@fb.com/
2: https://lore.kernel.org/linux-btrfs/cover.1644519257.git.osandov@fb.com/

Omar Sandoval (7):
  btrfs: send: remove unused send_ctx::{total,cmd}_send_size
  btrfs: send: explicitly number commands and attributes
  btrfs: add send stream v2 definitions
  btrfs: send: write larger chunks when using stream v2
  btrfs: send: allocate send buffer with alloc_page() and vmap() for v2
  btrfs: send: send compressed extents with encoded writes
  btrfs: send: enable support for stream v2 and compressed writes

 fs/btrfs/ctree.h           |   6 +
 fs/btrfs/inode.c           |  13 +-
 fs/btrfs/send.c            | 324 +++++++++++++++++++++++++++++++++----
 fs/btrfs/send.h            | 142 +++++++++-------
 include/uapi/linux/btrfs.h |  10 +-
 5 files changed, 395 insertions(+), 100 deletions(-)

The btrfs-progs patches were written by Boris Burkov with some updates
from me. Patches 1-4 are preparation. Patch 5 implements encoded writes.
Patch 6 implements the fallback to decompressing. Patches 7 and 8
implement the other commands. Patch 9 adds the new `btrfs send` options.
Patch 10 adds a test case.

Changes since v13:

- Rebased on latest devel branch.
- Updated the btrfs_ioctl_encoded_io_args definition to the version that
  was merged into misc-next.

Boris Burkov (8):
  btrfs-progs: receive: support v2 send stream larger tlv_len
  btrfs-progs: receive: dynamically allocate sctx->read_buf
  btrfs-progs: receive: support v2 send stream DATA tlv format
  btrfs-progs: receive: process encoded_write commands
  btrfs-progs: receive: encoded_write fallback to explicit decode and
    write
  btrfs-progs: receive: process fallocate commands
  btrfs-progs: receive: process setflags ioctl commands
  btrfs-progs: receive: add tests for basic encoded_write send/receive

Omar Sandoval (2):
  btrfs-progs: receive: add send stream v2 cmds and attrs to send.h
  btrfs-progs: send: stream v2 ioctl flags

 Documentation/btrfs-receive.rst               |   5 +
 Documentation/btrfs-send.rst                  |  22 ++
 cmds/receive-dump.c                           |  31 +-
 cmds/receive.c                                | 347 +++++++++++++++++-
 cmds/send.c                                   | 100 ++++-
 common/send-stream.c                          | 165 +++++++--
 common/send-stream.h                          |   7 +
 ioctl.h                                       | 151 +++++++-
 kernel-shared/send.h                          | 146 +++++---
 libbtrfs/send-stream.c                        |   2 +-
 .../052-receive-write-encoded/test.sh         | 114 ++++++
 11 files changed, 993 insertions(+), 97 deletions(-)
 create mode 100755 tests/misc-tests/052-receive-write-encoded/test.sh

Comments

Sweet Tea Dorminy March 24, 2022, 5:53 p.m. UTC | #1
For the 7 kernel patches:
Reviewed-by: Sweet Tea Dorminy <sweettea-kernel@dorminy.me>

On 3/17/22 13:25, Omar Sandoval wrote:
> From: Omar Sandoval <osandov@fb.com>
> 
> This series adds support for sending compressed data via Btrfs send and
> btrfs-progs support for sending/receiving compressed data and writing it
> with BTRFS_IOC_ENCODED_WRITE, which was previously merged into
> misc-next. See the previous posting for more details and benchmarks [1].
> 
> Patches 1 and 2 are cleanups for Btrfs send. Patches 3-5 prepare some
> protocol changes for send stream v2. Patch 6 implements compressed send.
> Patch 7 enables send stream v2 and compressed send in the send ioctl
> when requested.
> 
> Changes since v13 [2]:
> 
> - Rebased on latest misc-next branch.
> - Dropped ioctl patches which are already in misc-next.
> 
> 1: https://lore.kernel.org/linux-btrfs/cover.1615922753.git.osandov@fb.com/
> 2: https://lore.kernel.org/linux-btrfs/cover.1644519257.git.osandov@fb.com/
> 
> Omar Sandoval (7):
>    btrfs: send: remove unused send_ctx::{total,cmd}_send_size
>    btrfs: send: explicitly number commands and attributes
>    btrfs: add send stream v2 definitions
>    btrfs: send: write larger chunks when using stream v2
>    btrfs: send: allocate send buffer with alloc_page() and vmap() for v2
>    btrfs: send: send compressed extents with encoded writes
>    btrfs: send: enable support for stream v2 and compressed writes
> 
>   fs/btrfs/ctree.h           |   6 +
>   fs/btrfs/inode.c           |  13 +-
>   fs/btrfs/send.c            | 324 +++++++++++++++++++++++++++++++++----
>   fs/btrfs/send.h            | 142 +++++++++-------
>   include/uapi/linux/btrfs.h |  10 +-
>   5 files changed, 395 insertions(+), 100 deletions(-)
> 
> The btrfs-progs patches were written by Boris Burkov with some updates
> from me. Patches 1-4 are preparation. Patch 5 implements encoded writes.
> Patch 6 implements the fallback to decompressing. Patches 7 and 8
> implement the other commands. Patch 9 adds the new `btrfs send` options.
> Patch 10 adds a test case.
> 
> Changes since v13:
> 
> - Rebased on latest devel branch.
> - Updated the btrfs_ioctl_encoded_io_args definition to the version that
>    was merged into misc-next.
> 
> Boris Burkov (8):
>    btrfs-progs: receive: support v2 send stream larger tlv_len
>    btrfs-progs: receive: dynamically allocate sctx->read_buf
>    btrfs-progs: receive: support v2 send stream DATA tlv format
>    btrfs-progs: receive: process encoded_write commands
>    btrfs-progs: receive: encoded_write fallback to explicit decode and
>      write
>    btrfs-progs: receive: process fallocate commands
>    btrfs-progs: receive: process setflags ioctl commands
>    btrfs-progs: receive: add tests for basic encoded_write send/receive
> 
> Omar Sandoval (2):
>    btrfs-progs: receive: add send stream v2 cmds and attrs to send.h
>    btrfs-progs: send: stream v2 ioctl flags
> 
>   Documentation/btrfs-receive.rst               |   5 +
>   Documentation/btrfs-send.rst                  |  22 ++
>   cmds/receive-dump.c                           |  31 +-
>   cmds/receive.c                                | 347 +++++++++++++++++-
>   cmds/send.c                                   | 100 ++++-
>   common/send-stream.c                          | 165 +++++++--
>   common/send-stream.h                          |   7 +
>   ioctl.h                                       | 151 +++++++-
>   kernel-shared/send.h                          | 146 +++++---
>   libbtrfs/send-stream.c                        |   2 +-
>   .../052-receive-write-encoded/test.sh         | 114 ++++++
>   11 files changed, 993 insertions(+), 97 deletions(-)
>   create mode 100755 tests/misc-tests/052-receive-write-encoded/test.sh
>