M port/dev.c => port/dev.c +4 -0
@@ 41,6 41,8 @@ devdir(Chan *c, Qid qid, char *n, long length, char *user, long perm, Dir *db)
db->mode = CHDIR|perm;
else
db->mode = perm;
+ if(c->flag&CMSG)
+ db->mode |= CHMOUNT;
db->atime = seconds();
db->mtime = kerndate;
db->hlength = 0;
@@ 144,6 146,8 @@ devstat(Chan *c, char *db, Dirtab *tab, int ntab, Devgen *gen)
error(Enonexist);
case 1:
if(eqqid(c->qid, dir.qid)) {
+ if(c->flag&CMSG)
+ dir.mode |= CHMOUNT;
convD2M(&dir, db);
return;
}
M port/devmnt.c => port/devmnt.c +3 -2
@@ 160,9 160,10 @@ mntattach(char *muxattach)
c = mattach(m, bogus.spec, bogus.serv);
mc = m->c;
- if(mc->type == devno('M', 0)) {
+ if(mc->type == devno('M', 0) && (c->qid.path&CHDIR) == 0) {
+ c->qid.path |= CHDIR;
c->mntptr = mc->mntptr;
- c->mchan = c->mntptr->c;
+ c->mchan = mc->mntptr->c;
c->mqid = c->qid;
incref(c->mntptr);
mclose(m);
M port/net.c => port/net.c +2 -0
@@ 157,6 157,8 @@ netstat(Chan *c, char *db, Network *np)
break;
case 1:
if(eqqid(c->qid, dir.qid)){
+ if(c->flag&CMSG)
+ dir.mode |= CHMOUNT;
convD2M(&dir, db);
return;
}
M port/portdat.h => port/portdat.h +1 -0
@@ 766,6 766,7 @@ enum
CHDIR = 0x80000000L,
CHAPPEND = 0x40000000L,
CHEXCL = 0x20000000L,
+ CHMOUNT = 0x10000000L,
};
/*