Module Name: src
Committed By: hannken
Date: Tue Apr 26 15:37:25 UTC 2022
Modified Files:
src/sys/ufs/ufs: ufs_quota1.c
Log Message:
Keep flag "UFS_QUOTA" set until the last quota is closed.
Prevents a live lock when dqrele() finds a struct with "dq_cnt == 1"
and flag "DQ_MOD" and cannot sync as flag UFS_QUOTA is unset.
To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/sys/ufs/ufs/ufs_quota1.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/ufs/ufs/ufs_quota1.c
diff -u src/sys/ufs/ufs/ufs_quota1.c:1.24 src/sys/ufs/ufs/ufs_quota1.c:1.25
--- src/sys/ufs/ufs/ufs_quota1.c:1.24 Tue Jun 29 22:40:54 2021
+++ src/sys/ufs/ufs/ufs_quota1.c Tue Apr 26 15:37:25 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: ufs_quota1.c,v 1.24 2021/06/29 22:40:54 dholland Exp $ */
+/* $NetBSD: ufs_quota1.c,v 1.25 2022/04/26 15:37:25 hannken Exp $ */
/*
* Copyright (c) 1982, 1986, 1990, 1993, 1995
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ufs_quota1.c,v 1.24 2021/06/29 22:40:54 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ufs_quota1.c,v 1.25 2022/04/26 15:37:25 hannken Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -433,7 +433,6 @@ quota1_handle_cmd_quotaoff(struct lwp *l
return (0);
}
ump->umq1_qflags[type] |= QTF_CLOSING;
- ump->um_flags &= ~UFS_QUOTA;
mutex_exit(&dqlock);
/*
* Search vnodes associated with this mount point,
@@ -470,6 +469,8 @@ quota1_handle_cmd_quotaoff(struct lwp *l
if (ump->um_quotas[i] != NULLVP)
break;
ump->umq1_qflags[type] &= ~QTF_CLOSING;
+ if (i == MAXQUOTAS)
+ ump->um_flags &= ~UFS_QUOTA;
cv_broadcast(&dqcv);
mutex_exit(&dqlock);
kauth_cred_free(cred);