summaryrefslogtreecommitdiff
path: root/sys/src/cmd/hjfs/fs1.c
diff options
context:
space:
mode:
authoraiju <aiju@phicode.de>2012-08-08 00:52:37 +0200
committeraiju <aiju@phicode.de>2012-08-08 00:52:37 +0200
commitf2c70fe2f708446794af299b1130b7aaf8dc73e5 (patch)
tree4bec923d87ce8ec064b6303f7494c0d9b1f5c64a /sys/src/cmd/hjfs/fs1.c
parent34bf0ce496a36746a4f6746f8a187dd66fe7a136 (diff)
more hjfs fixes
Diffstat (limited to 'sys/src/cmd/hjfs/fs1.c')
-rw-r--r--sys/src/cmd/hjfs/fs1.c7
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);