Re: [PATCH v11 09/10] btrfs-progs: send: stream v2 ioctl flags

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 1.09.21 г. 20:01, Omar Sandoval wrote:
> From: Boris Burkov <boris@xxxxxx>
> 
> To make the btrfs send ioctl use the stream v2 format requires passing
> BTRFS_SEND_FLAG_STREAM_V2 in flags. Further, to cause the ioctl to emit
> encoded_write commands for encoded extents, we must set that flag as
> well as BTRFS_SEND_FLAG_COMPRESSED. Finally, we bump up the version in
> send.h as well, since we are now fully compatible with v2.
> 
> Add two command line arguments to btrfs send: --stream-version and
> --compressed-data. --stream-version requires an argument which it parses
> as an integer and sets STREAM_V2 if the argument is 2. --compressed-data
> does not require an argument and automatically implies STREAM_V2 as well
> (COMPRESSED alone causes the ioctl to error out).
> 
> Some examples to illustrate edge cases:
> 
> // v1, old format and no encoded_writes
> btrfs send subvol
> btrfs send --stream-version 1 subvol
> 
> // v2 and compressed, we will see encoded_writes
> btrfs send --compressed-data subvol
> btrfs send --compressed-data --stream-version 2 subvol
> 
> // v2 only, new format but no encoded_writes
> btrfs send --stream-version 2 subvol
> 
> // error: compressed needs version >= 2
> btrfs send --compressed-data --stream-version 1 subvol
> 
> // error: invalid version (not 1 or 2)
> btrfs send --stream-version 3 subvol
> btrfs send --compressed-data --stream-version 0 subvol
> btrfs send --compressed-data --stream-version 10 subvol


Why would we want to predicate the compressed writes usage on anything
other than the stream version?

> 
> Signed-off-by: Boris Burkov <boris@xxxxxx>
> ---
>  Documentation/btrfs-send.asciidoc | 16 ++++++++-
>  cmds/send.c                       | 54 ++++++++++++++++++++++++++++++-
>  ioctl.h                           | 17 +++++++++-
>  libbtrfsutil/btrfs.h              | 17 +++++++++-
>  send.h                            |  2 +-
>  5 files changed, 101 insertions(+), 5 deletions(-)
> 
> diff --git a/Documentation/btrfs-send.asciidoc b/Documentation/btrfs-send.asciidoc
> index c4a05672..202bcd97 100644
> --- a/Documentation/btrfs-send.asciidoc
> +++ b/Documentation/btrfs-send.asciidoc
> @@ -55,7 +55,21 @@ send in 'NO_FILE_DATA' mode
>  The output stream does not contain any file
>  data and thus cannot be used to transfer changes. This mode is faster and
>  is useful to show the differences in metadata.
> --q|--quiet::::
> +
> +--stream-version <1|2>::
> +Use the given send stream version. The default is 1. Version 2 encodes file
> +data slightly more efficiently; it is also required for sending compressed data
> +directly (see '--compressed-data'). Version 2 requires at least btrfs-progs
> +5.12 on both the sender and receiver and at least Linux 5.12 on the sender.
> +

The version of progs needs to be adjusted but I assume this will be done
by David when this patchset is merged as we don't have a target ATM.

> +--compressed-data::
> +Send data that is compressed on the filesystem directly without decompressing
> +it. If the receiver supports encoded I/O (see `encoded_io`(7)), it can also
> +write it directly without decompressing it. Otherwise, the receiver will fall
> +back to decompressing it and writing it normally. This implies
> +'--stream-version 2'.
> +
> +-q|--quiet::
>  (deprecated) alias for global '-q' option
>  -v|--verbose::
>  (deprecated) alias for global '-v' option
> diff --git a/cmds/send.c b/cmds/send.c
> index 3bfc69f5..80eb2510 100644
> --- a/cmds/send.c
> +++ b/cmds/send.c
> @@ -452,6 +452,21 @@ static const char * const cmd_send_usage[] = {
>  	"                 does not contain any file data and thus cannot be used",
>  	"                 to transfer changes. This mode is faster and useful to",
>  	"                 show the differences in metadata.",
> +	"--stream-version <1|2>",
> +	"                 Use the given send stream version. The default is",
> +	"                 1. Version 2 encodes file data slightly more",
> +	"                 efficiently; it is also required for sending",
> +	"                 compressed data directly (see --compressed-data).",
> +	"                 Version 2 requires at least btrfs-progs 5.12 on both",
> +	"                 the sender and receiver and at least Linux 5.12 on the",
> +	"                 sender.",

Ditto

<snip>



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux