vacfs: present qids correctly

This commit is contained in:
Russ Cox 2008-06-15 01:46:23 -04:00
parent 4395d738f4
commit fa3c8da1c0
4 changed files with 15 additions and 7 deletions

View file

@ -142,9 +142,16 @@ uvlong
vacfilegetid(VacFile *f) vacfilegetid(VacFile *f)
{ {
/* immutable */ /* immutable */
fprint(2, "getid %s %lld+%lld = %lld\n", f->dir.elem, f->qidoffset, f->dir.qid, f->qidoffset+f->dir.qid);
return f->qidoffset + f->dir.qid; return f->qidoffset + f->dir.qid;
} }
uvlong
vacfilegetqidoffset(VacFile *f)
{
return f->qidoffset;
}
ulong ulong
vacfilegetmcount(VacFile *f) vacfilegetmcount(VacFile *f)
{ {
@ -402,6 +409,7 @@ dirlookup(VacFile *f, char *elem)
filefree(ff); filefree(ff);
goto Err; goto Err;
} }
fprint(2, "offset %s %lld\n", ff->dir.elem, ff->dir.qidoffset);
ff->qidoffset = f->qidoffset + ff->dir.qidoffset; ff->qidoffset = f->qidoffset + ff->dir.qidoffset;
vtfileunlock(meta); vtfileunlock(meta);
vtblockput(b); vtblockput(b);

View file

@ -586,7 +586,9 @@ vacmergefile(VacFile *fp, VacFile *mp, VacDir *d, char *vacfile,
d->qidoffset = offset; d->qidoffset = offset;
d->qidmax = max; d->qidmax = max;
} }
if(vacfilesetdir(f, d) < 0 || vacfilesetentries(f, &ed, &em) < 0){ if(vacfilesetdir(f, d) < 0
|| vacfilesetentries(f, &ed, &em) < 0
|| vacfilesetqidspace(f, d->qidoffset, d->qidmax) < 0){
warn("vacmergefile %s: %r", d->elem); warn("vacmergefile %s: %r", d->elem);
vacfiledecref(mf); vacfiledecref(mf);
vacfiledecref(f); vacfiledecref(f);

View file

@ -135,6 +135,7 @@ int vacfilesetentries(VacFile *f, VtEntry *e, VtEntry *me);
void vdcleanup(VacDir *dir); void vdcleanup(VacDir *dir);
void vdcopy(VacDir *dst, VacDir *src); void vdcopy(VacDir *dst, VacDir *src);
int vacfilesetqidspace(VacFile*, u64int, u64int); int vacfilesetqidspace(VacFile*, u64int, u64int);
uvlong vacfilegetqidoffset(VacFile*);
VacDirEnum *vdeopen(VacFile*); VacDirEnum *vdeopen(VacFile*);
int vderead(VacDirEnum*, VacDir *); int vderead(VacDirEnum*, VacDir *);

View file

@ -637,14 +637,11 @@ vacstat(VacFile *parent, VacDir *vd, uchar *p, int np)
char *ext = nil; char *ext = nil;
#endif #endif
USED(parent);
memset(&dir, 0, sizeof(dir)); memset(&dir, 0, sizeof(dir));
/* dir.qid.path = vd->qid + vacfilegetqidoffset(parent);
* Where do path and version come from if(vd->qidspace)
*/ dir.qid.path += vd->qidoffset;
dir.qid.path = vd->qid;
dir.qid.vers = vd->mcount; dir.qid.vers = vd->mcount;
dir.mode = vd->mode & 0777; dir.mode = vd->mode & 0777;
if(vd->mode & ModeAppend){ if(vd->mode & ModeAppend){