summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
2c2a71c)
make mntflushfree() return the original rpc and do the
botched clunk check on the original instead of the
current rpc.
so if we get a botched flush of a clunk, we abandon the
fid of the channel as well.
Mnt* mntchk(Chan*);
void mntdirfix(uchar*, Chan*);
Mntrpc* mntflushalloc(Mntrpc*, ulong);
Mnt* mntchk(Chan*);
void mntdirfix(uchar*, Chan*);
Mntrpc* mntflushalloc(Mntrpc*, ulong);
-void mntflushfree(Mnt*, Mntrpc*);
+Mntrpc* mntflushfree(Mnt*, Mntrpc*);
void mntfree(Mntrpc*);
void mntgate(Mnt*);
void mntqrm(Mnt*, Mntrpc*);
void mntfree(Mntrpc*);
void mntgate(Mnt*);
void mntqrm(Mnt*, Mntrpc*);
if(m->rip == up)
mntgate(m);
if(strcmp(up->errstr, Eintr) != 0){
if(m->rip == up)
mntgate(m);
if(strcmp(up->errstr, Eintr) != 0){
+ r = mntflushfree(m, r);
switch(r->request.type){
case Tremove:
case Tclunk:
switch(r->request.type){
case Tremove:
case Tclunk:
if(strcmp(up->errstr, Ehungup) != 0)
r->c->fid = 0;
}
if(strcmp(up->errstr, Ehungup) != 0)
r->c->fid = 0;
}
nexterror();
}
r = mntflushalloc(r, m->msize);
nexterror();
}
r = mntflushalloc(r, m->msize);
* flush and the original message from the unanswered
* request queue. Mark the original message as done
* and if it hasn't been answered set the reply to to
* flush and the original message from the unanswered
* request queue. Mark the original message as done
* and if it hasn't been answered set the reply to to
+ * Rflush. Return the original rpc.
mntflushfree(Mnt *m, Mntrpc *r)
{
Mntrpc *fr;
mntflushfree(Mnt *m, Mntrpc *r)
{
Mntrpc *fr;
r->reply.type = Rflush;
mntqrm(m, r);
}
r->reply.type = Rflush;
mntqrm(m, r);
}
+ if(fr == nil)
+ break;
+ mntfree(r);