ref: 903c4891fb14330c01182ed0b565861f2c4220d5
parent: d7659c975f3585d247dc832ec377663bebc7c2c0
author: Ori Bernstein <ori@eigenstate.org>
date: Sat Feb 12 12:03:13 EST 2022
fs: remove response/clunk ordering
--- a/fs.c
+++ b/fs.c
@@ -1235,40 +1235,35 @@
}
rlock(f->dent);
- if((e = candelete(f)) != nil){
- runlock(f->dent);
- rerror(m, e);
- clunkfid(f);
- return;
- }
+ if((e = candelete(f)) != nil)
+ goto Error;
if(fsaccess(f, f->dmode, f->duid, f->dgid, OWRITE) == -1){
- rerror(m, Eperm);
- runlock(f->dent);
- return;
+ e = Eperm;
+ goto Error;
}
mb.op = Odelete;
mb.k = f->dent->k;
mb.nk = f->dent->nk;
mb.nv = 0;
- if((e = btupsert(f->mnt->root, &mb, 1)) != nil){
- runlock(f->dent);
- rerror(m, e);
- clunkfid(f);
- return;
- }
+ if((e = btupsert(f->mnt->root, &mb, 1)) != nil)
+ goto Error;
if(f->dent->qid.type == QTFILE){
- if((e = clearb(f, 0, f->dent->length)) != nil){
- runlock(f->dent);
- rerror(m, e);
- clunkfid(f);
- return;
- }
+ e = clearb(f, 0, f->dent->length);
+ if(e != nil)
+ goto Error;
}
- runlock(f->dent);
+ clunkfid(f);
+ runlock(f->dent);
r.type = Rremove;
respond(m, &r);
+ return;
+
+Error:
clunkfid(f);
+ runlock(f->dent);
+ rerror(m, e);
+ return;
}
static void
@@ -1576,7 +1571,7 @@
for(j = 0; j < i; j++)
freebp(f->mnt->root, bp[i]);
wunlock(f->dent);
- rerror(m, "%r");
+ fprint(2, "%r");
putfid(f);
abort();
return;