civodul pushed a commit to branch master
in repository guix.

commit ba5e89be8cfa3428d7b41954df8af792986eb5ee
Author: Ludovic Courtès <[email protected]>
Date:   Wed Jan 23 22:27:29 2019 +0100

    deduplication: Ignore EMLINK.
    
    Until now 'guix offload' would fail (transient failure) upon EMLINK.
    
    * guix/store/deduplication.scm (replace-with-link)
    (deduplicate): Ignore EMLINK.
---
 guix/store/deduplication.scm | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/guix/store/deduplication.scm b/guix/store/deduplication.scm
index a777940..8ca16a4 100644
--- a/guix/store/deduplication.scm
+++ b/guix/store/deduplication.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Caleb Ristvedt <[email protected]>
-;;; Copyright © 2018 Ludovic Courtès <[email protected]>
+;;; Copyright © 2018, 2019 Ludovic Courtès <[email protected]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -109,8 +109,9 @@ Note: TARGET, TO-REPLACE, and SWAP-DIRECTORY must be on the 
same file system."
         (get-temp-link target swap-directory))
       (lambda args
         ;; We get ENOSPC when we can't fit an additional entry in
-        ;; SWAP-DIRECTORY.
-        (if (= ENOSPC (system-error-errno args))
+        ;; SWAP-DIRECTORY.  If it's EMLINK, then TARGET has reached its
+        ;; maximum number of links.
+        (if (memv (system-error-errno args) `(,ENOSPC ,EMLINK))
             #f
             (apply throw args)))))
 
@@ -169,4 +170,8 @@ under STORE."
                          ;; more entries in .links, but that's fine: we can
                          ;; just stop.
                          #f)
+                        ((= errno EMLINK)
+                         ;; PATH has reached the maximum number of links, but
+                         ;; that's OK: we just can't deduplicate it more.
+                         #f)
                         (else (apply throw args))))))))))

Reply via email to