[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
branch version-1.4.0 updated: install: 'umount-cow-store' retries upon E
From: |
guix-commits |
Subject: |
branch version-1.4.0 updated: install: 'umount-cow-store' retries upon EBUSY. |
Date: |
Sat, 10 Dec 2022 08:45:00 -0500 |
This is an automated email from the git hooks/post-receive script.
civodul pushed a commit to branch version-1.4.0
in repository guix.
The following commit(s) were added to refs/heads/version-1.4.0 by this push:
new 61b7e96877 install: 'umount-cow-store' retries upon EBUSY.
61b7e96877 is described below
commit 61b7e9687757aff013b99e4ab15669a950c8b222
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Sat Dec 10 14:33:51 2022 +0100
install: 'umount-cow-store' retries upon EBUSY.
Possibly fixes <https://issues.guix.gnu.org/59884>.
* gnu/build/install.scm (umount*): New procedure.
(unmount-cow-store): Use it instead of 'umount'.
---
gnu/build/install.scm | 23 +++++++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)
diff --git a/gnu/build/install.scm b/gnu/build/install.scm
index 33a9616c0d..d4982650c1 100644
--- a/gnu/build/install.scm
+++ b/gnu/build/install.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès
<ludo@gnu.org>
+;;; Copyright © 2013-2020, 2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
@@ -282,12 +282,31 @@ disk."
(mount "/.rw-store" (%store-directory) "" MS_MOVE)
(rmdir "/.rw-store")))
+(define (umount* directory)
+ "Unmount DIRECTORY, but retry a few times upon EBUSY."
+ (let loop ((attempts 5))
+ (catch 'system-error
+ (lambda ()
+ (umount directory))
+ (lambda args
+ (if (and (= EBUSY (system-error-errno args))
+ (> attempts 0))
+ (begin
+ (sleep 1)
+ (loop (- attempts 1)))
+ (apply throw args))))))
+
(define (unmount-cow-store target backing-directory)
"Unmount copy-on-write store."
(let ((tmp-dir "/remove"))
(mkdir-p tmp-dir)
(mount (%store-directory) tmp-dir "" MS_MOVE)
- (umount tmp-dir)
+
+ ;; We might get EBUSY at this point, possibly because of lingering
+ ;; processes with open file descriptors. Use 'umount*' to retry upon
+ ;; EBUSY, leaving a bit of time. See <https://issues.guix.gnu.org/59884>.
+ (umount* tmp-dir)
+
(rmdir tmp-dir)
(delete-file-recursively
(string-append target backing-directory))))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- branch version-1.4.0 updated: install: 'umount-cow-store' retries upon EBUSY.,
guix-commits <=