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