Document a special case for Journaling PAD records. PAD records have to
authorMatthew Dillon <dillon@dragonflybsd.org>
Tue, 6 Sep 2005 23:55:04 +0000 (23:55 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Tue, 6 Sep 2005 23:55:04 +0000 (23:55 +0000)
be able to fill up any dead space which, due to 16 byte alignment, can
be as little as 16 bytes.  In this case the rawrecend overlaps the transid
field of the rawrecbeg.  Thus, JREC_MINRECSIZE is actually 16, not 32.

sys/kern/vfs_jops.c
sys/kern/vfs_journal.c
sys/sys/journal.h

index df9c055..f708863 100644 (file)
@@ -31,7 +31,7 @@
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $DragonFly: src/sys/kern/vfs_jops.c,v 1.20 2005/08/24 21:14:21 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_jops.c,v 1.21 2005/09/06 23:55:04 dillon Exp $
  */
 /*
  * Each mount point may have zero or more independantly configured journals
@@ -857,7 +857,7 @@ journal_build_pad(struct journal_rawrecbeg *rawp, int recsize, int64_t transid)
     rawp->recsize = recsize;   /* must be 16-byte aligned */
     rawp->transid = transid;
     /*
-     * WARNING, rendp may overlap rawp->seqno.  This is necessary to
+     * WARNING, rendp may overlap rawp->transid.  This is necessary to
      * allow PAD records to fit in 16 bytes.  Use cpu_ccfence() to
      * hopefully cause the compiler to not make any assumptions.
      */
index 0934cbd..7f0d437 100644 (file)
@@ -31,7 +31,7 @@
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $DragonFly: src/sys/kern/vfs_journal.c,v 1.20 2005/08/24 21:14:21 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_journal.c,v 1.21 2005/09/06 23:55:04 dillon Exp $
  */
 /*
  * Each mount point may have zero or more independantly configured journals
@@ -857,7 +857,7 @@ journal_build_pad(struct journal_rawrecbeg *rawp, int recsize, int64_t transid)
     rawp->recsize = recsize;   /* must be 16-byte aligned */
     rawp->transid = transid;
     /*
-     * WARNING, rendp may overlap rawp->seqno.  This is necessary to
+     * WARNING, rendp may overlap rawp->transid.  This is necessary to
      * allow PAD records to fit in 16 bytes.  Use cpu_ccfence() to
      * hopefully cause the compiler to not make any assumptions.
      */
index 6d314d5..1b00c08 100644 (file)
@@ -31,7 +31,7 @@
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $DragonFly: src/sys/sys/journal.h,v 1.8 2005/09/06 06:42:39 dillon Exp $
+ * $DragonFly: src/sys/sys/journal.h,v 1.9 2005/09/06 23:55:02 dillon Exp $
  */
 
 #ifndef _SYS_JOURNAL_H_
  * The journal_rawrecbeg structure MUST be a multiple of 16 bytes.
  * The journal_rawrecend structure MUST be a multiple of 8 bytes.
  *
- * NOTE: PAD RECORD SPECIAL CASE.  Pad records are 16 bytes and have the
+ * NOTE: PAD RECORD SPECIAL CASE.  Pad records can be 16 bytes and have the
  * rawrecend structure overlayed on the sequence number field of the 
  * rawrecbeg structure.  This is necessary because stream records are
  * 16 byte aligned, not 24 byte aligned, and dead space is not allowed.
- * So the pad record must fit into any dead space.
+ * So the pad record must fit into any dead space.  THEREFORE, THE TRANSID
+ * FIELD FOR A PAD RECORD MUST BE IGNORED.
  */
 struct journal_rawrecbeg {
        u_int16_t begmagic;     /* recovery scan, endianess detection */
@@ -159,7 +160,7 @@ struct journal_ackrecord {
 #define JREC_STREAMID_JMAX     0x2000  /* (one past the highest allowed id) */
 
 #define JREC_DEFAULTSIZE       64      /* reasonable initial reservation */
-#define JREC_MINRECSIZE                32      /* (after alignment) */
+#define JREC_MINRECSIZE                16      /* (after alignment) */
 #define        JREC_MAXRECSIZE         (128*1024*1024)
 
 /*