Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 14 Feb 1998 22:25:53 -0600
From:      Chris Csanady <ccsanady@friley585.res.iastate.edu>
To:        freebsd-current@FreeBSD.ORG
Subject:   Soft Updates/CCD's don't work together--larger problems perhaps
Message-ID:  <199802150425.WAA00407@friley585.res.iastate.edu>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199802150425.WAA00407>