From owner-freebsd-current Sat Feb 14 20:26:00 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id UAA19060 for freebsd-current-outgoing; Sat, 14 Feb 1998 20:26:00 -0800 (PST) (envelope-from owner-freebsd-current@FreeBSD.ORG) Received: from friley585.res.iastate.edu (friley585.res.iastate.edu [129.186.167.85]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id UAA19037 for ; Sat, 14 Feb 1998 20:25:57 -0800 (PST) (envelope-from ccsanady@friley585.res.iastate.edu) Received: from friley585.res.iastate.edu (loopback [127.0.0.1]) by friley585.res.iastate.edu (8.8.8/8.8.5) with ESMTP id WAA00407 for ; Sat, 14 Feb 1998 22:25:54 -0600 (CST) Message-Id: <199802150425.WAA00407@friley585.res.iastate.edu> X-Mailer: exmh version 2.0.1 12/23/97 To: freebsd-current@FreeBSD.ORG Subject: Soft Updates/CCD's don't work together--larger problems perhaps Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Sat, 14 Feb 1998 22:25:53 -0600 From: Chris Csanady Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG As I have mentioned before, using Soft Updates and CCD's together cause a panic in softdep_disk_io_initiation(). The problems seem to be related to the ordering of the bioops.io_start() calls in kern/vfs_cluster.c--it is possible to call this function with B_READ, which will immediately causes the panic. A couple thoughts.. Would it be ok to move around the flag assignment as follows? Also, does there really need to be a call to bioops.io_start() from cluster_rbuild? I noticed that OpenBSD has rearranged things so that the flags are set before the call to bioops.io_start(), to avoid just this problem. Also, they do not call it from cluster_rbuild either.. Could someone who knows more about the VFS code have a look at how the Soft Updates code is integrated here? Thanks, Chris *** vfs_cluster.c.old Sat Feb 14 22:16:20 1998 --- vfs_cluster.c Sat Feb 14 21:36:45 1998 *************** *** 722,727 **** --- 722,729 ---- tbp->b_flags &= ~B_DONE; splx(s); } + tbp->b_flags &= ~(B_READ | B_DONE | B_ERROR | B_DELWRI); + tbp->b_flags |= B_ASYNC; /* check for latent dependencies to be handled */ if ((LIST_FIRST(&tbp->b_dep)) != NULL && bioops.io_start) *************** *** 752,759 **** bp->b_bufsize += size; --numdirtybuffers; - tbp->b_flags &= ~(B_READ | B_DONE | B_ERROR | B_DELWRI); - tbp->b_flags |= B_ASYNC; s = splbio(); reassignbuf(tbp, tbp->b_vp); /* put on clean list */ ++tbp->b_vp->v_numoutput; --- 754,759 ---- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message