summaryrefslogtreecommitdiff
path: root/sys/src/cmd/cwfs
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@centraldogma>2011-06-06 07:16:00 +0000
committercinap_lenrek <cinap_lenrek@centraldogma>2011-06-06 07:16:00 +0000
commitc39aecc11186aa7ec7e4981614bfa3765d4af99e (patch)
tree4653b24736f4559ac114ad912bb7e334748807eb /sys/src/cmd/cwfs
parent9310110448087364729bafc9c54a553f55395be3 (diff)
cwfs: restore backup block even if directory block didnt got a new address
Diffstat (limited to 'sys/src/cmd/cwfs')
-rw-r--r--sys/src/cmd/cwfs/cw.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/sys/src/cmd/cwfs/cw.c b/sys/src/cmd/cwfs/cw.c
index 2017e3388..c22693d6c 100644
--- a/sys/src/cmd/cwfs/cw.c
+++ b/sys/src/cmd/cwfs/cw.c
@@ -1448,19 +1448,21 @@ cwrecur(Cw *cw, Off addr, int tag, int tag1, long qp)
cw->depth--;
- if(na){
- if(b){
- p = getbuf(cw->dev, na, Brd);
- if(!p || checktag(p, tag, qp)){
- fprint(2, "cwrecur: b/p null %s\n", cw->name);
- na = 0;
- } else {
- memmove(p->iobuf, b->iobuf, RBUFSIZE);
- p->flags |= Bmod|Bimm;
- }
- if(p)
- putbuf(p);
+ if(b){
+ p = getbuf(cw->dev, na ? na : addr, Brd);
+ if(!p || checktag(p, tag, qp)){
+ fprint(2, "cwrecur: b/p null\n");
+ na = 0;
+ } else {
+ memmove(p->iobuf, b->iobuf, RBUFSIZE);
+ p->flags |= Bmod|Bimm;
}
+ if(p)
+ putbuf(p);
+ putbuf(b);
+ }
+
+ if(na){
if(shouldstop){
if(cw->falsehits < 10)
fprint(2, "shouldstop %lld %lld t=%s %s\n",
@@ -1469,8 +1471,6 @@ cwrecur(Cw *cw, Off addr, int tag, int tag1, long qp)
cw->falsehits++;
}
}
- if(b)
- putbuf(b);
return na;
}