diff options
author | phk <phk@FreeBSD.org> | 2002-01-10 15:02:57 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2002-01-10 15:02:57 +0000 |
commit | 64c925b060b2d9c2c01005d3b3d4115bd737fa2f (patch) | |
tree | a42d3eec7e4b3ef469044876abda6dbe7e623811 /sys/ufs | |
parent | ca0203746a122c766c5b9e1e3f16f44a0f2e53d3 (diff) | |
download | FreeBSD-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.c | 3 |
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. |