9fans archive / 1998 / 04 / 11 / prev next From: Russ Cox rsc@pla... Subject: [9fans] a problem with the 9p protocol? Date: Sat, 4 Apr 1998 16:25:36 -0500 > Where is the problem? Your problem arises from the way the mount driver handles mounted file descriptors. There is a flag CMSG on each fd (well, each channel) that says whether or not it is mounted. Once you mount(2) it, the flag gets set. After the flag is set, normal reads and writes (via the read and write system calls) are disallowed, presumably to not interfere with the 9P calls by the mount driver. > If I run it with: > ramfs -s > filter > mount /srv/filter /tmp/mnt > it seems to work: Right. In this case, /srv/ramfs has never been mounted directly by the system, so the associated channel doesn't have the CMSG flag set. Reads and writes by filter work. > But if I first mount and > then unmount the ramfs with: > ramfs -s > mount -c /srv/ramfs /tmp/mnt > unmount /tmp/mnt > filter > mount /srv/filter /tmp/mnt > I get: > client->server: Tsession tag 65535 # (from dump) > write server: inappropriate use of fd > mount: mount /srv/filtre /tmp/mnt: fsession: i/o error during authentication Right. In this case, /srv/ramfs has been mounted directly, so CMSG is set. The first time filter calls read or write (it happens to be a write), it fails. The phenomenon is more simply demonstrated by % ramfs -s % echo squeamish ossifrage >>/srv/ramfs % mount /srv/ramfs /tmp/mnt % unmount /tmp/mnt % echo squeamish ossifrage >>/srv/ramfs echo: write error: inappropriate use of fd % Russ