You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
3.8 KiB
119 lines
3.8 KiB
From 76126e2831580d0df20530f4d6f72189bd4f0b9a Mon Sep 17 00:00:00 2001 |
|
From: Paul Eggert <eggert@cs.ucla.edu> |
|
Date: Thu, 18 Jun 2020 22:16:24 -0700 |
|
Subject: [PATCH] cp: default to COW |
|
MIME-Version: 1.0 |
|
Content-Type: text/plain; charset=UTF-8 |
|
Content-Transfer-Encoding: 8bit |
|
|
|
Likewise for ‘install’. Proposed in Bug#24400, and long past due. |
|
* NEWS: |
|
* doc/coreutils.texi (cp invocation): |
|
* src/copy.h (enum Reflink_type): Document this. |
|
* src/cp.c (cp_option_init): |
|
* src/install.c (cp_option_init): Implement this. |
|
|
|
Upstream-commit: 25725f9d41735d176d73a757430739fb71c7d043 |
|
Signed-off-by: Kamil Dudka <kdudka@redhat.com> |
|
--- |
|
doc/coreutils.texi | 19 ++++++++++++------- |
|
src/copy.h | 4 ++-- |
|
src/cp.c | 2 +- |
|
src/install.c | 2 +- |
|
4 files changed, 16 insertions(+), 11 deletions(-) |
|
|
|
diff --git a/doc/coreutils.texi b/doc/coreutils.texi |
|
index 02e0c1c..2382a16 100644 |
|
--- a/doc/coreutils.texi |
|
+++ b/doc/coreutils.texi |
|
@@ -8854,12 +8854,14 @@ The @var{when} value can be one of the following: |
|
|
|
@table @samp |
|
@item always |
|
-The default behavior: if the copy-on-write operation is not supported |
|
+If the copy-on-write operation is not supported |
|
then report the failure for each file and exit with a failure status. |
|
+Plain @option{--reflink} is equivalent to @option{--reflink=when}. |
|
|
|
@item auto |
|
If the copy-on-write operation is not supported then fall back |
|
to the standard copy behavior. |
|
+This is the default if no @option{--reflink} option is given. |
|
|
|
@item never |
|
Disable copy-on-write operation and use the standard copy behavior. |
|
@@ -8868,12 +8870,6 @@ Disable copy-on-write operation and use the standard copy behavior. |
|
This option is overridden by the @option{--link}, @option{--symbolic-link} |
|
and @option{--attributes-only} options, thus allowing it to be used |
|
to configure the default data copying behavior for @command{cp}. |
|
-For example, with the following alias, @command{cp} will use the |
|
-minimum amount of space supported by the file system. |
|
- |
|
-@example |
|
-alias cp='cp --reflink=auto --sparse=always' |
|
-@end example |
|
|
|
@item --remove-destination |
|
@opindex --remove-destination |
|
@@ -8918,6 +8914,15 @@ This is useful in creating a file for use with the @command{mkswap} command, |
|
since such a file must not have any holes. |
|
@end table |
|
|
|
+For example, with the following alias, @command{cp} will use the |
|
+minimum amount of space supported by the file system. |
|
+(Older versions of @command{cp} can also benefit from |
|
+@option{--reflink=auto} here.) |
|
+ |
|
+@example |
|
+alias cp='cp --sparse=always' |
|
+@end example |
|
+ |
|
@optStripTrailingSlashes |
|
|
|
@item -s |
|
diff --git a/src/copy.h b/src/copy.h |
|
index 874d6f7..a0ad494 100644 |
|
--- a/src/copy.h |
|
+++ b/src/copy.h |
|
@@ -46,10 +46,10 @@ enum Sparse_type |
|
/* Control creation of COW files. */ |
|
enum Reflink_type |
|
{ |
|
- /* Default to a standard copy. */ |
|
+ /* Do a standard copy. */ |
|
REFLINK_NEVER, |
|
|
|
- /* Try a COW copy and fall back to a standard copy. */ |
|
+ /* Try a COW copy and fall back to a standard copy; this is the default. */ |
|
REFLINK_AUTO, |
|
|
|
/* Require a COW copy and fail if not available. */ |
|
diff --git a/src/cp.c b/src/cp.c |
|
index 0193df8..9e7ad14 100644 |
|
--- a/src/cp.c |
|
+++ b/src/cp.c |
|
@@ -796,7 +796,7 @@ cp_option_init (struct cp_options *x) |
|
x->move_mode = false; |
|
x->install_mode = false; |
|
x->one_file_system = false; |
|
- x->reflink_mode = REFLINK_NEVER; |
|
+ x->reflink_mode = REFLINK_AUTO; |
|
|
|
x->preserve_ownership = false; |
|
x->preserve_links = false; |
|
diff --git a/src/install.c b/src/install.c |
|
index 4ab44a6..aef16ca 100644 |
|
--- a/src/install.c |
|
+++ b/src/install.c |
|
@@ -264,7 +264,7 @@ cp_option_init (struct cp_options *x) |
|
{ |
|
cp_options_default (x); |
|
x->copy_as_regular = true; |
|
- x->reflink_mode = REFLINK_NEVER; |
|
+ x->reflink_mode = REFLINK_AUTO; |
|
x->dereference = DEREF_ALWAYS; |
|
x->unlink_dest_before_opening = true; |
|
x->unlink_dest_after_failed_open = false; |
|
-- |
|
2.25.4 |
|
|
|
|