From mboxrd@z Thu Jan 1 00:00:00 1970 From: erik quanstrom Date: Tue, 22 Sep 2009 22:36:36 -0400 To: 9fans@9fans.net Message-ID: In-Reply-To: <<13426df10909221532t5de9f010pfeb2ca2c3b44db89@mail.gmail.com>> References: <<13426df10909221532t5de9f010pfeb2ca2c3b44db89@mail.gmail.com>> MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Subject: Re: [9fans] 9vx (is this the right list)? import issue Topicbox-Message-UUID: 7603b1a6-ead5-11e9-9d60-3106f5b1d025 ron, this works for me but my symptoms were a little different than yours. before: mnt: proc cat 290: mismatch from #D/ssl/1/data /n/coraid/lib/unicode rep 0x7fcd8c04e190 tag 4 fid 1603 T120 R117 rp 4 after: WOOT! caught stale reply 6; type 117 note: the poor organization of this patch is geared toward keeping the diff small. tagallocd and freetag should be moved above mountmux. i didn't use russ' ed scripts because i was too lazy. - erik 9vx version ; ; diff -c devmnt.c devmnt.c~ devmnt.c:945,954 - devmnt.c~:945,951 void mountmux(Mnt *m, Mntrpc *r) { - int bad; Mntrpc **l, *q; - int tagallocd(int); - void freetag(int); lock(&m->lk); l = &m->queue; devmnt.c:977,992 - devmnt.c~:974,981 } l = &q->list; } - bad = 1; - if(tagallocd(r->reply.tag)){ - freetag(r->reply.tag); - bad = 0; - } unlock(&m->lk); - if(bad) - print("unexpected reply tag %ud; type %d\n", r->reply.tag, r->reply.type); - else - print("WOOT! caught stale reply %ud; type %d\n", r->reply.tag, r->reply.type); + print("unexpected reply tag %ud; type %d\n", r->reply.tag, r->reply.type); } /* devmnt.c:1054,1065 - devmnt.c~:1043,1048 return NOTAG; } - int - tagallocd(int t) - { - return mntalloc.tagmask[t>>TAGSHIFT] & 1<<(t&TAGMASK); - } - void freetag(int t) { devmnt.c:1125,1136 - devmnt.c~:1108,1116 if(mntalloc.nrpcfree >= 10){ free(r->rpc); free(r); - if(r->done != 2) - freetag(r->request.tag); + freetag(r->request.tag); } else{ - if(r->done == 2) - r->request.tag = alloctag(); r->list = mntalloc.rpcfree; mntalloc.rpcfree = r; mntalloc.nrpcfree++; devmnt.c:1145,1151 - devmnt.c~:1125,1131 Mntrpc **l, *f; lock(&m->lk); - r->done = 2; + r->done = 1; l = &m->queue; for(f = *l; f; f = f->list) { plan 9 version ; diffy -c devmnt.c /n/dump/2009/0922/sys/src/9/port/devmnt.c:932,938 - devmnt.c:932,941 void mountmux(Mnt *m, Mntrpc *r) { + int bad; Mntrpc **l, *q; + int tagallocd(int); + void freetag(int); lock(m); l = &m->queue; /n/dump/2009/0922/sys/src/9/port/devmnt.c:961,968 - devmnt.c:964,977 } l = &q->list; } + bad = 1; + if(tagallocd(r->reply.tag)){ + freetag(r->reply.tag); + bad = 0; + } unlock(m); - print("unexpected reply tag %ud; type %d\n", r->reply.tag, r->reply.type); + if(bad) + print("unexpected reply tag %ud; type %d\n", r->reply.tag, r->reply.type); } /* /n/dump/2009/0922/sys/src/9/port/devmnt.c:1030,1035 - devmnt.c:1039,1050 return NOTAG; } + int + tagallocd(int t) + { + return mntalloc.tagmask[t>>TAGSHIFT] & 1<<(t&TAGMASK); + } + void freetag(int t) { /n/dump/2009/0922/sys/src/9/port/devmnt.c:1095,1103 - devmnt.c:1110,1121 if(mntalloc.nrpcfree >= 10){ free(r->rpc); free(r); - freetag(r->request.tag); + if(r->done != 2) + freetag(r->request.tag); } else{ + if(r->done == 2) + r->request.tag = alloctag(); r->list = mntalloc.rpcfree; mntalloc.rpcfree = r; mntalloc.nrpcfree++; /n/dump/2009/0922/sys/src/9/port/devmnt.c:1112,1118 - devmnt.c:1130,1136 Mntrpc **l, *f; lock(m); - r->done = 1; + r->done = 2; l = &m->queue; for(f = *l; f; f = f->list) { ------------------------------------------------------------------ plan 9 version ; - diffy diffy -c devmnt.c /n/dump/2009/0922/sys/src/9/port/devmnt.c:932,938 - devmnt.c:932,941 void mountmux(Mnt *m, Mntrpc *r) { + int bad; Mntrpc **l, *q; + int tagallocd(int); + void freetag(int); lock(m); l = &m->queue; /n/dump/2009/0922/sys/src/9/port/devmnt.c:961,968 - devmnt.c:964,979 } l = &q->list; } + bad = 1; + if(tagallocd(r->reply.tag)){ + freetag(r->reply.tag); + bad = 0; + } unlock(m); - print("unexpected reply tag %ud; type %d\n", r->reply.tag, r->reply.type); + if(bad) + print("unexpected reply tag %ud; type %d\n", r->reply.tag, r->reply.type); + else + print("WOOT! caught stale reply %ud; type %d\n", r->reply.tag, r->reply.type); } /* /n/dump/2009/0922/sys/src/9/port/devmnt.c:1030,1035 - devmnt.c:1041,1052 return NOTAG; } + int + tagallocd(int t) + { + return mntalloc.tagmask[t>>TAGSHIFT] & 1<<(t&TAGMASK); + } + void freetag(int t) { /n/dump/2009/0922/sys/src/9/port/devmnt.c:1095,1103 - devmnt.c:1112,1123 if(mntalloc.nrpcfree >= 10){ free(r->rpc); free(r); - freetag(r->request.tag); + if(r->done != 2) + freetag(r->request.tag); } else{ + if(r->done == 2) + r->request.tag = alloctag(); r->list = mntalloc.rpcfree; mntalloc.rpcfree = r; mntalloc.nrpcfree++; /n/dump/2009/0922/sys/src/9/port/devmnt.c:1112,1118 - devmnt.c:1132,1138 Mntrpc **l, *f; lock(m); - r->done = 1; + r->done = 2; l = &m->queue; for(f = *l; f; f = f->list) {