diff -puN user/kernel/commit.c~log-cleanup user/kernel/commit.c
--- tux3/user/kernel/commit.c~log-cleanup       2009-03-10 09:58:20.000000000 
+0900
+++ tux3-hirofumi/user/kernel/commit.c  2009-03-10 09:58:20.000000000 +0900
@@ -163,8 +163,7 @@ static int stage_delta(struct sb *sb)
 
        /* allocate and write log blocks */
 
-       if (sb->logbuf)
-               log_finish(sb);
+       log_finish(sb);
        for (unsigned index = sb->logthis; index < sb->lognext; index++) {
                block_t block;
                int err = balloc(sb, 1, &block);
diff -puN user/kernel/log.c~log-cleanup user/kernel/log.c
--- tux3/user/kernel/log.c~log-cleanup  2009-03-10 09:58:20.000000000 +0900
+++ tux3-hirofumi/user/kernel/log.c     2009-03-10 09:58:20.000000000 +0900
@@ -14,20 +14,21 @@ void log_next(struct sb *sb)
 
 void log_finish(struct sb *sb)
 {
-       struct logblock *log = bufdata(sb->logbuf);
-       assert(sb->logtop >= sb->logpos);
-       log->bytes = to_be_u16(sb->logpos - log->data);
-       memset(sb->logpos, 0, sb->logtop - sb->logpos);
-       brelse(sb->logbuf);
-       sb->logbuf = NULL;
+       if (sb->logbuf) {
+               struct logblock *log = bufdata(sb->logbuf);
+               assert(sb->logtop >= sb->logpos);
+               log->bytes = to_be_u16(sb->logpos - log->data);
+               memset(sb->logpos, 0, sb->logtop - sb->logpos);
+               brelse(sb->logbuf);
+               sb->logbuf = NULL;
+       }
 }
 
 void *log_begin(struct sb *sb, unsigned bytes)
 {
        mutex_lock(&sb->loglock);
        if (1 || sb->logpos + bytes > sb->logtop) {
-               if (sb->logbuf)
-                       log_finish(sb);
+               log_finish(sb);
                log_next(sb);
                *(struct logblock *)bufdata(sb->logbuf) = (struct logblock){
                        .magic = to_be_u16(0xc0de) };
@@ -43,6 +44,7 @@ void log_end(struct sb *sb, void *pos)
 
 static void log_extent(struct sb *sb, u8 intent, block_t block, unsigned count)
 {
+       assert(count < 256);    /* FIXME: extent max is 64 for now */
        unsigned char *data = log_begin(sb, 8);
        *data++ = intent;
        *data++ = count;
diff -puN user/kernel/tux3.h~log-cleanup user/kernel/tux3.h
--- tux3/user/kernel/tux3.h~log-cleanup 2009-03-10 09:58:20.000000000 +0900
+++ tux3-hirofumi/user/kernel/tux3.h    2009-03-10 09:58:20.000000000 +0900
@@ -348,7 +348,12 @@ struct sb {
 
 /* logging  */
 
-struct logblock { be_u16 magic, bytes; be_u64 logchain; unsigned char data[]; 
};
+struct logblock {
+       be_u16 magic, bytes;
+       u32 unused;
+       be_u64 logchain;
+       unsigned char data[];
+};
 enum { LOG_ALLOC = 0x33, LOG_FREE, LOG_UPDATE, LOG_DROOT, LOG_IROOT, 
LOG_REDIRECT };
 struct commit_entry { be_u64 previous; };
 
_

-- 
OGAWA Hirofumi <hirof...@mail.parknet.co.jp>

_______________________________________________
Tux3 mailing list
Tux3@tux3.org
http://mailman.tux3.org/cgi-bin/mailman/listinfo/tux3

Reply via email to