summaryrefslogtreecommitdiffstats
path: root/sys/ufs
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2002-01-10 15:02:57 +0000
committerphk <phk@FreeBSD.org>2002-01-10 15:02:57 +0000
commit64c925b060b2d9c2c01005d3b3d4115bd737fa2f (patch)
treea42d3eec7e4b3ef469044876abda6dbe7e623811 /sys/ufs
parentca0203746a122c766c5b9e1e3f16f44a0f2e53d3 (diff)
downloadFreeBSD-src-64c925b060b2d9c2c01005d3b3d4115bd737fa2f.zip
FreeBSD-src-64c925b060b2d9c2c01005d3b3d4115bd737fa2f.tar.gz
Do not pull quota entries of the cache-list if they have already
been removed from the cache-list as part of a previous unmount. This would result in panics (page fault in dqflush()) during subsequent umounts provided that enough distinct UID's to actually make the hash do something are active. This can probably explain a number of weird quota related behaviours. PR: 32331 maybe more. Reproduced by: Søren Schrørder <sch@cybercity.dk>
Diffstat (limited to 'sys/ufs')
-rw-r--r--sys/ufs/ufs/ufs_quota.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/ufs/ufs/ufs_quota.c b/sys/ufs/ufs/ufs_quota.c
index 7f8e6d8..7abf70c 100644
--- a/sys/ufs/ufs/ufs_quota.c
+++ b/sys/ufs/ufs/ufs_quota.c
@@ -814,7 +814,8 @@ dqget(vp, id, ump, type, dqp)
if (dq->dq_cnt || (dq->dq_flags & DQ_MOD))
panic("dqget: free dquot isn't");
TAILQ_REMOVE(&dqfreelist, dq, dq_freelist);
- LIST_REMOVE(dq, dq_hash);
+ if (dq->dq_ump != NULL)
+ LIST_REMOVE(dq, dq_hash);
}
/*
* Initialize the contents of the dquot structure.
OpenPOWER on IntegriCloud