small bits from sources. NB: this difference from sources remails *surely* they don't mean to memset 4 bytes on 32-bit machines, and 8 bytes on 64-bit machines. buf is a ptr. /n/dump/2014/0320/sys/src/cmd/venti/srv/fixarenas.c:130,141 - srv/fixarenas.c:130,141 int i, j, k, n; if(offset >= partend){ - memset(buf, 0xFB, sizeof buf); + memset(buf, 0xFB, len); return buf; } if(offset+len > partend){ - memset(buf, 0xFB, sizeof buf); + memset(buf, 0xFB, len); len = partend - offset; } Reference: /n/atom/patch/applied/ventiemergency Date: Thu Mar 20 15:45:02 CET 2014 Signed-off-by: quanstro@quanstro.net --- /sys/src/cmd/venti/srv/arenas.c Thu Mar 20 15:43:32 2014 +++ /sys/src/cmd/venti/srv/arenas.c Thu Mar 20 15:43:32 2014 @@ -15,7 +15,8 @@ enum { - AHashSize = 512 + AHashSize = 512, + Emergency = 0, /* flag: performing emergency surgery */ }; static AHash *ahash[AHashSize]; @@ -142,8 +143,11 @@ ap->narenas = amn.n; ap->map = amn.map; if(okamap(ap->map, ap->narenas, ap->arenabase, ap->size, "arena table") < 0){ - freearenapart(ap, 0); - return nil; + if(!Emergency){ + freearenapart(ap, 0); + return nil; + } + /* else keep on, for emergency use */ } ap->arenas = MKNZ(Arena*, ap->narenas); @@ -152,8 +156,14 @@ ap->arenas[i] = initarena(part, ap->map[i].start, ap->map[i].stop - ap->map[i].start, ap->blocksize); if(ap->arenas[i] == nil){ seterr(ECorrupt, "%s: %r", ap->map[i].name); - freearenapart(ap, 1); - return nil; + if(!Emergency){ + freearenapart(ap, 1); + return nil; + }else{ + /* keep on, for emergency use */ + ap->narenas = i; + break; + } } if(namecmp(ap->map[i].name, ap->arenas[i]->name) != 0){ seterr(ECorrupt, "arena name mismatches with expected name: %s vs. %s", --- /sys/src/cmd/venti/copy.c Thu Mar 20 15:43:32 2014 +++ /sys/src/cmd/venti/copy.c Thu Mar 20 15:43:32 2014 @@ -37,13 +37,9 @@ b = (ScoreTree*)vb; i = memcmp(a->score, b->score, VtScoreSize); - if(i == 0) - i = a->type - b->type; - if(i > 0) - i = 1; - if(i < 0) - i = -1; - return i; + if(i != 0) + return i; + return a->type - b->type; } static int