xref: /freebsd/share/man/man9/VOP_COPY_FILE_RANGE.9 (revision 969071be938ca9b96f8dff003c7b43d6308849f1)
14b5b98d2SRick Macklem.\" SPDX-License-Identifier: BSD-2-Clause
24b5b98d2SRick Macklem.\"
34b5b98d2SRick Macklem.\" Copyright (c) 2019 Rick Macklem
44b5b98d2SRick Macklem.\"
54b5b98d2SRick Macklem.\" Redistribution and use in source and binary forms, with or without
64b5b98d2SRick Macklem.\" modification, are permitted provided that the following conditions
74b5b98d2SRick Macklem.\" are met:
84b5b98d2SRick Macklem.\" 1. Redistributions of source code must retain the above copyright
94b5b98d2SRick Macklem.\"    notice, this list of conditions and the following disclaimer.
104b5b98d2SRick Macklem.\" 2. Redistributions in binary form must reproduce the above copyright
114b5b98d2SRick Macklem.\"    notice, this list of conditions and the following disclaimer in the
124b5b98d2SRick Macklem.\"    documentation and/or other materials provided with the distribution.
134b5b98d2SRick Macklem.\"
144b5b98d2SRick Macklem.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
154b5b98d2SRick Macklem.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
164b5b98d2SRick Macklem.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
174b5b98d2SRick Macklem.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
184b5b98d2SRick Macklem.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
194b5b98d2SRick Macklem.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
204b5b98d2SRick Macklem.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
214b5b98d2SRick Macklem.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
224b5b98d2SRick Macklem.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
234b5b98d2SRick Macklem.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
244b5b98d2SRick Macklem.\" SUCH DAMAGE.
254b5b98d2SRick Macklem.\"
26e42b0964SJohn Baldwin.Dd March 30, 2020
274b5b98d2SRick Macklem.Dt VOP_COPY_FILE_RANGE 9
284b5b98d2SRick Macklem.Os
294b5b98d2SRick Macklem.Sh NAME
304b5b98d2SRick Macklem.Nm VOP_COPY_FILE_RANGE
31*969071beSMartin Matuska.Nd copy a byte range within a file or from one file to another in a single
32*969071beSMartin Matuskafile system or between multiple file systems
334b5b98d2SRick Macklem.Sh SYNOPSIS
344b5b98d2SRick Macklem.In sys/param.h
354b5b98d2SRick Macklem.In sys/vnode.h
364b5b98d2SRick Macklem.Ft int
374b5b98d2SRick Macklem.Fo VOP_COPY_FILE_RANGE
384b5b98d2SRick Macklem.Fa "struct vnode *invp"
394b5b98d2SRick Macklem.Fa "off_t *inoff"
404b5b98d2SRick Macklem.Fa "struct vnode *outvp"
414b5b98d2SRick Macklem.Fa "off_t *outoff"
424b5b98d2SRick Macklem.Fa "size_t *len"
434b5b98d2SRick Macklem.Fa "unsigned int flags"
444b5b98d2SRick Macklem.Fa "struct ucred *incred"
454b5b98d2SRick Macklem.Fa "struct ucred *outcred"
464b5b98d2SRick Macklem.Fa "struct thread *fsize_td"
4716ee5cd1SChristian Brueffer.Fc
484b5b98d2SRick Macklem.Sh DESCRIPTION
4984208c00SRick MacklemThis entry point copies a byte range from one regular file to another
5084208c00SRick Macklemor within one file in a single file system.
5184208c00SRick Macklem.Fa invp
5284208c00SRick Macklemand
5384208c00SRick Macklem.Fa outvp
5484208c00SRick Macklemcan refer to the same file.
5584208c00SRick MacklemFor this case, the byte ranges defined by
5684208c00SRick Macklem.Fa *inoff ,
5784208c00SRick Macklem.Fa *outoff and
5884208c00SRick Macklem.Fa *len
5984208c00SRick Macklemwill not overlap.
604b5b98d2SRick Macklem.Pp
614b5b98d2SRick MacklemThe arguments are:
624b5b98d2SRick Macklem.Bl -tag -width ioflag
634b5b98d2SRick Macklem.It Fa invp
644b5b98d2SRick MacklemThe vnode of the input file.
654b5b98d2SRick Macklem.It Fa inoff
664b5b98d2SRick MacklemA pointer to the file offset for the input file.
674b5b98d2SRick Macklem.It Fa outvp
684b5b98d2SRick MacklemThe vnode of the output file.
694b5b98d2SRick Macklem.It Fa outoff
704b5b98d2SRick MacklemA pointer to the file offset for the output file.
714b5b98d2SRick Macklem.It Fa len
72b2ea5090SRick MacklemA pointer to the byte count for the copy.
734b5b98d2SRick Macklem.It Fa flags
744b5b98d2SRick MacklemFlags, should be set to 0 for now.
754b5b98d2SRick Macklem.It Fa incred
764b5b98d2SRick MacklemThe credentials used to read
774b5b98d2SRick Macklem.Fa invp .
784b5b98d2SRick Macklem.It Fa outcred
794b5b98d2SRick MacklemThe credentials used to write
804b5b98d2SRick Macklem.Fa outvp .
814b5b98d2SRick Macklem.It Fa fsize_td
824b5b98d2SRick MacklemThe thread pointer to be passed to vn_rlimit_fsize().
834b5b98d2SRick MacklemThis will be
844b5b98d2SRick Macklem.Dv NULL
854b5b98d2SRick Macklemfor a server thread without limits, such as for the NFS
864b5b98d2SRick Macklemserver or
874b5b98d2SRick Macklem.Dv curthread
884b5b98d2SRick Macklemotherwise.
894b5b98d2SRick Macklem.El
904b5b98d2SRick Macklem.Pp
914b5b98d2SRick MacklemOn entry and on return, the
924b5b98d2SRick Macklem.Fa inoff
934b5b98d2SRick Macklemand
944b5b98d2SRick Macklem.Fa outoff
954b5b98d2SRick Macklemarguments point to the locations of the file offsets.
964b5b98d2SRick MacklemThese file offsets should be updated by the number of bytes copied.
974b5b98d2SRick MacklemThe
984b5b98d2SRick Macklem.Fa len
994b5b98d2SRick Macklemargument points to the location that stores the number of bytes
1004b5b98d2SRick Macklemto be copied.
101b2ea5090SRick MacklemUpon a successful return
1024b5b98d2SRick Macklem.Fa len
103b2ea5090SRick Macklemwill be updated to the number of bytes actually copied.
104b2ea5090SRick MacklemNormally, this will be the number of bytes requested to be copied,
105b2ea5090SRick Macklemhowever a copy of fewer bytes than requested is permitted.
106282c7fdcSRick MacklemThis does not necessarily indicate that the copy reached EOF on the input file.
107282c7fdcSRick MacklemHowever, if the value pointed to by the
108282c7fdcSRick Macklem.Fa len
109282c7fdcSRick Macklemargument is zero upon a successful return,
110282c7fdcSRick Macklemit indicates that the offset pointed to by
111282c7fdcSRick Macklem.Fa inoff
112282c7fdcSRick Macklemis at or beyond EOF on the input file.
1134b5b98d2SRick Macklem.Sh LOCKS
1144b5b98d2SRick MacklemThe vnode are unlocked on entry and must be unlocked on return.
1154b5b98d2SRick MacklemThe byte ranges for both
1164b5b98d2SRick Macklem.Fa invp
1174b5b98d2SRick Macklemand
1184b5b98d2SRick Macklem.Fa outvp
1194b5b98d2SRick Macklemshould be range locked when this call is done.
1204b5b98d2SRick Macklem.Sh RETURN VALUES
1214b5b98d2SRick MacklemZero is returned on success, otherwise an error code is returned.
1224b5b98d2SRick Macklem.Sh ERRORS
1234b5b98d2SRick Macklem.Bl -tag -width Er
1244b5b98d2SRick Macklem.It Bq Er EFBIG
1254b5b98d2SRick MacklemIf the copy exceeds the process's file size limit or the maximum file size
1264b5b98d2SRick Macklemfor the file system
1274b5b98d2SRick Macklem.Fa invp
1284b5b98d2SRick Macklemand
1294b5b98d2SRick Macklem.Fa outvp
1304b5b98d2SRick Macklemreside on.
1314b5b98d2SRick Macklem.It Bq Er EINTR
1324b5b98d2SRick MacklemA signal interrupted the VOP call before it could be completed.
1334b5b98d2SRick Macklem.It Bq Er EIO
1344b5b98d2SRick MacklemAn I/O error occurred while reading/writing the files.
135e42b0964SJohn Baldwin.It Bq Er EINTEGRITY
136e42b0964SJohn BaldwinCorrupted data was detected while reading/writing the files.
1374b5b98d2SRick Macklem.It Bq Er ENOSPC
1384b5b98d2SRick MacklemThe file system is full.
1394b5b98d2SRick Macklem.El
1404b5b98d2SRick Macklem.Sh SEE ALSO
1414b5b98d2SRick Macklem.Xr vn_rdwr 9 ,
1424b5b98d2SRick Macklem.Xr vnode 9
143