M boot/boot.c => boot/boot.c +3 -0
@@ 306,15 306,18 @@ reattach(int rec, Method *amp, char *buf)
p = strrchr(buf, '/');
if(p == 0)
goto fail;
+
*p = '\0';
sprint(tmp, "%s/remote", buf);
fd = open(tmp, OREAD);
if(fd < 0)
goto fail;
+
n = read(fd, tmp, sizeof(tmp));
if(n < 0)
goto fail;
+
close(fd);
tmp[n-1] = '\0';
M port/chan.c => port/chan.c +4 -6
@@ 500,8 500,7 @@ mchan(char *id)
for(t = f->mount; t; t = t->next) {
c = t->to;
if(c->type == mdev && c->mntptr->id == mountid) {
- c = c->mntptr->c;
- incref(c);
+ c = clone(c, 0);
runlock(&pg->ns);
poperror();
return c;
@@ 562,10 561,9 @@ namec(char *name, int amode, int omode, ulong perm)
elem[n] = '\0';
n = chartorune(&r, elem+1)+1;
if(r == 'M') {
- if(amode != Aopen || omode != ORDWR)
- error(Eperm);
- skipslash(name);
- return mchan(elem+n);
+ c = mchan(elem+n);
+ name = skipslash(name);
+ break;
}
t = devno(r, 1);
if(t == -1)
M port/devmnt.c => port/devmnt.c +3 -2
@@ 221,7 221,7 @@ mattach(Mnt *m, Chan *c, char *spec)
r = mntralloc(0);
c->mntptr = m;
- if(waserror()){
+ if(waserror()) {
mntfree(r);
nexterror();
}
@@ 991,7 991,8 @@ mntrecover(Mnt *m, Mntrpc *r)
r->done = 0;
mntrecdel(m, r);
- recoverchan(m, r->c);
+ if(r->c != 0)
+ recoverchan(m, r->c);
up->psstate = ps;
}