From 6019e6208ff3bc5fd13ae2cadd920d784f3bbeca Mon Sep 17 00:00:00 2001 From: Kirk McKusick Date: Sun, 18 Jun 2000 22:14:28 +0000 Subject: [PATCH] When running with quotas enabled on a filesystem using soft updates, the system would panic when a user's inode quota was exceeded (see PR 18959 for details). This fixes that problem. PR: 18959 Submitted by: Jason Godsey --- sys/contrib/softupdates/ffs_softdep.c | 5 +++-- sys/ufs/ffs/ffs_softdep.c | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/sys/contrib/softupdates/ffs_softdep.c b/sys/contrib/softupdates/ffs_softdep.c index 6773d171a67..90f01f5b208 100644 --- a/sys/contrib/softupdates/ffs_softdep.c +++ b/sys/contrib/softupdates/ffs_softdep.c @@ -52,7 +52,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * from: @(#)ffs_softdep.c 9.57 (McKusick) 3/17/00 + * from: @(#)ffs_softdep.c 9.58 (McKusick) 6/18/00 * $FreeBSD$ */ @@ -1912,7 +1912,8 @@ check_inode_unwritten(inodedep) inodedep->id_state |= ALLCOMPLETE; LIST_REMOVE(inodedep, id_deps); inodedep->id_buf = NULL; - WORKLIST_REMOVE(&inodedep->id_list); + if (inodedep->id_state & ONWORKLIST) + WORKLIST_REMOVE(&inodedep->id_list); if (inodedep->id_savedino != NULL) { FREE(inodedep->id_savedino, M_INODEDEP); inodedep->id_savedino = NULL; diff --git a/sys/ufs/ffs/ffs_softdep.c b/sys/ufs/ffs/ffs_softdep.c index 6773d171a67..90f01f5b208 100644 --- a/sys/ufs/ffs/ffs_softdep.c +++ b/sys/ufs/ffs/ffs_softdep.c @@ -52,7 +52,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * from: @(#)ffs_softdep.c 9.57 (McKusick) 3/17/00 + * from: @(#)ffs_softdep.c 9.58 (McKusick) 6/18/00 * $FreeBSD$ */ @@ -1912,7 +1912,8 @@ check_inode_unwritten(inodedep) inodedep->id_state |= ALLCOMPLETE; LIST_REMOVE(inodedep, id_deps); inodedep->id_buf = NULL; - WORKLIST_REMOVE(&inodedep->id_list); + if (inodedep->id_state & ONWORKLIST) + WORKLIST_REMOVE(&inodedep->id_list); if (inodedep->id_savedino != NULL) { FREE(inodedep->id_savedino, M_INODEDEP); inodedep->id_savedino = NULL;