ref: e62e48db2a4c71875f9e7ab44f8c11ea3b749a5f
parent: 3c0cb629fe2956046ab1aab819e1baf5b5993457
author: Ori Bernstein <[email protected]>
date: Mon Oct 17 19:15:05 EDT 2022
all: pack integers in big endian form for better lexical sorting we do a lot of sequential scans in gefs, and cache locality benefits quite a bit from keeping these buffers sequential.
--- a/blk.c
+++ b/blk.c
@@ -83,7 +83,7 @@
while(rem != 0){
n = pread(fs->fd, b->buf, rem, off);
if(n <= 0){
- free(b);
+ dropblk(b);
return nil;
}
off += n;
@@ -94,7 +94,7 @@
b->hnext = nil;
b->flag = 0;
- b->type = (flg&GBraw) ? Traw : GBIT16(b->buf+0);
+ b->type = (flg&GBraw) ? Traw : UNPACK16(b->buf+0);
b->bp.addr = bp;
b->bp.hash = -1;
b->bp.gen = -1;
@@ -123,15 +123,15 @@
break;
case Tpivot:
b->data = b->buf + Pivhdsz;
- b->nval = GBIT16(b->buf+2);
- b->valsz = GBIT16(b->buf+4);
- b->nbuf = GBIT16(b->buf+6);
- b->bufsz = GBIT16(b->buf+8);
+ b->nval = UNPACK16(b->buf+2);
+ b->valsz = UNPACK16(b->buf+4);
+ b->nbuf = UNPACK16(b->buf+6);
+ b->bufsz = UNPACK16(b->buf+8);
break;
case Tleaf:
b->data = b->buf + Leafhdsz;
- b->nval = GBIT16(b->buf+2);
- b->valsz = GBIT16(b->buf+4);
+ b->nval = UNPACK16(b->buf+2);
+ b->valsz = UNPACK16(b->buf+4);
break;
}
assert(b->magic == Magic);
@@ -276,8 +276,8 @@
cacheins(lb);
lb->logsz = Loghashsz;
p = lb->data + lb->logsz;
- PBIT64(p+0, o|LogAlloc1);
- PBIT64(p+8, (uvlong)LogEnd);
+ PACK64(p+0, o|LogAlloc1);
+ PACK64(p+8, (uvlong)LogEnd);
finalize(lb);
if(syncblk(lb) == -1){
dropblk(lb);
@@ -286,7 +286,7 @@
if(pb != nil){
p = pb->data + pb->logsz;
- PBIT64(p, lb->bp.addr|LogChain);
+ PACK64(p, lb->bp.addr|LogChain);
finalize(pb);
if(syncblk(pb) == -1){
dropblk(pb);
@@ -305,10 +305,10 @@
}
off |= op;
p = lb->data + lb->logsz;
- PBIT64(p, off);
+ PACK64(p, off);
lb->logsz += 8;
if(op >= Log2wide){
- PBIT64(p+8, len);
+ PACK64(p+8, len);
lb->logsz += 8;
}
/*
@@ -325,7 +325,7 @@
logop(a, o, Blksz, LogAlloc);
/* this gets overwritten by the next append */
p = lb->data + lb->logsz;
- PBIT64(p, (uvlong)LogEnd);
+ PACK64(p, (uvlong)LogEnd);
return 0;
}
@@ -355,7 +355,7 @@
Nextblk:
if((b = getblk(bp, GBnochk)) == nil)
return -1;
- bh = GBIT64(b->data);
+ bh = UNPACK64(b->data);
/* the hash covers the log and offset */
if(bh != siphash(b->data+Loghashsz, Logspc-Loghashsz)){
werrstr("corrupt log");
@@ -363,7 +363,7 @@
}
for(i = Loghashsz; i < Logspc; i += n){
d = b->data + i;
- ent = GBIT64(d);
+ ent = UNPACK64(d);
op = ent & 0xff;
off = ent & ~0xff;
n = (op >= Log2wide) ? 16 : 8;
@@ -383,7 +383,7 @@
case LogAlloc:
case LogAlloc1:
- len = (op >= Log2wide) ? GBIT64(d+8) : Blksz;
+ len = (op >= Log2wide) ? UNPACK64(d+8) : Blksz;
dprint("log@%d alloc: %llx+%llx\n", i, off, len);
if(grabrange(a->free, off & ~0xff, len) == -1)
return -1;
@@ -390,7 +390,7 @@
break;
case LogFree:
case LogFree1:
- len = (op >= Log2wide) ? GBIT64(d+8) : Blksz;
+ len = (op >= Log2wide) ? UNPACK64(d+8) : Blksz;
dprint("log@%d free: %llx+%llx\n", i, off, len);
if(freerange(a->free, off & ~0xff, len) == -1)
return -1;
@@ -436,7 +436,7 @@
b->logsz = Loghashsz;
p = b->data + b->logsz;
- PBIT64(p, (uvlong)LogEnd);
+ PACK64(p, (uvlong)LogEnd);
finalize(b);
if(syncblk(b) == -1){
dropblk(b);
@@ -495,7 +495,7 @@
return -1;
p = tl->data + tl->logsz;
- PBIT64(p, LogChain|graft);
+ PACK64(p, LogChain|graft);
free(log);
finalize(tl);
if(syncblk(tl) == -1)
@@ -517,7 +517,7 @@
return -1;
for(i = Loghashsz; i < Logspc; i += n){
p = b->data + i;
- v = GBIT64(p);
+ v = UNPACK64(p);
n = ((v&0xff) >= Log2wide) ? 16 : 8;
if((v&0xff) == LogChain){
na = v & ~0xff;
@@ -727,25 +727,25 @@
uvlong h;
if(b->type != Traw)
- PBIT16(b->buf, b->type);
+ PACK16(b->buf, b->type);
switch(b->type){
default:
case Tpivot:
- PBIT16(b->buf+2, b->nval);
- PBIT16(b->buf+4, b->valsz);
- PBIT16(b->buf+6, b->nbuf);
- PBIT16(b->buf+8, b->bufsz);
+ PACK16(b->buf+2, b->nval);
+ PACK16(b->buf+4, b->valsz);
+ PACK16(b->buf+6, b->nbuf);
+ PACK16(b->buf+8, b->bufsz);
b->bp.hash = blkhash(b);
break;
case Tleaf:
- PBIT16(b->buf+2, b->nval);
- PBIT16(b->buf+4, b->valsz);
+ PACK16(b->buf+2, b->nval);
+ PACK16(b->buf+4, b->valsz);
b->bp.hash = blkhash(b);
break;
case Tlog:
case Tdead:
h = siphash(b->data + Loghashsz, Logspc-Loghashsz);
- PBIT64(b->data, h);
+ PACK64(b->data, h);
b->bp.hash = blkhash(b);
break;
case Traw:
@@ -772,6 +772,7 @@
qunlock(&fs->blklk[i]);
return b;
}
+ dprint("read %B from %#llx\n", bp, getcallerpc(&bp));
if((b = readblk(bp.addr, flg)) == nil){
qunlock(&fs->blklk[i]);
return nil;
--- a/dat.h
+++ b/dat.h
@@ -216,7 +216,7 @@
Tleaf,
Tlog,
Tdead,
- Tarena = 0x6567, /* 'ge' */
+ Tarena = 0x6765, /* 'ge' bigendian */
};
enum {
--- a/dump.c
+++ b/dump.c
@@ -23,19 +23,19 @@
return fmtprint(fmt, "\"\"");
switch(k->k[0]){
case Kdat: /* qid[8] off[8] => ptr[16]: pointer to data page */
- n = fmtprint(fmt, "dat qid:%llx off:%llx", GBIT64(k->k+1), GBIT64(k->k+9));
+ n = fmtprint(fmt, "dat qid:%llx off:%llx", UNPACK64(k->k+1), UNPACK64(k->k+9));
break;
case Kent: /* pqid[8] name[n] => dir[n]: serialized Dir */
- n = fmtprint(fmt, "ent dir:%llx, name:\"%.*s\")", GBIT64(k->k+1), k->nk-11, k->k+11);
+ n = fmtprint(fmt, "ent dir:%llx, name:\"%.*s\")", UNPACK64(k->k+1), k->nk-11, k->k+11);
break;
case Klabel: /* name[n] => tree[24]: snapshot ref */
n = fmtprint(fmt, "label name:\"%.*s\"", k->nk-1, k->k+1);
break;
case Ksnap: /* name[n] => tree[24]: snapshot root */
- n = fmtprint(fmt, "snap id:\"%llx\"", GBIT64(k->k+1));
+ n = fmtprint(fmt, "snap id:\"%llx\"", UNPACK64(k->k+1));
break;
case Ksuper: /* qid[8] => pqid[8]: parent dir */
- n = fmtprint(fmt, "up dir:%llx", GBIT64(k->k+1));
+ n = fmtprint(fmt, "up dir:%llx", UNPACK64(k->k+1));
break;
default:
n = fmtprint(fmt, "%.*H", k->nk, k->k);
@@ -55,7 +55,7 @@
n = 0;
if(flg){
assert(v->nv == Ptrsz+2);
- n = fmtprint(fmt, "(%B,%d)", unpackbp(v->v, v->nv), GBIT16(v->v+Ptrsz));
+ n = fmtprint(fmt, "(%B,%d)", unpackbp(v->v, v->nv), UNPACK16(v->v+Ptrsz));
return n;
}
if(op == Odelete || op == Oclearb){
@@ -93,31 +93,31 @@
p = v->v;
ws = *p++;
if(ws & Owsize){
- n += fmtprint(fmt, "size:%llx ", GBIT64(p));
+ n += fmtprint(fmt, "size:%llx ", UNPACK64(p));
p += 8;
}
if(ws & Owmode){
- n += fmtprint(fmt, "mode:%uo ", GBIT32(p));
+ n += fmtprint(fmt, "mode:%uo ", UNPACK32(p));
p += 4;
}
if(ws & Owmtime){
- n += fmtprint(fmt, "mtime:%llx ", GBIT64(p));
+ n += fmtprint(fmt, "mtime:%llx ", UNPACK64(p));
p += 8;
}
if(ws & Owatime){
- n += fmtprint(fmt, "mtime:%llx ", GBIT64(p));
+ n += fmtprint(fmt, "mtime:%llx ", UNPACK64(p));
p += 8;
}
if(ws & Owuid){
- n += fmtprint(fmt, "uid:%d ", GBIT32(p));
+ n += fmtprint(fmt, "uid:%d ", UNPACK32(p));
p += 4;
}
if(ws & Owgid){
- n += fmtprint(fmt, "gid:%d ", GBIT32(p));
+ n += fmtprint(fmt, "gid:%d ", UNPACK32(p));
p += 4;
}
if(ws & Owmuid){
- n += fmtprint(fmt, "muid:%d ", GBIT32(p));
+ n += fmtprint(fmt, "muid:%d ", UNPACK32(p));
p += 4;
}
if(p != v->v + v->nv){
@@ -133,10 +133,10 @@
n = fmtprint(fmt, "ref: %d, ht: %d, bp: %B, prev=%lld", t.ref, t.ht, t.bp, t.dead[0].prev);
break;
case Klabel:
- n = fmtprint(fmt, "snap id:\"%llx\"", GBIT64(v->v+1));
+ n = fmtprint(fmt, "snap id:\"%llx\"", UNPACK64(v->v+1));
break;
case Ksuper: /* qid[8] => pqid[8]: parent dir */
- n = fmtprint(fmt, "super dir:%llx, name:\"%.*s\")", GBIT64(v->v+1), v->nv-11, v->v+11);
+ n = fmtprint(fmt, "super dir:%llx, name:\"%.*s\")", UNPACK64(v->v+1), v->nv-11, v->v+11);
break;
default:
n = fmtprint(fmt, "%.*H", v->nk, v->k);
@@ -384,7 +384,7 @@
if(na != 0){
sz = Snapsz;
id = atoll(ap[0]);
- PBIT64(pfx+1, id);
+ PACK64(pfx+1, id);
}
if((e = btscan(&fs->snap, s, pfx, sz)) != nil){
fprint(fd, "scan: %s\n", e);
--- a/fns.h
+++ b/fns.h
@@ -11,6 +11,21 @@
extern int debug;
extern char* forceuser;
+#define UNPACK8(p) (((uchar*)(p))[0])
+#define UNPACK16(p) ((((uchar*)(p))[0]<<8)|(((uchar*)(p))[1]))
+#define UNPACK32(p) ((((uchar*)(p))[0]<<24)|(((uchar*)(p))[1]<<16)|\
+ (((uchar*)(p))[2]<<8)|(((uchar*)(p))[3]))
+#define UNPACK64(p) (((u64int)((((uchar*)(p))[0]<<24)|(((uchar*)(p))[1]<<16)|\
+ (((uchar*)(p))[2]<<8)|(((uchar*)(p))[3])))<<32 |\
+ ((u64int)((((uchar*)(p))[4]<<24)|(((uchar*)(p))[5]<<16)|\
+ (((uchar*)(p))[6]<<8)|(((uchar*)(p))[7]))))
+
+#define PACK8(p,v) do{(p)[0]=(v);}while(0)
+#define PACK16(p,v) do{(p)[0]=(v)>>8;(p)[1]=(v);}while(0)
+#define PACK32(p,v) do{(p)[0]=(v)>>24;(p)[1]=(v)>>16;(p)[2]=(v)>>8;(p)[3]=(v);}while(0)
+#define PACK64(p,v) do{(p)[0]=(v)>>56;(p)[1]=(v)>>48;(p)[2]=(v)>>40;(p)[3]=(v)>>32;\
+ (p)[4]=(v)>>24;(p)[5]=(v)>>16;(p)[6]=(v)>>8;(p)[7]=(v);}while(0)
+
Blk* newblk(int type);
Blk* dupblk(Blk*);
Blk* getroot(Tree*, int*);
--- a/fs.c
+++ b/fs.c
@@ -237,8 +237,8 @@
m.nk = sizeof(buf);
m.op = Oclearb;
m.k[0] = Kdat;
- PBIT64(m.k+1, f->qpath);
- PBIT64(m.k+9, o);
+ PACK64(m.k+1, f->qpath);
+ PACK64(m.k+9, o);
m.v = nil;
m.nv = 0;
if((e = btupsert(f->mnt->root, &m, 1)) != nil)
@@ -268,8 +268,8 @@
k.k = buf;
k.nk = sizeof(buf);
k.k[0] = Kdat;
- PBIT64(k.k+1, f->qpath);
- PBIT64(k.k+9, fb);
+ PACK64(k.k+1, f->qpath);
+ PACK64(k.k+9, fb);
e = lookup(f, &k, &kv, kvbuf, sizeof(kvbuf));
if(e != nil){
@@ -302,8 +302,8 @@
fo = o & (Blksz-1);
m->k[0] = Kdat;
- PBIT64(m->k+1, f->qpath);
- PBIT64(m->k+9, fb);
+ PACK64(m->k+1, f->qpath);
+ PACK64(m->k+9, fb);
b = newblk(Traw);
@@ -1109,7 +1109,7 @@
if(d.length != de->length){
n.length = d.length;
op |= Owsize;
- PBIT64(p, n.length);
+ PACK64(p, n.length);
p += 8;
}
}
@@ -1126,7 +1126,7 @@
n.mode = d.mode;
n.qid.type = d.mode>>24;
op |= Owmode;
- PBIT32(p, n.mode);
+ PACK32(p, n.mode);
p += 4;
}
}
@@ -1134,7 +1134,7 @@
n.mtime = d.mtime*Nsec;
if(n.mtime != de->mtime){
op |= Owmtime;
- PBIT64(p, n.mtime);
+ PACK64(p, n.mtime);
p += 8;
}
}
@@ -1150,7 +1150,7 @@
runlock(&fs->userlk);
if(n.uid != de->uid){
op |= Owuid;
- PBIT32(p, n.uid);
+ PACK32(p, n.uid);
p += 4;
}
}
@@ -1166,13 +1166,13 @@
runlock(&fs->userlk);
if(n.gid != de->gid){
op |= Owgid;
- PBIT32(p, n.gid);
+ PACK32(p, n.gid);
p += 4;
}
}
op |= Owmuid;
n.muid = f->uid;
- PBIT32(p, n.muid);
+ PACK32(p, n.muid);
p += 4;
/* check permissions */
@@ -1534,8 +1534,8 @@
mb.op = Owstat;
p = buf;
p[0] = Owsize|Owmuid; p += 1;
- PBIT64(p, 0); p += 8;
- PBIT32(p, f->uid); p += 4;
+ PACK64(p, 0); p += 8;
+ PACK32(p, f->uid); p += 4;
mb.k = f->dent->k;
mb.nk = f->dent->nk;
mb.v = buf;
@@ -1800,16 +1800,16 @@
*p++ = 0;
if(n > f->dent->length){
sbuf[0] |= Owsize;
- PBIT64(p, n);
+ PACK64(p, n);
p += 8;
f->dent->length = m->offset+m->count;
}
sbuf[0] |= Owmtime;
f->dent->mtime = nsec();
- PBIT64(p, f->dent->mtime);
+ PACK64(p, f->dent->mtime);
p += 8;
sbuf[0] |= Owmuid;
- PBIT32(p, f->uid);
+ PACK32(p, f->uid);
p += 4;
kv[i].v = sbuf;
--- a/pack.c
+++ b/pack.c
@@ -24,7 +24,7 @@
*err = 1;
return p;
}
- *(ushort*)v = GBIT16(p);
+ *(ushort*)v = UNPACK16(p);
return p+2;
}
@@ -35,7 +35,7 @@
*err = 1;
return p;
}
- *(uint*)v = GBIT32(p);
+ *(uint*)v = UNPACK32(p);
return p+4;
}
@@ -46,7 +46,7 @@
*err = 1;
return p;
}
- *(uvlong*)v = GBIT64(p);
+ *(uvlong*)v = UNPACK64(p);
return p+8;
}
@@ -60,7 +60,7 @@
*err = 1;
return p;
}
- n = GBIT16(p);
+ n = UNPACK16(p);
if(e - p < n + 3 || p[n+2] != 0){
*err = 1;
return p;
@@ -87,7 +87,7 @@
*err = 1;
return p;
}
- PBIT16(p, v);
+ PACK16(p, v);
return p+2;
}
@@ -98,7 +98,7 @@
*err = 1;
return p;
}
- PBIT32(p, v);
+ PACK32(p, v);
return p+4;
}
@@ -109,7 +109,7 @@
*err = 1;
return p;
}
- PBIT64(p, v);
+ PACK64(p, v);
return p+8;
}
@@ -124,7 +124,7 @@
*err = 1;
return p;
}
- PBIT16(p+0, n);
+ PACK16(p+0, n);
memcpy(p+2, s, n);
p[2+n] = 0;
return p+3+n;
@@ -361,7 +361,7 @@
{
assert(sz >= Snapsz);
p[0] = Ksnap; p += 1;
- PBIT64(p, id); p += 8;
+ PACK64(p, id); p += 8;
return p;
}
@@ -369,9 +369,9 @@
packbp(char *p, int sz, Bptr *bp)
{
assert(sz >= Ptrsz);
- PBIT64(p, bp->addr); p += 8;
- PBIT64(p, bp->hash); p += 8;
- PBIT64(p, bp->gen); p += 8;
+ PACK64(p, bp->addr); p += 8;
+ PACK64(p, bp->hash); p += 8;
+ PACK64(p, bp->gen); p += 8;
return p;
}
@@ -381,9 +381,9 @@
Bptr bp;
assert(sz >= Ptrsz);
- bp.addr = GBIT64(p); p += 8;
- bp.hash = GBIT64(p); p += 8;
- bp.gen = GBIT64(p);
+ bp.addr = UNPACK64(p); p += 8;
+ bp.hash = UNPACK64(p); p += 8;
+ bp.gen = UNPACK64(p);
return bp;
}
@@ -396,18 +396,18 @@
assert(sz >= Treesz);
memset(t, 0, sizeof(Tree));
- t->ref = GBIT32(p); p += 4;
- t->ht = GBIT32(p); p += 4;
- t->gen = GBIT64(p); p += 8;
- t->bp.addr = GBIT64(p); p += 8;
- t->bp.hash = GBIT64(p); p += 8;
- t->bp.gen = GBIT64(p); p += 8;
+ t->ref = UNPACK32(p); p += 4;
+ t->ht = UNPACK32(p); p += 4;
+ t->gen = UNPACK64(p); p += 8;
+ t->bp.addr = UNPACK64(p); p += 8;
+ t->bp.hash = UNPACK64(p); p += 8;
+ t->bp.gen = UNPACK64(p); p += 8;
for(i = 0; i < Ndead; i++){
dl = &t->dead[i];
bp = &dl->head;
- dl->prev = GBIT64(p); p += 8;
- bp->addr = GBIT64(p); p += 8;
- bp->hash = GBIT64(p); p += 8;
+ dl->prev = UNPACK64(p); p += 8;
+ bp->addr = UNPACK64(p); p += 8;
+ bp->hash = UNPACK64(p); p += 8;
bp->gen = -1;
t->dead[i].ins = nil; /* loaded on demand */
}
@@ -422,12 +422,12 @@
int i;
assert(sz >= Treesz);
- PBIT32(p, t->ref); p += 4;
- PBIT32(p, t->ht); p += 4;
- PBIT64(p, t->gen); p += 8;
- PBIT64(p, t->bp.addr); p += 8;
- PBIT64(p, t->bp.hash); p += 8;
- PBIT64(p, t->bp.gen); p += 8;
+ PACK32(p, t->ref); p += 4;
+ PACK32(p, t->ht); p += 4;
+ PACK64(p, t->gen); p += 8;
+ PACK64(p, t->bp.addr); p += 8;
+ PACK64(p, t->bp.hash); p += 8;
+ PACK64(p, t->bp.gen); p += 8;
for(i = 0; i < Ndead; i++){
dl = &t->dead[i];
bp = dl->head;
@@ -435,9 +435,9 @@
assert(checkflag(dl->ins, Bfinal));
bp = dl->ins->bp;
}
- PBIT64(p, dl->prev); p += 8;
- PBIT64(p, bp.addr); p += 8;
- PBIT64(p, bp.hash); p += 8;
+ PACK64(p, dl->prev); p += 8;
+ PACK64(p, bp.addr); p += 8;
+ PACK64(p, bp.hash); p += 8;
}
return p;
}
@@ -447,19 +447,19 @@
{
assert(sz == Blksz);
memcpy(p, "gefs0001", 8); p += 8;
- PBIT32(p, Blksz); p += 4;
- PBIT32(p, Bufspc); p += 4;
- PBIT32(p, fi->snap.ht); p += 4;
- PBIT64(p, fi->snap.bp.addr); p += 8;
- PBIT64(p, fi->snap.bp.hash); p += 8;
- PBIT32(p, fi->narena); p += 4;
- PBIT64(p, fi->arenasz); p += 8;
- PBIT64(p, fi->nextqid); p += 8;
- PBIT64(p, fi->nextgen); p += 8;
- PBIT64(p, a->head.addr); p += 8; /* freelist addr */
- PBIT64(p, a->head.hash); p += 8; /* freelist hash */
- PBIT64(p, a->size); p += 8; /* arena size */
- PBIT64(p, a->used); p += 8; /* arena used */
+ PACK32(p, Blksz); p += 4;
+ PACK32(p, Bufspc); p += 4;
+ PACK32(p, fi->snap.ht); p += 4;
+ PACK64(p, fi->snap.bp.addr); p += 8;
+ PACK64(p, fi->snap.bp.hash); p += 8;
+ PACK32(p, fi->narena); p += 4;
+ PACK64(p, fi->arenasz); p += 8;
+ PACK64(p, fi->nextqid); p += 8;
+ PACK64(p, fi->nextgen); p += 8;
+ PACK64(p, a->head.addr); p += 8; /* freelist addr */
+ PACK64(p, a->head.hash); p += 8; /* freelist hash */
+ PACK64(p, a->size); p += 8; /* arena size */
+ PACK64(p, a->used); p += 8; /* arena used */
return p;
}
@@ -474,21 +474,21 @@
return nil;
}
p += 8;
- fi->blksz = GBIT32(p); p += 4;
- fi->bufspc = GBIT32(p); p += 4;
- fi->snap.ht = GBIT32(p); p += 4;
- fi->snap.bp.addr = GBIT64(p); p += 8;
- fi->snap.bp.hash = GBIT64(p); p += 8;
+ fi->blksz = UNPACK32(p); p += 4;
+ fi->bufspc = UNPACK32(p); p += 4;
+ fi->snap.ht = UNPACK32(p); p += 4;
+ fi->snap.bp.addr = UNPACK64(p); p += 8;
+ fi->snap.bp.hash = UNPACK64(p); p += 8;
fi->snap.bp.gen = -1; p += 0;
- fi->narena = GBIT32(p); p += 4;
- fi->arenasz = GBIT64(p); p += 8;
- fi->nextqid = GBIT64(p); p += 8;
- fi->nextgen = GBIT64(p); p += 8;
- a->head.addr = GBIT64(p); p += 8;
- a->head.hash = GBIT64(p); p += 8;
+ fi->narena = UNPACK32(p); p += 4;
+ fi->arenasz = UNPACK64(p); p += 8;
+ fi->nextqid = UNPACK64(p); p += 8;
+ fi->nextgen = UNPACK64(p); p += 8;
+ a->head.addr = UNPACK64(p); p += 8;
+ a->head.hash = UNPACK64(p); p += 8;
a->head.gen = -1; p += 0;
- a->size = GBIT64(p); p += 8;
- a->used = GBIT64(p); p += 8;
+ a->size = UNPACK64(p); p += 8;
+ a->used = UNPACK64(p); p += 8;
a->tail = nil;
return p;
}
--- a/ream.c
+++ b/ream.c
@@ -100,11 +100,11 @@
setflag(b, Bdirty);
p = b->data + Loghashsz;
- PBIT64(p, addr|LogFree); p += 8; /* addr */
- PBIT64(p, asz-Blksz); p += 8; /* len */
- PBIT64(p, b->bp.addr|LogAlloc); p += 8; /* addr */
- PBIT64(p, Blksz); p += 8; /* len */
- PBIT64(p, (uvlong)LogEnd); /* done */
+ PACK64(p, addr|LogFree); p += 8; /* addr */
+ PACK64(p, asz-Blksz); p += 8; /* len */
+ PACK64(p, b->bp.addr|LogAlloc); p += 8; /* addr */
+ PACK64(p, Blksz); p += 8; /* len */
+ PACK64(p, (uvlong)LogEnd); /* done */
finalize(b);
if(syncblk(b) == -1)
sysfatal("ream: init log");
--- a/snap.c
+++ b/snap.c
@@ -26,14 +26,14 @@
Nextblk:
for(i = Loghashsz; i < Logspc; i += 16){
p = b->data + i;
- op = GBIT64(p) & 0xff;
+ op = UNPACK64(p) & 0xff;
switch(op){
case DlEnd:
return 0;
case DlChain:
- bp.addr = GBIT64(p); p += 8;
+ bp.addr = UNPACK64(p); p += 8;
bp.addr &= ~0xffULL;
- bp.hash = GBIT64(p);
+ bp.hash = UNPACK64(p);
bp.gen = -1;
if(lblk)
fn(b->bp, dat);
@@ -41,17 +41,17 @@
return -1;
goto Nextblk;
case DlGraft:
- t.head.addr = GBIT64(p); p += 8;
+ t.head.addr = UNPACK64(p); p += 8;
t.head.addr &= ~0xffULL;
- t.head.hash = GBIT64(p);
+ t.head.hash = UNPACK64(p);
t.head.gen = -1;
t.ins = nil;
scandead(&t, lblk, fn, dat);
break;
case DlKill:
- bp.addr = GBIT64(p); p += 8;
+ bp.addr = UNPACK64(p); p += 8;
bp.hash = -1;
- bp.gen = GBIT64(p);
+ bp.gen = UNPACK64(p);
bp.addr &= ~0xffULL;
fn(bp, dat);
break;
@@ -101,8 +101,8 @@
dropblk(pb);
}
p = lb->data + lb->logsz;
- PBIT64(p, v1); p += 8;
- PBIT64(p, v2); p += 8;
+ PACK64(p, v1); p += 8;
+ PACK64(p, v2); p += 8;
if(dl->head.addr == -1){
end = DlEnd;
hash = -1;
@@ -110,8 +110,8 @@
end = dl->head.addr|DlChain;
hash = dl->head.hash;
}
- PBIT64(p+0, end);
- PBIT64(p+8, hash);
+ PACK64(p+0, end);
+ PACK64(p+8, hash);
lb->logsz = (p - lb->data);
return 0;
}
@@ -162,7 +162,7 @@
return nil;
if(kv.nv != Snapsz)
return nil;
- return opensnap(GBIT64(kv.v + 1));
+ return opensnap(UNPACK64(kv.v + 1));
}
Tree*
--- a/tree.c
+++ b/tree.c
@@ -100,10 +100,10 @@
int o;
assert(i >= 0 && i < b->nval);
- o = GBIT16(b->data + 2*i);
- kv->nk = GBIT16(b->data + o);
+ o = UNPACK16(b->data + 2*i);
+ kv->nk = UNPACK16(b->data + o);
kv->k = b->data + o + 2;
- kv->nv = GBIT16(kv->k + kv->nk);
+ kv->nv = UNPACK16(kv->k + kv->nk);
kv->v = kv->k + kv->nk + 2;
}
@@ -112,7 +112,7 @@
{
assert(kv->nv == Ptrsz || kv->nv == Ptrsz+2);
if(fill != nil)
- *fill = GBIT16(kv->v + Ptrsz);
+ *fill = UNPACK16(kv->v + Ptrsz);
return unpackbp(kv->v, kv->nv);
}
@@ -131,12 +131,12 @@
assert(2*(b->nval+1) <= off);
p = b->data + 2*b->nval;
- PBIT16(p, off);
+ PACK16(p, off);
p = b->data + off;
- PBIT16(p, kv->nk); p += 2;
+ PACK16(p, kv->nk); p += 2;
memcpy(p, kv->k, kv->nk); p += kv->nk;
- PBIT16(p, kv->nv); p += 2;
+ PACK16(p, kv->nv); p += 2;
memcpy(p, kv->v, kv->nv);
b->nval++;
@@ -153,7 +153,7 @@
kv.v = buf;
kv.nv = sizeof(buf);
p = packbp(buf, sizeof(buf), &bp);
- PBIT16(p, fill);
+ PACK16(p, fill);
setval(b, &kv);
}
@@ -168,13 +168,13 @@
p = b->data + Pivspc + 2*b->nbuf;
o = Bufspc - b->bufsz;
- PBIT16(p, o);
+ PACK16(p, o);
p = b->data + Pivspc + o;
*p = m->op; p += 1;
- PBIT16(p, m->nk); p += 2;
+ PACK16(p, m->nk); p += 2;
memcpy(p, m->k, m->nk); p += m->nk;
- PBIT16(p, m->nv); p += 2;
+ PACK16(p, m->nv); p += 2;
memcpy(p, m->v, m->nv);
b->nbuf++;
@@ -188,12 +188,12 @@
assert(b->type == Tpivot);
assert(i >= 0 && i < b->nbuf);
- o = GBIT16(b->data + Pivspc + 2*i);
+ o = UNPACK16(b->data + Pivspc + 2*i);
p = b->data + Pivspc + o;
m->op = *p;
- m->nk = GBIT16(p + 1);
+ m->nk = UNPACK16(p + 1);
m->k = p + 3;
- m->nv = GBIT16(p + 3 + m->nk);
+ m->nv = UNPACK16(p + 3 + m->nk);
m->v = p + 5 + m->nk;
}
@@ -356,32 +356,32 @@
/* bump version */
d.qid.vers++;
if(op & Owsize){
- d.length = GBIT64(p);
+ d.length = UNPACK64(p);
p += 8;
}
if(op & Owmode){
- d.mode = GBIT32(p);
+ d.mode = UNPACK32(p);
d.qid.type = d.mode>>24;
p += 4;
}
if(op & Owmtime){
- d.mtime = GBIT64(p);
+ d.mtime = UNPACK64(p);
p += 8;
}
if(op & Owatime){
- d.atime = GBIT64(p);
+ d.atime = UNPACK64(p);
p += 8;
}
if(op & Owuid){
- d.uid = GBIT32(p);
+ d.uid = UNPACK32(p);
p += 4;
}
if(op & Owgid){
- d.gid = GBIT32(p);
+ d.gid = UNPACK32(p);
p += 4;
}
if(op & Owmuid){
- d.muid = GBIT32(p);
+ d.muid = UNPACK32(p);
p += 4;
}
if(p != m->v + m->nv){
@@ -1172,10 +1172,10 @@
if(ri == -1)
ri = hi+1;
p = r->data + Pivspc + 2*(nbuf+i);
- o = GBIT16(p);
+ o = UNPACK16(p);
p = r->data + Pivspc + 2*ri;
memmove(p+2, p, 2*(nbuf+i-ri));
- PBIT16(p, o);
+ PACK16(p, o);
}
enqueue(r);
--- a/user.c
+++ b/user.c
@@ -62,8 +62,8 @@
k.nk = Offksz;
for(o = 0; o < len; o += Blksz){
k.k[0] = Kdat;
- PBIT64(k.k+1, path);
- PBIT64(k.k+9, o);
+ PACK64(k.k+1, path);
+ PACK64(k.k+9, o);
if((e = btlookup(t, &k, &kv, kvbuf, sizeof(kvbuf))) != nil)
return e;
bp = unpackbp(kv.v, kv.nv);