HomeFreeBSD

cp(1): fix performance issue for large non-sparse file copies

Description

cp(1): fix performance issue for large non-sparse file copies

PR252358 reported a serious performance problem when
copying a large non-sparse file on a UFS file system.
This problem seems to have been caused by a large
number of SEEK_HOLE operations, with one done
for each copy_file_range(2) call.

This patch modifies cp(1) to use a large (SSIZE_MAX)
len argument, reducing the number of system calls
and resolving the performance issue.

While here, convert the type of the "rcount" from "int"
to "ssize_t" so that it is consistent with that returned
by both read(2) and copy_file_range(2).

PR: 252358
Reviewed by: asomers
Differential Revision: https://reviews.freebsd.org/D27937

Details

Provenance
rmacklemAuthored on Jan 3 2021, 12:58 AM
Reviewer
asomers
Differential Revision
D27937: fix the performance of cp(1) when copying large non-sparse files
Parents
R10:9c43bd646e27: Github actions: s/master/main/ for the CI workflow
Branches
Unknown
Tags
Unknown