* [PATCH v5 0/2] man-pages: document reflink/dedupe ioctls
@ 2016-03-15 16:48 Darrick J. Wong
2016-03-15 16:48 ` [PATCH 1/2] man2: document FICLONE and FICLONERANGE Darrick J. Wong
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Darrick J. Wong @ 2016-03-15 16:48 UTC (permalink / raw)
To: mtk.manpages, darrick.wong; +Cc: linux-fsdevel, linux-api, hch, linux-man
Hi all,
This patch set goes along with the fifth revision of an RFC adding to
XFS kernel support for tracking reverse-mappings of physical blocks to
file and metadata; and support for mapping multiple file logical
blocks to the same physical block, more commonly known as reflinking.
The two patches in this series document the clone, clone_range, and
dedupe ioctls in the form of man pages.
The patch set is based on a whole pile of proposed patches against the
current (4.5) upstream kernel; the ioctls are simply hoisted version
of the private btrfs ioctls.
Comments and questions are, as always, welcome.
--D
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/2] man2: document FICLONE and FICLONERANGE
2016-03-15 16:48 [PATCH v5 0/2] man-pages: document reflink/dedupe ioctls Darrick J. Wong
@ 2016-03-15 16:48 ` Darrick J. Wong
2016-03-19 17:04 ` walter harms
2016-06-08 10:35 ` Michael Kerrisk (man-pages)
2016-03-15 16:48 ` [PATCH 2/2] man2: document the FIDEDUPERANGE ioctl Darrick J. Wong
2016-03-15 17:04 ` [PATCH v5 0/2] man-pages: document reflink/dedupe ioctls Christoph Hellwig
2 siblings, 2 replies; 10+ messages in thread
From: Darrick J. Wong @ 2016-03-15 16:48 UTC (permalink / raw)
To: mtk.manpages, darrick.wong; +Cc: linux-fsdevel, linux-api, hch, linux-man
Document the FICLONE and FICLONERANGE ioctls, formerly known as the
BTRFS_IOC_CLONE and BTRFS_IOC_CLONE_RANGE ioctls.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
man2/ioctl_ficlone.2 | 1
man2/ioctl_ficlonerange.2 | 124 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 125 insertions(+)
create mode 100644 man2/ioctl_ficlone.2
create mode 100644 man2/ioctl_ficlonerange.2
diff --git a/man2/ioctl_ficlone.2 b/man2/ioctl_ficlone.2
new file mode 100644
index 0000000..19bb348
--- /dev/null
+++ b/man2/ioctl_ficlone.2
@@ -0,0 +1 @@
+.so man2/ioctl_ficlonerange.2
diff --git a/man2/ioctl_ficlonerange.2 b/man2/ioctl_ficlonerange.2
new file mode 100644
index 0000000..c5c72aa
--- /dev/null
+++ b/man2/ioctl_ficlonerange.2
@@ -0,0 +1,124 @@
+.\" Copyright (C) 2016 Oracle. All rights reserved.
+.\"
+.\" %%%LICENSE_START(VERBATIM)
+.\" This program is free software; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation.
+.\"
+.\" This program is distributed in the hope that it would be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public License
+.\" along with this program; if not, write the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+.\" %%%LICENSE_END
+.TH IOCTL-FICLONERANGE 2 2016-02-10 "Linux" "Linux Programmer's Manual"
+.SH NAME
+ioctl_ficlonerange, ioctl_ficlone \- share some the data of one file with another file
+.SH SYNOPSIS
+.br
+.B #include <sys/ioctl.h>
+.br
+.B #include <linux/fs.h>
+.sp
+.BI "int ioctl(int " dest_fd ", FICLONERANGE, struct file_clone_range * " arg );
+.br
+.BI "int ioctl(int " dest_fd ", FICLONE, int " src_fd );
+.SH DESCRIPTION
+If a filesystem supports files sharing physical storage between multiple
+files ("reflink"), this
+.BR ioctl (2)
+system call can be used to make some of the data in the
+.B src_fd
+file appear in the
+.B dest_fd
+file by sharing the underlying storage, which is faster than making a separate
+physical copy of the data. If a file write should occur to a shared region,
+the filesystem must ensure that the changes remain private to the file being
+written. This behavior is commonly referred to as "copy on write".
+
+This ioctl reflinks up to
+.IR src_length
+bytes from file descriptor
+.IR src_fd
+at offset
+.IR src_offset
+into the file
+.IR dest_fd
+at offset
+.IR dest_offset ",
+provided that both are files. This information is conveyed in a structure of
+the following form:
+.in +4n
+.nf
+
+struct file_clone_range {
+ __s64 src_fd;
+ __u64 src_offset;
+ __u64 src_length;
+ __u64 dest_offset;
+};
+
+.fi
+.in
+Clones are atomic with regards to concurrent writes, so no locks need to be
+taken to obtain a consistent cloned copy.
+
+The FICLONE ioctl clones entire files.
+.SH RETURN VALUE
+On error, \-1 is returned, and
+.I errno
+is set to indicate the error.
+.PP
+.SH ERRORS
+Error codes can be one of, but are not limited to, the following:
+.TP
+.B EXDEV
+.IR dest_fd " and " src_fd
+are not on the same mounted filesystem.
+.TP
+.B EISDIR
+One of the files is a directory and the filesystem does not support shared
+regions in directories.
+.TP
+.B EINVAL
+The filesystem does not support reflinking the ranges of the given files. This
+error can also appear if either file descriptor represents a device, fifo, or
+socket. Disk filesystems generally require the offset and length arguments
+to be aligned to the fundamental block size. XFS and btrfs do not support
+overlapping reflink ranges in the same file.
+.TP
+.B EBADF
+.IR src_fd
+is not open for reading;
+.IR dest_fd
+is not open for writing or is open for append-only writes; or the filesystem
+which
+.IR src_fd
+resides on does not support reflink.
+.TP
+.B EPERM
+.IR dest_fd
+is immutable.
+.TP
+.B ETXTBSY
+One of the files is a swap file. Swap files cannot share storage.
+.TP
+.B EOPNOTSUPP
+This can appear if the filesystem does not support reflinking either file
+descriptor.
+.SH NOTES
+Because a copy on write operation requires the allocation of new storage, the
+.B fallocate (2)
+operation may un-share shared blocks to guarantee that subsequent writes will
+not fail because of lack of disk space.
+.SH CONFORMING TO
+This API is Linux-specific. This ioctl was previously known as
+.B BTRFS_IOC_CLONE_RANGE
+and was private to btrfs.
+.fi
+.in
+.SH SEE ALSO
+.BR ioctl (2)
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] man2: document FICLONE and FICLONERANGE
2016-03-15 16:48 ` [PATCH 1/2] man2: document FICLONE and FICLONERANGE Darrick J. Wong
@ 2016-03-19 17:04 ` walter harms
2016-03-20 19:13 ` Darrick J. Wong
2016-06-08 10:35 ` Michael Kerrisk (man-pages)
1 sibling, 1 reply; 10+ messages in thread
From: walter harms @ 2016-03-19 17:04 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: mtk.manpages, linux-fsdevel, linux-api, linux-man
hi,
i tried to understand the man page and had some problems
(maybe because i am not an FS expert)
So far i understand the use case is to make a virtual copy
of a file (or range). but it works only on the same fs.
reading this:
https://lwn.net/Articles/331576/
I got the impression there is already a syscall ?
Since when is this function available ?
Perhaps you can add a simple use case so readers get a better
idea how/why to use this ?
just my 2 cents,
re,
wh
Am 15.03.2016 17:48, schrieb Darrick J. Wong:
> Document the FICLONE and FICLONERANGE ioctls, formerly known as the
> BTRFS_IOC_CLONE and BTRFS_IOC_CLONE_RANGE ioctls.
>
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---
> man2/ioctl_ficlone.2 | 1
> man2/ioctl_ficlonerange.2 | 124 +++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 125 insertions(+)
> create mode 100644 man2/ioctl_ficlone.2
> create mode 100644 man2/ioctl_ficlonerange.2
>
>
> diff --git a/man2/ioctl_ficlone.2 b/man2/ioctl_ficlone.2
> new file mode 100644
> index 0000000..19bb348
> --- /dev/null
> +++ b/man2/ioctl_ficlone.2
> @@ -0,0 +1 @@
> +.so man2/ioctl_ficlonerange.2
> diff --git a/man2/ioctl_ficlonerange.2 b/man2/ioctl_ficlonerange.2
> new file mode 100644
> index 0000000..c5c72aa
> --- /dev/null
> +++ b/man2/ioctl_ficlonerange.2
> @@ -0,0 +1,124 @@
> +.\" Copyright (C) 2016 Oracle. All rights reserved.
> +.\"
> +.\" %%%LICENSE_START(VERBATIM)
> +.\" This program is free software; you can redistribute it and/or
> +.\" modify it under the terms of the GNU General Public License as
> +.\" published by the Free Software Foundation.
> +.\"
> +.\" This program is distributed in the hope that it would be useful,
> +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
> +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +.\" GNU General Public License for more details.
> +.\"
> +.\" You should have received a copy of the GNU General Public License
> +.\" along with this program; if not, write the Free Software Foundation,
> +.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
> +.\" %%%LICENSE_END
> +.TH IOCTL-FICLONERANGE 2 2016-02-10 "Linux" "Linux Programmer's Manual"
> +.SH NAME
> +ioctl_ficlonerange, ioctl_ficlone \- share some the data of one file with another file
> +.SH SYNOPSIS
> +.br
> +.B #include <sys/ioctl.h>
> +.br
> +.B #include <linux/fs.h>
> +.sp
> +.BI "int ioctl(int " dest_fd ", FICLONERANGE, struct file_clone_range * " arg );
> +.br
> +.BI "int ioctl(int " dest_fd ", FICLONE, int " src_fd );
> +.SH DESCRIPTION
> +If a filesystem supports files sharing physical storage between multiple
> +files ("reflink"), this
> +.BR ioctl (2)
> +system call can be used to make some of the data in the
> +.B src_fd
> +file appear in the
> +.B dest_fd
> +file by sharing the underlying storage, which is faster than making a separate
> +physical copy of the data. If a file write should occur to a shared region,
> +the filesystem must ensure that the changes remain private to the file being
> +written. This behavior is commonly referred to as "copy on write".
> +
> +This ioctl reflinks up to
> +.IR src_length
> +bytes from file descriptor
> +.IR src_fd
> +at offset
> +.IR src_offset
> +into the file
> +.IR dest_fd
> +at offset
> +.IR dest_offset ",
> +provided that both are files. This information is conveyed in a structure of
> +the following form:
> +.in +4n
> +.nf
> +
> +struct file_clone_range {
> + __s64 src_fd;
> + __u64 src_offset;
> + __u64 src_length;
> + __u64 dest_offset;
> +};
> +
> +.fi
> +.in
> +Clones are atomic with regards to concurrent writes, so no locks need to be
> +taken to obtain a consistent cloned copy.
> +
> +The FICLONE ioctl clones entire files.
> +.SH RETURN VALUE
> +On error, \-1 is returned, and
> +.I errno
> +is set to indicate the error.
> +.PP
> +.SH ERRORS
> +Error codes can be one of, but are not limited to, the following:
> +.TP
> +.B EXDEV
> +.IR dest_fd " and " src_fd
> +are not on the same mounted filesystem.
> +.TP
> +.B EISDIR
> +One of the files is a directory and the filesystem does not support shared
> +regions in directories.
> +.TP
> +.B EINVAL
> +The filesystem does not support reflinking the ranges of the given files. This
> +error can also appear if either file descriptor represents a device, fifo, or
> +socket. Disk filesystems generally require the offset and length arguments
> +to be aligned to the fundamental block size. XFS and btrfs do not support
> +overlapping reflink ranges in the same file.
> +.TP
> +.B EBADF
> +.IR src_fd
> +is not open for reading;
> +.IR dest_fd
> +is not open for writing or is open for append-only writes; or the filesystem
> +which
> +.IR src_fd
> +resides on does not support reflink.
> +.TP
> +.B EPERM
> +.IR dest_fd
> +is immutable.
> +.TP
> +.B ETXTBSY
> +One of the files is a swap file. Swap files cannot share storage.
> +.TP
> +.B EOPNOTSUPP
> +This can appear if the filesystem does not support reflinking either file
> +descriptor.
> +.SH NOTES
> +Because a copy on write operation requires the allocation of new storage, the
> +.B fallocate (2)
> +operation may un-share shared blocks to guarantee that subsequent writes will
> +not fail because of lack of disk space.
> +.SH CONFORMING TO
> +This API is Linux-specific. This ioctl was previously known as
> +.B BTRFS_IOC_CLONE_RANGE
> +and was private to btrfs.
> +.fi
> +.in
> +.SH SEE ALSO
> +.BR ioctl (2)
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-man" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] man2: document FICLONE and FICLONERANGE
2016-03-19 17:04 ` walter harms
@ 2016-03-20 19:13 ` Darrick J. Wong
0 siblings, 0 replies; 10+ messages in thread
From: Darrick J. Wong @ 2016-03-20 19:13 UTC (permalink / raw)
To: walter harms; +Cc: mtk.manpages, linux-fsdevel, linux-api, linux-man
On Sat, Mar 19, 2016 at 06:04:54PM +0100, walter harms wrote:
> hi,
> i tried to understand the man page and had some problems
> (maybe because i am not an FS expert)
>
> So far i understand the use case is to make a virtual copy
> of a file (or range). but it works only on the same fs.
Correct, these ioctls allow files within a filesystem to share some
of the blocks being managed by that filesystem.
I will make that clearer in the manpage.
> reading this:
> https://lwn.net/Articles/331576/
>
> I got the impression there is already a syscall ?
> Since when is this function available ?
It isn't; the reflink syscall became an ocfs2 ioctl and never progressed
beyond that.
> Perhaps you can add a simple use case so readers get a better
> idea how/why to use this ?
cp --reflink is the best known client of this interface, though I've not
mentioned this in the manpage in case they should decide some day to use
something else.
--D
>
> just my 2 cents,
> re,
> wh
>
>
> Am 15.03.2016 17:48, schrieb Darrick J. Wong:
> > Document the FICLONE and FICLONERANGE ioctls, formerly known as the
> > BTRFS_IOC_CLONE and BTRFS_IOC_CLONE_RANGE ioctls.
> >
> > Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> > ---
> > man2/ioctl_ficlone.2 | 1
> > man2/ioctl_ficlonerange.2 | 124 +++++++++++++++++++++++++++++++++++++++++++++
> > 2 files changed, 125 insertions(+)
> > create mode 100644 man2/ioctl_ficlone.2
> > create mode 100644 man2/ioctl_ficlonerange.2
> >
> >
> > diff --git a/man2/ioctl_ficlone.2 b/man2/ioctl_ficlone.2
> > new file mode 100644
> > index 0000000..19bb348
> > --- /dev/null
> > +++ b/man2/ioctl_ficlone.2
> > @@ -0,0 +1 @@
> > +.so man2/ioctl_ficlonerange.2
> > diff --git a/man2/ioctl_ficlonerange.2 b/man2/ioctl_ficlonerange.2
> > new file mode 100644
> > index 0000000..c5c72aa
> > --- /dev/null
> > +++ b/man2/ioctl_ficlonerange.2
> > @@ -0,0 +1,124 @@
> > +.\" Copyright (C) 2016 Oracle. All rights reserved.
> > +.\"
> > +.\" %%%LICENSE_START(VERBATIM)
> > +.\" This program is free software; you can redistribute it and/or
> > +.\" modify it under the terms of the GNU General Public License as
> > +.\" published by the Free Software Foundation.
> > +.\"
> > +.\" This program is distributed in the hope that it would be useful,
> > +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
> > +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> > +.\" GNU General Public License for more details.
> > +.\"
> > +.\" You should have received a copy of the GNU General Public License
> > +.\" along with this program; if not, write the Free Software Foundation,
> > +.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
> > +.\" %%%LICENSE_END
> > +.TH IOCTL-FICLONERANGE 2 2016-02-10 "Linux" "Linux Programmer's Manual"
> > +.SH NAME
> > +ioctl_ficlonerange, ioctl_ficlone \- share some the data of one file with another file
> > +.SH SYNOPSIS
> > +.br
> > +.B #include <sys/ioctl.h>
> > +.br
> > +.B #include <linux/fs.h>
> > +.sp
> > +.BI "int ioctl(int " dest_fd ", FICLONERANGE, struct file_clone_range * " arg );
> > +.br
> > +.BI "int ioctl(int " dest_fd ", FICLONE, int " src_fd );
> > +.SH DESCRIPTION
> > +If a filesystem supports files sharing physical storage between multiple
> > +files ("reflink"), this
> > +.BR ioctl (2)
> > +system call can be used to make some of the data in the
> > +.B src_fd
> > +file appear in the
> > +.B dest_fd
> > +file by sharing the underlying storage, which is faster than making a separate
> > +physical copy of the data. If a file write should occur to a shared region,
> > +the filesystem must ensure that the changes remain private to the file being
> > +written. This behavior is commonly referred to as "copy on write".
> > +
> > +This ioctl reflinks up to
> > +.IR src_length
> > +bytes from file descriptor
> > +.IR src_fd
> > +at offset
> > +.IR src_offset
> > +into the file
> > +.IR dest_fd
> > +at offset
> > +.IR dest_offset ",
> > +provided that both are files. This information is conveyed in a structure of
> > +the following form:
> > +.in +4n
> > +.nf
> > +
> > +struct file_clone_range {
> > + __s64 src_fd;
> > + __u64 src_offset;
> > + __u64 src_length;
> > + __u64 dest_offset;
> > +};
> > +
> > +.fi
> > +.in
> > +Clones are atomic with regards to concurrent writes, so no locks need to be
> > +taken to obtain a consistent cloned copy.
> > +
> > +The FICLONE ioctl clones entire files.
> > +.SH RETURN VALUE
> > +On error, \-1 is returned, and
> > +.I errno
> > +is set to indicate the error.
> > +.PP
> > +.SH ERRORS
> > +Error codes can be one of, but are not limited to, the following:
> > +.TP
> > +.B EXDEV
> > +.IR dest_fd " and " src_fd
> > +are not on the same mounted filesystem.
> > +.TP
> > +.B EISDIR
> > +One of the files is a directory and the filesystem does not support shared
> > +regions in directories.
> > +.TP
> > +.B EINVAL
> > +The filesystem does not support reflinking the ranges of the given files. This
> > +error can also appear if either file descriptor represents a device, fifo, or
> > +socket. Disk filesystems generally require the offset and length arguments
> > +to be aligned to the fundamental block size. XFS and btrfs do not support
> > +overlapping reflink ranges in the same file.
> > +.TP
> > +.B EBADF
> > +.IR src_fd
> > +is not open for reading;
> > +.IR dest_fd
> > +is not open for writing or is open for append-only writes; or the filesystem
> > +which
> > +.IR src_fd
> > +resides on does not support reflink.
> > +.TP
> > +.B EPERM
> > +.IR dest_fd
> > +is immutable.
> > +.TP
> > +.B ETXTBSY
> > +One of the files is a swap file. Swap files cannot share storage.
> > +.TP
> > +.B EOPNOTSUPP
> > +This can appear if the filesystem does not support reflinking either file
> > +descriptor.
> > +.SH NOTES
> > +Because a copy on write operation requires the allocation of new storage, the
> > +.B fallocate (2)
> > +operation may un-share shared blocks to guarantee that subsequent writes will
> > +not fail because of lack of disk space.
> > +.SH CONFORMING TO
> > +This API is Linux-specific. This ioctl was previously known as
> > +.B BTRFS_IOC_CLONE_RANGE
> > +and was private to btrfs.
> > +.fi
> > +.in
> > +.SH SEE ALSO
> > +.BR ioctl (2)
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-man" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] man2: document FICLONE and FICLONERANGE
2016-03-15 16:48 ` [PATCH 1/2] man2: document FICLONE and FICLONERANGE Darrick J. Wong
2016-03-19 17:04 ` walter harms
@ 2016-06-08 10:35 ` Michael Kerrisk (man-pages)
1 sibling, 0 replies; 10+ messages in thread
From: Michael Kerrisk (man-pages) @ 2016-06-08 10:35 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: mtk.manpages, linux-fsdevel, linux-api, hch, linux-man
On 03/15/2016 05:48 PM, Darrick J. Wong wrote:
> Document the FICLONE and FICLONERANGE ioctls, formerly known as the
> BTRFS_IOC_CLONE and BTRFS_IOC_CLONE_RANGE ioctls.
Thanks for the nice page, Darrick. Applied!
Cheers,
Michael
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---
> man2/ioctl_ficlone.2 | 1
> man2/ioctl_ficlonerange.2 | 124 +++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 125 insertions(+)
> create mode 100644 man2/ioctl_ficlone.2
> create mode 100644 man2/ioctl_ficlonerange.2
>
>
> diff --git a/man2/ioctl_ficlone.2 b/man2/ioctl_ficlone.2
> new file mode 100644
> index 0000000..19bb348
> --- /dev/null
> +++ b/man2/ioctl_ficlone.2
> @@ -0,0 +1 @@
> +.so man2/ioctl_ficlonerange.2
> diff --git a/man2/ioctl_ficlonerange.2 b/man2/ioctl_ficlonerange.2
> new file mode 100644
> index 0000000..c5c72aa
> --- /dev/null
> +++ b/man2/ioctl_ficlonerange.2
> @@ -0,0 +1,124 @@
> +.\" Copyright (C) 2016 Oracle. All rights reserved.
> +.\"
> +.\" %%%LICENSE_START(VERBATIM)
> +.\" This program is free software; you can redistribute it and/or
> +.\" modify it under the terms of the GNU General Public License as
> +.\" published by the Free Software Foundation.
> +.\"
> +.\" This program is distributed in the hope that it would be useful,
> +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
> +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +.\" GNU General Public License for more details.
> +.\"
> +.\" You should have received a copy of the GNU General Public License
> +.\" along with this program; if not, write the Free Software Foundation,
> +.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
> +.\" %%%LICENSE_END
> +.TH IOCTL-FICLONERANGE 2 2016-02-10 "Linux" "Linux Programmer's Manual"
> +.SH NAME
> +ioctl_ficlonerange, ioctl_ficlone \- share some the data of one file with another file
> +.SH SYNOPSIS
> +.br
> +.B #include <sys/ioctl.h>
> +.br
> +.B #include <linux/fs.h>
> +.sp
> +.BI "int ioctl(int " dest_fd ", FICLONERANGE, struct file_clone_range * " arg );
> +.br
> +.BI "int ioctl(int " dest_fd ", FICLONE, int " src_fd );
> +.SH DESCRIPTION
> +If a filesystem supports files sharing physical storage between multiple
> +files ("reflink"), this
> +.BR ioctl (2)
> +system call can be used to make some of the data in the
> +.B src_fd
> +file appear in the
> +.B dest_fd
> +file by sharing the underlying storage, which is faster than making a separate
> +physical copy of the data. If a file write should occur to a shared region,
> +the filesystem must ensure that the changes remain private to the file being
> +written. This behavior is commonly referred to as "copy on write".
> +
> +This ioctl reflinks up to
> +.IR src_length
> +bytes from file descriptor
> +.IR src_fd
> +at offset
> +.IR src_offset
> +into the file
> +.IR dest_fd
> +at offset
> +.IR dest_offset ",
> +provided that both are files. This information is conveyed in a structure of
> +the following form:
> +.in +4n
> +.nf
> +
> +struct file_clone_range {
> + __s64 src_fd;
> + __u64 src_offset;
> + __u64 src_length;
> + __u64 dest_offset;
> +};
> +
> +.fi
> +.in
> +Clones are atomic with regards to concurrent writes, so no locks need to be
> +taken to obtain a consistent cloned copy.
> +
> +The FICLONE ioctl clones entire files.
> +.SH RETURN VALUE
> +On error, \-1 is returned, and
> +.I errno
> +is set to indicate the error.
> +.PP
> +.SH ERRORS
> +Error codes can be one of, but are not limited to, the following:
> +.TP
> +.B EXDEV
> +.IR dest_fd " and " src_fd
> +are not on the same mounted filesystem.
> +.TP
> +.B EISDIR
> +One of the files is a directory and the filesystem does not support shared
> +regions in directories.
> +.TP
> +.B EINVAL
> +The filesystem does not support reflinking the ranges of the given files. This
> +error can also appear if either file descriptor represents a device, fifo, or
> +socket. Disk filesystems generally require the offset and length arguments
> +to be aligned to the fundamental block size. XFS and btrfs do not support
> +overlapping reflink ranges in the same file.
> +.TP
> +.B EBADF
> +.IR src_fd
> +is not open for reading;
> +.IR dest_fd
> +is not open for writing or is open for append-only writes; or the filesystem
> +which
> +.IR src_fd
> +resides on does not support reflink.
> +.TP
> +.B EPERM
> +.IR dest_fd
> +is immutable.
> +.TP
> +.B ETXTBSY
> +One of the files is a swap file. Swap files cannot share storage.
> +.TP
> +.B EOPNOTSUPP
> +This can appear if the filesystem does not support reflinking either file
> +descriptor.
> +.SH NOTES
> +Because a copy on write operation requires the allocation of new storage, the
> +.B fallocate (2)
> +operation may un-share shared blocks to guarantee that subsequent writes will
> +not fail because of lack of disk space.
> +.SH CONFORMING TO
> +This API is Linux-specific. This ioctl was previously known as
> +.B BTRFS_IOC_CLONE_RANGE
> +and was private to btrfs.
> +.fi
> +.in
> +.SH SEE ALSO
> +.BR ioctl (2)
>
>
--
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2/2] man2: document the FIDEDUPERANGE ioctl
2016-03-15 16:48 [PATCH v5 0/2] man-pages: document reflink/dedupe ioctls Darrick J. Wong
2016-03-15 16:48 ` [PATCH 1/2] man2: document FICLONE and FICLONERANGE Darrick J. Wong
@ 2016-03-15 16:48 ` Darrick J. Wong
2016-06-08 10:35 ` Michael Kerrisk (man-pages)
2016-03-15 17:04 ` [PATCH v5 0/2] man-pages: document reflink/dedupe ioctls Christoph Hellwig
2 siblings, 1 reply; 10+ messages in thread
From: Darrick J. Wong @ 2016-03-15 16:48 UTC (permalink / raw)
To: mtk.manpages, darrick.wong; +Cc: linux-fsdevel, linux-api, hch, linux-man
Document the FIDEDUPERANGE ioctl, formerly known as BTRFS_IOC_EXTENT_SAME.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
man2/ioctl_fideduperange.2 | 168 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 168 insertions(+)
create mode 100644 man2/ioctl_fideduperange.2
diff --git a/man2/ioctl_fideduperange.2 b/man2/ioctl_fideduperange.2
new file mode 100644
index 0000000..0fbc388
--- /dev/null
+++ b/man2/ioctl_fideduperange.2
@@ -0,0 +1,168 @@
+.\" Copyright (C) 2016 Oracle. All rights reserved.
+.\"
+.\" %%%LICENSE_START(VERBATIM)
+.\" This program is free software; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation.
+.\"
+.\" This program is distributed in the hope that it would be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public License
+.\" along with this program; if not, write the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+.\" %%%LICENSE_END
+.TH IOCTL-FIDEDUPERANGE 2 2016-02-10 "Linux" "Linux Programmer's Manual"
+.SH NAME
+ioctl_fideduperange \- share some the data of one file with another file
+.SH SYNOPSIS
+.br
+.B #include <sys/ioctl.h>
+.br
+.B #include <linux/fs.h>
+.sp
+.BI "int ioctl(int " src_fd ", FIDEDUPERANGE, struct file_dedupe_range * " arg );
+.SH DESCRIPTION
+If a filesystem supports files sharing physical storage between multiple
+files, this
+.BR ioctl (2)
+system call can be used to make some of the data in the
+.B src_fd
+file appear in the
+.B dest_fd
+file by sharing the underlying storage if the file data is identical
+("deduplication"). This reduces storage consumption by allowing the filesystem
+to store one shared copy of the data. If a file write should occur to a shared
+region, the filesystem must ensure that the changes remain private to the file
+being written. This behavior is commonly referred to as "copy on write".
+
+This ioctl performs the "compare and share if identical" operation on up to
+.IR src_length
+bytes from file descriptor
+.IR src_fd
+at offset
+.IR src_offset ".
+This information is conveyed in a structure of the following form:
+.in +4n
+.nf
+
+struct file_dedupe_range {
+ __u64 src_offset;
+ __u64 src_length;
+ __u16 dest_count;
+ __u16 reserved1;
+ __u32 reserved2;
+ struct file_dedupe_range_info info[0];
+};
+.fi
+.in
+Deduplication is atomic with regards to concurrent writes, so no locks need to
+be taken to obtain a consistent deduplicated copy.
+
+The fields
+.IR reserved1 " and " reserved2
+must be zero.
+
+Destinations for the deduplication operation are conveyed in the array at the
+end of the structure. The number of destinations is given in
+.IR dest_count ",
+and the destination information is conveyed in the following form:
+
+.in +4n
+.nf
+struct file_dedupe_range_info {
+ __s64 dest_fd;
+ __u64 dest_offset;
+ __u64 bytes_deduped;
+ __s32 status;
+ __u32 reserved;
+};
+
+.fi
+.in
+
+Each deduplication operation targets
+.IR length
+bytes in file descriptor
+.IR dest_fd
+at offset
+.IR logical_offset ".
+The field
+.IR reserved
+must be zero.
+
+Upon successful completion of this ioctl, the number of bytes successfully
+deduplicated is returned in
+.IR bytes_deduped
+and a status code for the deduplication operation is returned in
+.IR status ".
+
+The
+.IR status
+code is set to
+.B 0
+for success, a negative error code in case of error, or
+.B FILE_DEDUPE_RANGE_DIFFERS
+if the data did not match.
+
+.SH RETURN VALUE
+On error, \-1 is returned, and
+.I errno
+is set to indicate the error.
+.PP
+.SH ERRORS
+Error codes can be one of, but are not limited to, the following:
+.TP
+.B EXDEV
+.IR dest_fd " and " src_fd
+are not on the same mounted filesystem.
+.TP
+.B EISDIR
+One of the files is a directory and the filesystem does not support shared
+regions in directories.
+.TP
+.B EINVAL
+The filesystem does not support deduplicating the ranges of the given files.
+This error can also appear if either file descriptor represents a device, fifo,
+or socket. Disk filesystems generally require the offset and length arguments
+to be aligned to the fundamental block size. Neither btrfs nor XFS support
+overlapping deduplication ranges in the same file.
+.TP
+.B EBADF
+.IR src_fd
+is not open for reading;
+.IR dest_fd
+is not open for writing or is open for append-only writes; or the filesystem
+which
+.IR src_fd
+resides on does not support deduplication.
+.TP
+.B EPERM
+.IR dest_fd
+is immutable.
+.TP
+.B ETXTBSY
+One of the files is a swap file. Swap files cannot share storage.
+.TP
+.B EOPNOTSUPP
+This can appear if the filesystem does not support deduplicating either file
+descriptor.
+.SH NOTES
+Because a copy on write operation requires the allocation of new storage, the
+.B fallocate (2)
+operation may un-share shared blocks to guarantee that subsequent writes will
+not fail because of lack of disk space.
+
+Some filesystems may limit the amount of data that can be deduplicated in a
+single call.
+
+.SH CONFORMING TO
+This API is Linux-specific. This ioctl was previously known as
+.B BTRFS_IOC_FILE_EXTENT_SAME
+and was private to btrfs.
+.fi
+.in
+.SH SEE ALSO
+.BR ioctl (2)
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] man2: document the FIDEDUPERANGE ioctl
2016-03-15 16:48 ` [PATCH 2/2] man2: document the FIDEDUPERANGE ioctl Darrick J. Wong
@ 2016-06-08 10:35 ` Michael Kerrisk (man-pages)
2016-06-08 16:39 ` Darrick J. Wong
0 siblings, 1 reply; 10+ messages in thread
From: Michael Kerrisk (man-pages) @ 2016-06-08 10:35 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: mtk.manpages, linux-fsdevel, linux-api, hch, linux-man
On 03/15/2016 05:48 PM, Darrick J. Wong wrote:
> Document the FIDEDUPERANGE ioctl, formerly known as BTRFS_IOC_EXTENT_SAME.
Again, thanks for the nice page, Darrick. Applied!
Cheers,
Michael
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---
> man2/ioctl_fideduperange.2 | 168 ++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 168 insertions(+)
> create mode 100644 man2/ioctl_fideduperange.2
>
>
> diff --git a/man2/ioctl_fideduperange.2 b/man2/ioctl_fideduperange.2
> new file mode 100644
> index 0000000..0fbc388
> --- /dev/null
> +++ b/man2/ioctl_fideduperange.2
> @@ -0,0 +1,168 @@
> +.\" Copyright (C) 2016 Oracle. All rights reserved.
> +.\"
> +.\" %%%LICENSE_START(VERBATIM)
> +.\" This program is free software; you can redistribute it and/or
> +.\" modify it under the terms of the GNU General Public License as
> +.\" published by the Free Software Foundation.
> +.\"
> +.\" This program is distributed in the hope that it would be useful,
> +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
> +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +.\" GNU General Public License for more details.
> +.\"
> +.\" You should have received a copy of the GNU General Public License
> +.\" along with this program; if not, write the Free Software Foundation,
> +.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
> +.\" %%%LICENSE_END
> +.TH IOCTL-FIDEDUPERANGE 2 2016-02-10 "Linux" "Linux Programmer's Manual"
> +.SH NAME
> +ioctl_fideduperange \- share some the data of one file with another file
> +.SH SYNOPSIS
> +.br
> +.B #include <sys/ioctl.h>
> +.br
> +.B #include <linux/fs.h>
> +.sp
> +.BI "int ioctl(int " src_fd ", FIDEDUPERANGE, struct file_dedupe_range * " arg );
> +.SH DESCRIPTION
> +If a filesystem supports files sharing physical storage between multiple
> +files, this
> +.BR ioctl (2)
> +system call can be used to make some of the data in the
> +.B src_fd
> +file appear in the
> +.B dest_fd
> +file by sharing the underlying storage if the file data is identical
> +("deduplication"). This reduces storage consumption by allowing the filesystem
> +to store one shared copy of the data. If a file write should occur to a shared
> +region, the filesystem must ensure that the changes remain private to the file
> +being written. This behavior is commonly referred to as "copy on write".
> +
> +This ioctl performs the "compare and share if identical" operation on up to
> +.IR src_length
> +bytes from file descriptor
> +.IR src_fd
> +at offset
> +.IR src_offset ".
> +This information is conveyed in a structure of the following form:
> +.in +4n
> +.nf
> +
> +struct file_dedupe_range {
> + __u64 src_offset;
> + __u64 src_length;
> + __u16 dest_count;
> + __u16 reserved1;
> + __u32 reserved2;
> + struct file_dedupe_range_info info[0];
> +};
> +.fi
> +.in
> +Deduplication is atomic with regards to concurrent writes, so no locks need to
> +be taken to obtain a consistent deduplicated copy.
> +
> +The fields
> +.IR reserved1 " and " reserved2
> +must be zero.
> +
> +Destinations for the deduplication operation are conveyed in the array at the
> +end of the structure. The number of destinations is given in
> +.IR dest_count ",
> +and the destination information is conveyed in the following form:
> +
> +.in +4n
> +.nf
> +struct file_dedupe_range_info {
> + __s64 dest_fd;
> + __u64 dest_offset;
> + __u64 bytes_deduped;
> + __s32 status;
> + __u32 reserved;
> +};
> +
> +.fi
> +.in
> +
> +Each deduplication operation targets
> +.IR length
> +bytes in file descriptor
> +.IR dest_fd
> +at offset
> +.IR logical_offset ".
> +The field
> +.IR reserved
> +must be zero.
> +
> +Upon successful completion of this ioctl, the number of bytes successfully
> +deduplicated is returned in
> +.IR bytes_deduped
> +and a status code for the deduplication operation is returned in
> +.IR status ".
> +
> +The
> +.IR status
> +code is set to
> +.B 0
> +for success, a negative error code in case of error, or
> +.B FILE_DEDUPE_RANGE_DIFFERS
> +if the data did not match.
> +
> +.SH RETURN VALUE
> +On error, \-1 is returned, and
> +.I errno
> +is set to indicate the error.
> +.PP
> +.SH ERRORS
> +Error codes can be one of, but are not limited to, the following:
> +.TP
> +.B EXDEV
> +.IR dest_fd " and " src_fd
> +are not on the same mounted filesystem.
> +.TP
> +.B EISDIR
> +One of the files is a directory and the filesystem does not support shared
> +regions in directories.
> +.TP
> +.B EINVAL
> +The filesystem does not support deduplicating the ranges of the given files.
> +This error can also appear if either file descriptor represents a device, fifo,
> +or socket. Disk filesystems generally require the offset and length arguments
> +to be aligned to the fundamental block size. Neither btrfs nor XFS support
> +overlapping deduplication ranges in the same file.
> +.TP
> +.B EBADF
> +.IR src_fd
> +is not open for reading;
> +.IR dest_fd
> +is not open for writing or is open for append-only writes; or the filesystem
> +which
> +.IR src_fd
> +resides on does not support deduplication.
> +.TP
> +.B EPERM
> +.IR dest_fd
> +is immutable.
> +.TP
> +.B ETXTBSY
> +One of the files is a swap file. Swap files cannot share storage.
> +.TP
> +.B EOPNOTSUPP
> +This can appear if the filesystem does not support deduplicating either file
> +descriptor.
> +.SH NOTES
> +Because a copy on write operation requires the allocation of new storage, the
> +.B fallocate (2)
> +operation may un-share shared blocks to guarantee that subsequent writes will
> +not fail because of lack of disk space.
> +
> +Some filesystems may limit the amount of data that can be deduplicated in a
> +single call.
> +
> +.SH CONFORMING TO
> +This API is Linux-specific. This ioctl was previously known as
> +.B BTRFS_IOC_FILE_EXTENT_SAME
> +and was private to btrfs.
> +.fi
> +.in
> +.SH SEE ALSO
> +.BR ioctl (2)
>
>
--
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] man2: document the FIDEDUPERANGE ioctl
2016-06-08 10:35 ` Michael Kerrisk (man-pages)
@ 2016-06-08 16:39 ` Darrick J. Wong
0 siblings, 0 replies; 10+ messages in thread
From: Darrick J. Wong @ 2016-06-08 16:39 UTC (permalink / raw)
To: Michael Kerrisk (man-pages); +Cc: linux-fsdevel, linux-api, hch, linux-man
On Wed, Jun 08, 2016 at 12:35:47PM +0200, Michael Kerrisk (man-pages) wrote:
> On 03/15/2016 05:48 PM, Darrick J. Wong wrote:
> > Document the FIDEDUPERANGE ioctl, formerly known as BTRFS_IOC_EXTENT_SAME.
>
> Again, thanks for the nice page, Darrick. Applied!
NP. I have a couple of one-line fixes for the manpages that Christoph
suggested a while back that I'll send separately.
[Sorry I forgot about the new-sentence->new-line rule.]
--D
>
> Cheers,
>
> Michael
>
>
> > Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> > ---
> > man2/ioctl_fideduperange.2 | 168 ++++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 168 insertions(+)
> > create mode 100644 man2/ioctl_fideduperange.2
> >
> >
> > diff --git a/man2/ioctl_fideduperange.2 b/man2/ioctl_fideduperange.2
> > new file mode 100644
> > index 0000000..0fbc388
> > --- /dev/null
> > +++ b/man2/ioctl_fideduperange.2
> > @@ -0,0 +1,168 @@
> > +.\" Copyright (C) 2016 Oracle. All rights reserved.
> > +.\"
> > +.\" %%%LICENSE_START(VERBATIM)
> > +.\" This program is free software; you can redistribute it and/or
> > +.\" modify it under the terms of the GNU General Public License as
> > +.\" published by the Free Software Foundation.
> > +.\"
> > +.\" This program is distributed in the hope that it would be useful,
> > +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
> > +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> > +.\" GNU General Public License for more details.
> > +.\"
> > +.\" You should have received a copy of the GNU General Public License
> > +.\" along with this program; if not, write the Free Software Foundation,
> > +.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
> > +.\" %%%LICENSE_END
> > +.TH IOCTL-FIDEDUPERANGE 2 2016-02-10 "Linux" "Linux Programmer's Manual"
> > +.SH NAME
> > +ioctl_fideduperange \- share some the data of one file with another file
> > +.SH SYNOPSIS
> > +.br
> > +.B #include <sys/ioctl.h>
> > +.br
> > +.B #include <linux/fs.h>
> > +.sp
> > +.BI "int ioctl(int " src_fd ", FIDEDUPERANGE, struct file_dedupe_range * " arg );
> > +.SH DESCRIPTION
> > +If a filesystem supports files sharing physical storage between multiple
> > +files, this
> > +.BR ioctl (2)
> > +system call can be used to make some of the data in the
> > +.B src_fd
> > +file appear in the
> > +.B dest_fd
> > +file by sharing the underlying storage if the file data is identical
> > +("deduplication"). This reduces storage consumption by allowing the filesystem
> > +to store one shared copy of the data. If a file write should occur to a shared
> > +region, the filesystem must ensure that the changes remain private to the file
> > +being written. This behavior is commonly referred to as "copy on write".
> > +
> > +This ioctl performs the "compare and share if identical" operation on up to
> > +.IR src_length
> > +bytes from file descriptor
> > +.IR src_fd
> > +at offset
> > +.IR src_offset ".
> > +This information is conveyed in a structure of the following form:
> > +.in +4n
> > +.nf
> > +
> > +struct file_dedupe_range {
> > + __u64 src_offset;
> > + __u64 src_length;
> > + __u16 dest_count;
> > + __u16 reserved1;
> > + __u32 reserved2;
> > + struct file_dedupe_range_info info[0];
> > +};
> > +.fi
> > +.in
> > +Deduplication is atomic with regards to concurrent writes, so no locks need to
> > +be taken to obtain a consistent deduplicated copy.
> > +
> > +The fields
> > +.IR reserved1 " and " reserved2
> > +must be zero.
> > +
> > +Destinations for the deduplication operation are conveyed in the array at the
> > +end of the structure. The number of destinations is given in
> > +.IR dest_count ",
> > +and the destination information is conveyed in the following form:
> > +
> > +.in +4n
> > +.nf
> > +struct file_dedupe_range_info {
> > + __s64 dest_fd;
> > + __u64 dest_offset;
> > + __u64 bytes_deduped;
> > + __s32 status;
> > + __u32 reserved;
> > +};
> > +
> > +.fi
> > +.in
> > +
> > +Each deduplication operation targets
> > +.IR length
> > +bytes in file descriptor
> > +.IR dest_fd
> > +at offset
> > +.IR logical_offset ".
> > +The field
> > +.IR reserved
> > +must be zero.
> > +
> > +Upon successful completion of this ioctl, the number of bytes successfully
> > +deduplicated is returned in
> > +.IR bytes_deduped
> > +and a status code for the deduplication operation is returned in
> > +.IR status ".
> > +
> > +The
> > +.IR status
> > +code is set to
> > +.B 0
> > +for success, a negative error code in case of error, or
> > +.B FILE_DEDUPE_RANGE_DIFFERS
> > +if the data did not match.
> > +
> > +.SH RETURN VALUE
> > +On error, \-1 is returned, and
> > +.I errno
> > +is set to indicate the error.
> > +.PP
> > +.SH ERRORS
> > +Error codes can be one of, but are not limited to, the following:
> > +.TP
> > +.B EXDEV
> > +.IR dest_fd " and " src_fd
> > +are not on the same mounted filesystem.
> > +.TP
> > +.B EISDIR
> > +One of the files is a directory and the filesystem does not support shared
> > +regions in directories.
> > +.TP
> > +.B EINVAL
> > +The filesystem does not support deduplicating the ranges of the given files.
> > +This error can also appear if either file descriptor represents a device, fifo,
> > +or socket. Disk filesystems generally require the offset and length arguments
> > +to be aligned to the fundamental block size. Neither btrfs nor XFS support
> > +overlapping deduplication ranges in the same file.
> > +.TP
> > +.B EBADF
> > +.IR src_fd
> > +is not open for reading;
> > +.IR dest_fd
> > +is not open for writing or is open for append-only writes; or the filesystem
> > +which
> > +.IR src_fd
> > +resides on does not support deduplication.
> > +.TP
> > +.B EPERM
> > +.IR dest_fd
> > +is immutable.
> > +.TP
> > +.B ETXTBSY
> > +One of the files is a swap file. Swap files cannot share storage.
> > +.TP
> > +.B EOPNOTSUPP
> > +This can appear if the filesystem does not support deduplicating either file
> > +descriptor.
> > +.SH NOTES
> > +Because a copy on write operation requires the allocation of new storage, the
> > +.B fallocate (2)
> > +operation may un-share shared blocks to guarantee that subsequent writes will
> > +not fail because of lack of disk space.
> > +
> > +Some filesystems may limit the amount of data that can be deduplicated in a
> > +single call.
> > +
> > +.SH CONFORMING TO
> > +This API is Linux-specific. This ioctl was previously known as
> > +.B BTRFS_IOC_FILE_EXTENT_SAME
> > +and was private to btrfs.
> > +.fi
> > +.in
> > +.SH SEE ALSO
> > +.BR ioctl (2)
> >
> >
>
>
> --
> Michael Kerrisk
> Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
> Linux/UNIX System Programming Training: http://man7.org/training/
> --
> To unsubscribe from this list: send the line "unsubscribe linux-api" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v5 0/2] man-pages: document reflink/dedupe ioctls
2016-03-15 16:48 [PATCH v5 0/2] man-pages: document reflink/dedupe ioctls Darrick J. Wong
2016-03-15 16:48 ` [PATCH 1/2] man2: document FICLONE and FICLONERANGE Darrick J. Wong
2016-03-15 16:48 ` [PATCH 2/2] man2: document the FIDEDUPERANGE ioctl Darrick J. Wong
@ 2016-03-15 17:04 ` Christoph Hellwig
2 siblings, 0 replies; 10+ messages in thread
From: Christoph Hellwig @ 2016-03-15 17:04 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: mtk.manpages, linux-fsdevel, linux-api, hch, linux-man
Both man pages looks fine to me:
Reviewed-by: Christoph Hellwig <hch@lst.de>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [RFCv4 0/2] man-pages: document reflink/dedupe ioctls
@ 2015-12-19 8:56 Darrick J. Wong
2015-12-19 8:56 ` [PATCH 2/2] man2: document the FIDEDUPERANGE ioctl Darrick J. Wong
0 siblings, 1 reply; 10+ messages in thread
From: Darrick J. Wong @ 2015-12-19 8:56 UTC (permalink / raw)
To: mtk.manpages, darrick.wong; +Cc: linux-fsdevel, linux-api, linux-man
Hi all,
This patch set goes along with the fourth revision of an RFC adding to
XFS kernel support for tracking reverse-mappings of physical blocks to
file and metadata; and support for mapping multiple file logical
blocks to the same physical block, more commonly known as reflinking.
The two patches in this series document the clone, clone_range, and
dedupe ioctls in the form of man pages.
The patch set is based on a whole pile of proposed patches against the
current (4.4-rc5) upstream kernel; the ioctls are simply hoisted
version of the private btrfs ioctls.
If you're going to start using this mess, you probably ought to just
pull from my github trees for kernel[1], xfsprogs[2], and xfstests[3].
See also the xfs-docs[4] and manpage[5] updates.
This is an extraordinary way to eat your data. Enjoy!
Comments and questions are, as always, welcome.
--D
[1] https://github.com/djwong/linux/tree/for-dave
[2] https://github.com/djwong/xfsprogs/tree/for-dave
[3] https://github.com/djwong/xfstests/tree/for-dave
[4] https://github.com/djwong/xfs-documentation/tree/for-dave
[5] https://github.com/djwong/man-pages/commits/for-mtk
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2/2] man2: document the FIDEDUPERANGE ioctl
2015-12-19 8:56 [RFCv4 " Darrick J. Wong
@ 2015-12-19 8:56 ` Darrick J. Wong
0 siblings, 0 replies; 10+ messages in thread
From: Darrick J. Wong @ 2015-12-19 8:56 UTC (permalink / raw)
To: mtk.manpages, darrick.wong; +Cc: linux-fsdevel, linux-api, linux-man
Document the FIDEDUPERANGE ioctl, formerly known as BTRFS_IOC_EXTENT_SAME.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
man2/ioctl_fideduperange.2 | 164 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 164 insertions(+)
create mode 100644 man2/ioctl_fideduperange.2
diff --git a/man2/ioctl_fideduperange.2 b/man2/ioctl_fideduperange.2
new file mode 100644
index 0000000..a8a19d0
--- /dev/null
+++ b/man2/ioctl_fideduperange.2
@@ -0,0 +1,164 @@
+.\" Copyright (C) 2015 Oracle. All rights reserved.
+.\"
+.\" %%%LICENSE_START(VERBATIM)
+.\" This program is free software; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation.
+.\"
+.\" This program is distributed in the hope that it would be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public License
+.\" along with this program; if not, write the Free Software Foundation,
+.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+.\" %%%LICENSE_END
+.TH IOCTL-FIDEDUPERANGE 2 2015-12-15 "Linux" "Linux Programmer's Manual"
+.SH NAME
+ioctl_fideduperange \- share some the data of one file with another file
+.SH SYNOPSIS
+.br
+.B #include <sys/ioctl.h>
+.sp
+.BI "int ioctl(int " src_fd ", FIDEDUPERANGE, struct file_dedupe_range * " arg );
+.SH DESCRIPTION
+If a filesystem supports files sharing physical storage between multiple
+files, this
+.BR ioctl (2)
+system call can be used to make some of the data in the
+.B src_fd
+file appear in the
+.B dest_fd
+file by sharing the underlying storage if the file data is identical
+("deduplication"). This reduces storage consumption by allowing the filesystem
+to store one shared copy of the data. If a file write should occur to a shared
+region, the filesystem must ensure that the changes remain private to the file
+being written. This behavior is commonly referred to as "copy on write".
+
+This ioctl performs the "compare and share if identical" operation on up to
+.IR src_length
+bytes from file descriptor
+.IR src_fd
+at offset
+.IR src_offset ".
+This information is conveyed in a structure of the following form:
+.in +4n
+.nf
+
+struct file_dedupe_range {
+ __u64 src_offset;
+ __u64 src_length;
+ __u16 dest_count;
+ __u16 reserved1;
+ __u32 reserved2;
+ struct file_dedupe_range_info info[0];
+};
+.fi
+.in
+
+The fields
+.IR reserved1 " and " reserved2
+must be zero.
+
+Destinations for the deduplication operation are conveyed in the array at the
+end of the structure. The number of destinations is given in
+.IR dest_count ",
+and the destination information is conveyed in the following form:
+
+.in +4n
+.nf
+struct file_dedupe_range_info {
+ __s64 dest_fd;
+ __u64 dest_offset;
+ __u64 bytes_deduped;
+ __s32 status;
+ __u32 reserved;
+};
+
+.fi
+.in
+
+Each deduplication operation targets
+.IR length
+bytes in file descriptor
+.IR dest_fd
+at offset
+.IR logical_offset ".
+The field
+.IR reserved
+must be zero.
+
+Upon successful completion of this ioctl, the number of bytes successfully
+deduplicated is returned in
+.IR bytes_deduped
+and a status code for the deduplication operation is returned in
+.IR status ".
+
+The
+.IR status
+code is set to
+.B 0
+for success, a negative error code in case of error, or
+.B FILE_DEDUPE_RANGE_DIFFERS
+if the data did not match.
+
+.SH RETURN VALUE
+On error, \-1 is returned, and
+.I errno
+is set to indicate the error.
+.PP
+.SH ERRORS
+Error codes can be one of, but are not limited to, the following:
+.TP
+.B EXDEV
+.IR dest_fd " and " src_fd
+are not on the same mounted filesystem.
+.TP
+.B EISDIR
+One of the files is a directory and the filesystem does not support shared
+regions in directories.
+.TP
+.B EINVAL
+The filesystem does not support deduplicating the ranges of the given files.
+This error can also appear if either file descriptor represents a device, fifo,
+or socket. Disk filesystems generally require the offset and length arguments
+to be aligned to the fundamental block size. Not all filesystems support
+overlapping deduplication ranges in the same file.
+.TP
+.B EBADF
+.IR src_fd
+is not open for reading;
+.IR dest_fd
+is not open for writing or is open for append-only writes; or the filesystem
+which
+.IR src_fd
+resides on does not support deduplication.
+.TP
+.B EPERM
+.IR dest_fd
+is immutable.
+.TP
+.B ETXTBSY
+One of the files is a swap file. Swap files cannot share storage.
+.TP
+.B EOPNOTSUPP
+This can appear if the filesystem does not support deduplicating either file
+descriptor.
+.SH NOTES
+Because a copy on write operation requires the allocation of new storage, the
+.B fallocate (2)
+operation may un-share shared blocks to guarantee that subsequent writes will
+not fail because of lack of disk space.
+
+Some filesystems may limit the amount of data that can be deduplicated in a
+single call.
+
+.SH CONFORMING TO
+This API is Linux-specific. This ioctl was previously known as
+.B BTRFS_IOC_FILE_EXTENT_SAME
+and was private to btrfs.
+.fi
+.in
+.SH SEE ALSO
+.BR ioctl (2)
^ permalink raw reply related [flat|nested] 10+ messages in thread
end of thread, other threads:[~2016-06-08 16:40 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-15 16:48 [PATCH v5 0/2] man-pages: document reflink/dedupe ioctls Darrick J. Wong
2016-03-15 16:48 ` [PATCH 1/2] man2: document FICLONE and FICLONERANGE Darrick J. Wong
2016-03-19 17:04 ` walter harms
2016-03-20 19:13 ` Darrick J. Wong
2016-06-08 10:35 ` Michael Kerrisk (man-pages)
2016-03-15 16:48 ` [PATCH 2/2] man2: document the FIDEDUPERANGE ioctl Darrick J. Wong
2016-06-08 10:35 ` Michael Kerrisk (man-pages)
2016-06-08 16:39 ` Darrick J. Wong
2016-03-15 17:04 ` [PATCH v5 0/2] man-pages: document reflink/dedupe ioctls Christoph Hellwig
-- strict thread matches above, loose matches on Subject: below --
2015-12-19 8:56 [RFCv4 " Darrick J. Wong
2015-12-19 8:56 ` [PATCH 2/2] man2: document the FIDEDUPERANGE ioctl Darrick J. Wong
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).