forked from pool/coreutils
Accepting request 517127 from home:ganghe:branches:Base:System
Drop coreutils-ocfs2_reflinks.patch,OCFS2 file system has supported file clone ioctls like btrfs, then, coreutils doesn't need this patch from the kernel v4.10-rc1. OBS-URL: https://build.opensuse.org/request/show/517127 OBS-URL: https://build.opensuse.org/package/show/Base:System/coreutils?expand=0&rev=284
This commit is contained in:
parent
e5b0115662
commit
029e3f835a
@ -1,123 +0,0 @@
|
|||||||
>From 34556c4e36effc165032724cd37e6a4d2682f880 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jie Liu <jeff....@oracle.com>
|
|
||||||
Date: Tue, 3 May 2011 22:21:41 +0800
|
|
||||||
Subject: [PATCH 1/1] copy: add OCFS2 reflink support
|
|
||||||
|
|
||||||
* src/copy.c (copy_reg): When cp is invoked with '--reflink=[WHEN]', try
|
|
||||||
OCFS2 reflink file first, if it fails, try btrfs clone file later if
|
|
||||||
possible. The reflink will fail with EEXIST if the destination file
|
|
||||||
already exists on OCFS2, in this case, it means the user intended to
|
|
||||||
do OCFS2 reflink rather than btrfs clone, so we need not try the latter.
|
|
||||||
|
|
||||||
Signed-off-by: Jie Liu <jeff....@oracle.com>
|
|
||||||
---
|
|
||||||
src/copy.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
|
|
||||||
1 file changed, 81 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
Index: src/copy.c
|
|
||||||
===================================================================
|
|
||||||
--- src/copy.c.orig
|
|
||||||
+++ src/copy.c
|
|
||||||
@@ -327,6 +327,47 @@ sparse_copy (int src_fd, int dest_fd, ch
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* Perform the OCFS2 CoW reflink ioctl(2) operation if possible.
|
|
||||||
+ When using '-p' option, the file's default attributes(i.e. mode,timestamp,
|
|
||||||
+ ownership and security context if possbile) are reflinked to the destination
|
|
||||||
+ file as well, we will then skip over the standard preserve process for such
|
|
||||||
+ attributes. Upon success, return 0, Otherwise, return -1 and set errno. */
|
|
||||||
+static inline int
|
|
||||||
+reflink_file (char const *src_name, char const *dst_name,
|
|
||||||
+ int src_fd, bool preserve_attrs)
|
|
||||||
+{
|
|
||||||
+#ifdef __linux__
|
|
||||||
+# ifndef REFLINK_ATTR_NONE
|
|
||||||
+# define REFLINK_ATTR_NONE 0
|
|
||||||
+# endif
|
|
||||||
+# ifndef REFLINK_ATTR_PRESERVE
|
|
||||||
+# define REFLINK_ATTR_PRESERVE 1
|
|
||||||
+# endif
|
|
||||||
+# ifndef OCFS2_IOC_REFLINK
|
|
||||||
+ struct reflink_arguments {
|
|
||||||
+ uint64_t old_path;
|
|
||||||
+ uint64_t new_path;
|
|
||||||
+ uint64_t preserve;
|
|
||||||
+ };
|
|
||||||
+# define OCFS2_IOC_REFLINK _IOW ('o', 4, struct reflink_arguments)
|
|
||||||
+# endif
|
|
||||||
+ struct reflink_arguments args = {
|
|
||||||
+ .old_path = (unsigned long) src_name,
|
|
||||||
+ .new_path = (unsigned long) dst_name,
|
|
||||||
+ .preserve = preserve_attrs ? REFLINK_ATTR_PRESERVE : REFLINK_ATTR_NONE,
|
|
||||||
+ };
|
|
||||||
+ return ioctl (src_fd, OCFS2_IOC_REFLINK, &args);
|
|
||||||
+#else
|
|
||||||
+ (void) src_name;
|
|
||||||
+ (void) dst_name;
|
|
||||||
+ (void) src_fd;
|
|
||||||
+ (void) preserve_attrs;
|
|
||||||
+ errno = ENOTSUP;
|
|
||||||
+ return -1;
|
|
||||||
+#endif
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
/* Perform the O(1) btrfs clone operation, if possible.
|
|
||||||
Upon success, return 0. Otherwise, return -1 and set errno. */
|
|
||||||
static inline int
|
|
||||||
@@ -1057,6 +1098,45 @@ copy_reg (char const *src_name, char con
|
|
||||||
goto close_src_desc;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /* When cp is invoked with '--reflink=[WHEN]', try to do OCFS2 reflink
|
|
||||||
+ ioctl(2) first, if it fails, try btrfs clone file later if possible.
|
|
||||||
+ The reason why perform those operations separately is because `cp'
|
|
||||||
+ will create the destination file if it is a '*new_dst'. In this case,
|
|
||||||
+ we have to unlink(2) it firstly, otherwise, OCFS2 reflink will fail with
|
|
||||||
+ 'EEXIST'. */
|
|
||||||
+ bool reflink_ok = false;
|
|
||||||
+ if (data_copy_required && x->reflink_mode)
|
|
||||||
+ {
|
|
||||||
+ bool preserve_attributes = (x->preserve_ownership
|
|
||||||
+ && x->preserve_mode
|
|
||||||
+ && x->preserve_timestamps);
|
|
||||||
+ reflink_ok = reflink_file (src_name, dst_name, source_desc,
|
|
||||||
+ preserve_attributes) == 0;
|
|
||||||
+ if (reflink_ok)
|
|
||||||
+ {
|
|
||||||
+ *new_dst = false;
|
|
||||||
+
|
|
||||||
+ /* Skip over the standard attributes preserve process
|
|
||||||
+ if reflink succeeds and they are already reflinked. */
|
|
||||||
+ if (preserve_attributes)
|
|
||||||
+ goto close_src_desc;
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ /* When the destination file is aready exists on OCFS2, the
|
|
||||||
+ above reflink should fails with EEXIST. If that happens,
|
|
||||||
+ we need not try btrfs clone again since it means the user
|
|
||||||
+ is definitely want a OCFS2 reflink. */
|
|
||||||
+ if (errno == EEXIST)
|
|
||||||
+ {
|
|
||||||
+ error (0, errno, _("failed to reflink %s from %s"),
|
|
||||||
+ quoteaf_n (0, dst_name), quoteaf_n (1, src_name));
|
|
||||||
+ return_val = false;
|
|
||||||
+ goto close_src_desc;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/* The semantics of the following open calls are mandated
|
|
||||||
by the specs for both cp and mv. */
|
|
||||||
if (! *new_dst)
|
|
||||||
@@ -1200,7 +1280,7 @@ copy_reg (char const *src_name, char con
|
|
||||||
}
|
|
||||||
|
|
||||||
/* --attributes-only overrides --reflink. */
|
|
||||||
- if (data_copy_required && x->reflink_mode)
|
|
||||||
+ if (data_copy_required && x->reflink_mode && ! reflink_ok)
|
|
||||||
{
|
|
||||||
bool clone_ok = clone_file (dest_desc, source_desc) == 0;
|
|
||||||
if (clone_ok || x->reflink_mode == REFLINK_ALWAYS)
|
|
@ -1,3 +1,10 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Aug 16 14:26:30 UTC 2017 - ghe@suse.com
|
||||||
|
|
||||||
|
- Drop coreutils-ocfs2_reflinks.patch
|
||||||
|
OCFS2 file system has supported file clone ioctls like btrfs,
|
||||||
|
then, coreutils doesn't need this patch from the kernel v4.10-rc1
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue May 2 21:29:32 UTC 2017 - mail@bernhard-voelker.de
|
Tue May 2 21:29:32 UTC 2017 - mail@bernhard-voelker.de
|
||||||
|
|
||||||
|
@ -106,9 +106,6 @@ Patch16: coreutils-invalid-ids.patch
|
|||||||
# OBS / RPMLINT require /usr/bin/timeout to be built with the -fpie option.
|
# OBS / RPMLINT require /usr/bin/timeout to be built with the -fpie option.
|
||||||
Patch100: coreutils-build-timeout-as-pie.patch
|
Patch100: coreutils-build-timeout-as-pie.patch
|
||||||
|
|
||||||
# At least a bit of reflink support
|
|
||||||
Patch111: coreutils-ocfs2_reflinks.patch
|
|
||||||
|
|
||||||
# There is no network in the build root so make the test succeed
|
# There is no network in the build root so make the test succeed
|
||||||
Patch112: coreutils-getaddrinfo.patch
|
Patch112: coreutils-getaddrinfo.patch
|
||||||
|
|
||||||
@ -167,7 +164,6 @@ the GNU fileutils, sh-utils, and textutils packages.
|
|||||||
%if %{suse_version} <= 1320
|
%if %{suse_version} <= 1320
|
||||||
%patch100
|
%patch100
|
||||||
%endif
|
%endif
|
||||||
%patch111
|
|
||||||
%patch112
|
%patch112
|
||||||
%patch113
|
%patch113
|
||||||
|
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Aug 16 14:26:30 UTC 2017 - ghe@suse.com
|
||||||
|
|
||||||
|
- Drop coreutils-ocfs2_reflinks.patch
|
||||||
|
OCFS2 file system has supported file clone ioctls like btrfs,
|
||||||
|
then, coreutils doesn't need this patch from the kernel v4.10-rc1
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue May 2 21:29:32 UTC 2017 - mail@bernhard-voelker.de
|
Tue May 2 21:29:32 UTC 2017 - mail@bernhard-voelker.de
|
||||||
|
|
||||||
|
@ -106,9 +106,6 @@ Patch16: coreutils-invalid-ids.patch
|
|||||||
# OBS / RPMLINT require /usr/bin/timeout to be built with the -fpie option.
|
# OBS / RPMLINT require /usr/bin/timeout to be built with the -fpie option.
|
||||||
Patch100: coreutils-build-timeout-as-pie.patch
|
Patch100: coreutils-build-timeout-as-pie.patch
|
||||||
|
|
||||||
# At least a bit of reflink support
|
|
||||||
Patch111: coreutils-ocfs2_reflinks.patch
|
|
||||||
|
|
||||||
# There is no network in the build root so make the test succeed
|
# There is no network in the build root so make the test succeed
|
||||||
Patch112: coreutils-getaddrinfo.patch
|
Patch112: coreutils-getaddrinfo.patch
|
||||||
|
|
||||||
@ -167,7 +164,6 @@ the GNU fileutils, sh-utils, and textutils packages.
|
|||||||
%if %{suse_version} <= 1320
|
%if %{suse_version} <= 1320
|
||||||
%patch100
|
%patch100
|
||||||
%endif
|
%endif
|
||||||
%patch111
|
|
||||||
%patch112
|
%patch112
|
||||||
%patch113
|
%patch113
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user