1 .\" Copyright (c) 2016, Oracle. All rights reserved.
3 .\" %%%LICENSE_START(GPLv2+_DOC_FULL)
4 .\" This is free documentation; you can redistribute it and/or
5 .\" modify it under the terms of the GNU General Public License as
6 .\" published by the Free Software Foundation; either version 2 of
7 .\" the License, or (at your option) any later version.
9 .\" The GNU General Public License's references to "object code"
10 .\" and "executables" are to be interpreted as the output of any
11 .\" document formatting or typesetting system, including
12 .\" intermediate and printed output.
14 .\" This manual is distributed in the hope that it will be useful,
15 .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
16 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 .\" GNU General Public License for more details.
19 .\" You should have received a copy of the GNU General Public
20 .\" License along with this manual; if not, see
21 .\" <http://www.gnu.org/licenses/>.
23 .TH IOCTL_FICLONERANGE 2 2021-03-22 "Linux" "Linux Programmer's Manual"
25 ioctl_ficlonerange, ioctl_ficlone \- share some the data of one file with another file
28 .BR "#include <linux/fs.h>" " /* Definition of " FICLONE* " constants */"
29 .B #include <sys/ioctl.h>
31 .BI "int ioctl(int " dest_fd ", FICLONERANGE, struct file_clone_range *" arg );
32 .BI "int ioctl(int " dest_fd ", FICLONE, int " src_fd );
35 If a filesystem supports files sharing physical storage between multiple
36 files ("reflink"), this
38 operation can be used to make some of the data in the
42 file by sharing the underlying storage, which is faster than making a separate
43 physical copy of the data.
44 Both files must reside within the same filesystem.
45 If a file write should occur to a shared region,
46 the filesystem must ensure that the changes remain private to the file being
48 This behavior is commonly referred to as "copy on write".
50 This ioctl reflinks up to
52 bytes from file descriptor
60 provided that both are files.
63 is zero, the ioctl reflinks to the end of the source file.
64 This information is conveyed in a structure of
69 struct file_clone_range {
78 Clones are atomic with regards to concurrent writes, so no locks need to be
79 taken to obtain a consistent cloned copy.
83 ioctl clones entire files.
85 On error, \-1 is returned, and
87 is set to indicate the error.
89 Error codes can be one of, but are not limited to, the following:
93 is not open for reading;
95 is not open for writing or is open for append-only writes;
96 or the filesystem which
98 resides on does not support reflink.
101 The filesystem does not support reflinking the ranges of the given files.
102 This error can also appear if either file descriptor represents
103 a device, FIFO, or socket.
104 Disk filesystems generally require the offset and length arguments
105 to be aligned to the fundamental block size.
106 XFS and Btrfs do not support
107 overlapping reflink ranges in the same file.
110 One of the files is a directory and the filesystem does not support shared
111 regions in directories.
114 This can appear if the filesystem does not support reflinking either file
115 descriptor, or if either file descriptor refers to special inodes.
122 One of the files is a swap file.
123 Swap files cannot share storage.
126 .IR dest_fd " and " src_fd
127 are not on the same mounted filesystem.
129 These ioctl operations first appeared in Linux 4.5.
130 They were previously known as
133 .BR BTRFS_IOC_CLONE_RANGE ,
134 and were private to Btrfs.
136 This API is Linux-specific.
138 Because a copy-on-write operation requires the allocation of new storage, the
140 operation may unshare shared blocks to guarantee that subsequent writes will
141 not fail because of lack of disk space.