URI: 
       tventi: add arenapart support to wrarena - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 20271fedfbb182304b414c35f049dfb81d31fc9a
   DIR parent b27a990f9fc8cd38e92565901c5be620e75415df
  HTML Author: Russ Cox <rsc@swtch.com>
       Date:   Sat,  7 Apr 2012 15:38:59 -0400
       
       venti: add arenapart support to wrarena
       
       R=rsc
       http://codereview.appspot.com/5988058
       
       Diffstat:
         M src/cmd/venti/srv/wrarena.c         |      18 ++++++++++++++++--
       
       1 file changed, 16 insertions(+), 2 deletions(-)
       ---
   DIR diff --git a/src/cmd/venti/srv/wrarena.c b/src/cmd/venti/srv/wrarena.c
       t@@ -131,6 +131,7 @@ threadmain(int argc, char *argv[])
                int i;
                char *file;
                Arena *arena;
       +        ArenaPart *ap;
                u64int offset, aoffset;
                Part *part;
                uchar buf[8192];
       t@@ -180,6 +181,14 @@ threadmain(int argc, char *argv[])
                part = initpart(file, OREAD);
                if(part == nil)
                        sysfatal("can't open file %s: %r", file);
       +        initdcache(8 * MaxDiskBlock);
       +
       +        // Try as arena partition.
       +        arena = nil;
       +        ap = initarenapart(part);
       +        if(ap == nil)
       +                goto loaded;
       +
                if(readpart(part, aoffset, buf, sizeof buf) < 0)
                        sysfatal("can't read file %s: %r", file);
        
       t@@ -191,12 +200,12 @@ threadmain(int argc, char *argv[])
                                head.size, part->size);
        
                partblocksize(part, head.blocksize);
       -        initdcache(8 * MaxDiskBlock);
        
                arena = initarena(part, aoffset, head.size, head.blocksize);
                if(arena == nil)
                        sysfatal("initarena: %r");
        
       +loaded:
                z = nil;
                if(host==nil || strcmp(host, "/dev/null") != 0){
                        z = vtdial(host);
       t@@ -211,7 +220,12 @@ threadmain(int argc, char *argv[])
                for(i=0; i<12; i++)
                        vtproc(vtsendthread, nil);
        
       -        rdarena(arena, offset);
       +        if(ap != nil) {
       +                for(i=0 i<ap->narenas; i++)
       +                        rdarena(ap->arenas[i], 0);
       +        } else
       +                rdarena(arena, offset);
       +
                memset(&zerocl, 0, sizeof zerocl);
                for(i=0; i<12; i++)
                        send(c, &zerocl);