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