The branch main has been updated by jah:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=e81e71b0e9cbb5515ffb31bf80088fd7b20e7994

commit e81e71b0e9cbb5515ffb31bf80088fd7b20e7994
Author:     Jason A. Harmening <j...@freebsd.org>
AuthorDate: 2021-08-08 05:31:02 +0000
Commit:     Jason A. Harmening <j...@freebsd.org>
CommitDate: 2021-08-20 20:21:56 +0000

    Use interruptible wait for blocking recursive unmounts
    
    Now that we allow recursive unmount attempts to be abandoned upon
    exceeding the retry limit, we should avoid leaving an unkillable
    thread when a synchronous unmount request was issued against the
    base filesystem.
    
    Reviewed by:    kib (earlier revision), mkusick
    Differential Revision:  https://reviews.freebsd.org/D31450
---
 sys/kern/vfs_mount.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c
index 0fb5694ebed5..166d7336eaf1 100644
--- a/sys/kern/vfs_mount.c
+++ b/sys/kern/vfs_mount.c
@@ -2084,10 +2084,15 @@ dounmount(struct mount *mp, uint64_t flags, struct 
thread *td)
                 * just re-enqueue on the end of the taskqueue.
                 */
                if ((flags & MNT_DEFERRED) == 0) {
-                       while (!TAILQ_EMPTY(&mp->mnt_uppers)) {
+                       while (error == 0 && !TAILQ_EMPTY(&mp->mnt_uppers)) {
                                mp->mnt_kern_flag |= MNTK_TASKQUEUE_WAITER;
-                               msleep(&mp->mnt_taskqueue_link, MNT_MTX(mp), 0,
-                                   "umntqw", 0);
+                               error = msleep(&mp->mnt_taskqueue_link,
+                                   MNT_MTX(mp), PCATCH, "umntqw", 0);
+                       }
+                       if (error != 0) {
+                               MNT_REL(mp);
+                               MNT_IUNLOCK(mp);
+                               return (error);
                        }
                } else if (!TAILQ_EMPTY(&mp->mnt_uppers)) {
                        MNT_IUNLOCK(mp);
_______________________________________________
dev-commits-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "dev-commits-src-all-unsubscr...@freebsd.org"

Reply via email to