diff options
author | aiju <aiju@phicode.de> | 2012-08-08 00:52:37 +0200 |
---|---|---|
committer | aiju <aiju@phicode.de> | 2012-08-08 00:52:37 +0200 |
commit | f2c70fe2f708446794af299b1130b7aaf8dc73e5 (patch) | |
tree | 4bec923d87ce8ec064b6303f7494c0d9b1f5c64a /sys/src/cmd/hjfs/fs1.c | |
parent | 34bf0ce496a36746a4f6746f8a187dd66fe7a136 (diff) |
more hjfs fixes
Diffstat (limited to 'sys/src/cmd/hjfs/fs1.c')
-rw-r--r-- | sys/src/cmd/hjfs/fs1.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/src/cmd/hjfs/fs1.c b/sys/src/cmd/hjfs/fs1.c index 4cfbc09ea..784593245 100644 --- a/sys/src/cmd/hjfs/fs1.c +++ b/sys/src/cmd/hjfs/fs1.c @@ -387,7 +387,10 @@ putloc(Fs *fs, Loc *l, int loop) Buf *b; qlock(&fs->loctree); + if(!loop && --l->ref <= 0) + goto freeit; while(loop && l != nil && l->ref <= 1){ +freeit: if((l->flags & LGONE) != 0){ b = getbuf(fs->d, l->blk, TDENTRY, 0); if(b != nil){ @@ -558,12 +561,14 @@ getblk(Fs *fs, FLoc *L, Buf *bd, uvlong blk, uvlong *r, int mode) return -1; memset(b->offs, 0, sizeof(b->offs)); }else{ - if(mode != GBREAD && chref(fs, *loc, 0) > 1) + if(mode != GBREAD && chref(fs, *loc, 0) > 1){ if(dumpblk(fs, L, loc) < 0){ if(b != bd) putbuf(b); return -1; } + b->op |= BDELWRI; + } k = *loc; if(b != bd) putbuf(b); |