Date: Wed, 05 Aug 2026 06:22:15 +0000 From: Konstantin Belousov <kib@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Subject: git: 5adc7b1c9141 - stable/15 - vfs_busy(): add MBF_PCATCH flag to allow interrupting the sleep Message-ID: <6a72d697.2650d.28bab8cf@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch stable/15 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=5adc7b1c9141cd002d5b3864c707530a5cce52f1 commit 5adc7b1c9141cd002d5b3864c707530a5cce52f1 Author: Konstantin Belousov <kib@FreeBSD.org> AuthorDate: 2026-07-27 13:40:23 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2026-08-05 06:12:48 +0000 vfs_busy(): add MBF_PCATCH flag to allow interrupting the sleep (cherry picked from commit fb4d7bd4b7676963f9f37ff47f315f8c3652538b) --- sys/kern/vfs_subr.c | 17 ++++++++++++++++- sys/sys/mount.h | 3 ++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index 00795bdd08e7..0e3376929cdb 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -875,6 +875,7 @@ int vfs_busy(struct mount *mp, int flags) { struct mount_pcpu *mpcpu; + int error; MPASS((flags & ~MBF_MASK) == 0); CTR3(KTR_VFS, "%s: mp %p with flags %d", __func__, mp, flags); @@ -919,10 +920,24 @@ vfs_busy(struct mount *mp, int flags) if (flags & MBF_MNTLSTLOCK) mtx_unlock(&mountlist_mtx); mp->mnt_kern_flag |= MNTK_MWAIT; - msleep(mp, MNT_MTX(mp), PVFS | PDROP, "vfs_busy", 0); + error = msleep(mp, MNT_MTX(mp), ((flags & MBF_PCATCH) != 0 ? + PCATCH : 0) | PVFS | PDROP, "vfs_busy", 0); if (flags & MBF_MNTLSTLOCK) mtx_lock(&mountlist_mtx); MNT_ILOCK(mp); + if (error != 0) { + MNT_REL(mp); + + /* + * Clearing MNTK_MWAIT might cause spurious + * wakeups, but better clear our flag there + * then leak it. + */ + mp->mnt_kern_flag &= ~MNTK_MWAIT; + wakeup(mp); + MNT_IUNLOCK(mp); + return (error); + } } if (flags & MBF_MNTLSTLOCK) mtx_unlock(&mountlist_mtx); diff --git a/sys/sys/mount.h b/sys/sys/mount.h index a1e5e4efd460..8636443226e7 100644 --- a/sys/sys/mount.h +++ b/sys/sys/mount.h @@ -768,7 +768,8 @@ struct uio; */ #define MBF_NOWAIT 0x01 #define MBF_MNTLSTLOCK 0x02 -#define MBF_MASK (MBF_NOWAIT | MBF_MNTLSTLOCK) +#define MBF_PCATCH 0x04 +#define MBF_MASK (MBF_NOWAIT | MBF_MNTLSTLOCK | MBF_PCATCH) #ifdef MALLOC_DECLARE MALLOC_DECLARE(M_MOUNT);home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a72d697.2650d.28bab8cf>
