git: c315699722e8 - stable/14 - msdosfs_integrity_error(): plug possible busy leak
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 25 Jan 2024 03:45:38 UTC
The branch stable/14 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=c315699722e8dda053f8ed6def6d014bbfa5e6d0 commit c315699722e8dda053f8ed6def6d014bbfa5e6d0 Author: Konstantin Belousov <kib@FreeBSD.org> AuthorDate: 2024-01-18 15:35:56 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2024-01-25 03:44:55 +0000 msdosfs_integrity_error(): plug possible busy leak (cherry picked from commit 13ccb04589e2c5c840e19b407a59e44cb70ac28e) --- sys/fs/msdosfs/msdosfs_vfsops.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/sys/fs/msdosfs/msdosfs_vfsops.c b/sys/fs/msdosfs/msdosfs_vfsops.c index df96bcbfe9c6..03c794bad900 100644 --- a/sys/fs/msdosfs/msdosfs_vfsops.c +++ b/sys/fs/msdosfs/msdosfs_vfsops.c @@ -1006,7 +1006,9 @@ msdosfs_remount_ro(void *arg, int pending) } MSDOSFS_UNLOCK_MP(pmp); - vfs_unbusy(pmp->pm_mountp); + do { + vfs_unbusy(pmp->pm_mountp); + } while (--pending >= 0); } void @@ -1015,11 +1017,19 @@ msdosfs_integrity_error(struct msdosfsmount *pmp) int error; error = vfs_busy(pmp->pm_mountp, MBF_NOWAIT); - if (error == 0) - taskqueue_enqueue(taskqueue_thread, &pmp->pm_rw2ro_task); - else + if (error == 0) { + error = taskqueue_enqueue(taskqueue_thread, + &pmp->pm_rw2ro_task); + if (error != 0) { + printf("%s: integrity error scheduling failed, " + "error %d\n", + pmp->pm_mountp->mnt_stat.f_mntfromname, error); + vfs_unbusy(pmp->pm_mountp); + } + } else { printf("%s: integrity error busying failed, error %d\n", pmp->pm_mountp->mnt_stat.f_mntfromname, error); + } } static int