summaryrefslogtreecommitdiff
path: root/docs/fs.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/fs.md')
-rw-r--r--docs/fs.md27
1 files changed, 18 insertions, 9 deletions
diff --git a/docs/fs.md b/docs/fs.md
index 6d2891e0..335ee4e6 100644
--- a/docs/fs.md
+++ b/docs/fs.md
@@ -106,15 +106,24 @@ at the cost of acme's one-step `new/body`. Nothing in the tree is created by
list, stat, walk or read; only that one open. Every other name in `/pane` is a
serial.
-A session cannot open its own tree through a mount. Looking at
-`/mnt/9p/pardes/<me>/anything` from inside that very editor used to hang it
-outright: the realpath, the stat and the read all leave through the mount and
-come back as 9P requests only that editor's loop can answer, while the loop is
-blocked making them, and the filesystem then stops answering anybody. Such a
-path is now refused by name before any syscall runs, because the syscall is the
-thing that never returns. Address your own tree as `/n/self/...`, which the
-editor serves from memory without leaving the process. Another session's mount
-is perfectly fine to open.
+A session can open its own tree through a mount: a Look at
+`/mnt/9p/pardes/<me>/pane/2/body` from inside that very editor opens it, and
+a Save of that pane writes back through the mount into pane 2. Requests on
+the Unix and TCP listeners are answered on the 9P connection's own task, not
+by the editor's loop, so the realpath, the stat and the read the editor makes
+out through the mount come back while it waits for them. The one rule is
+whose turn it is with the core (`pardes.turn`): the editor has it, and gives
+it up while it waits for input and while a step of it is out in a syscall. A
+step of a connection task's own -- a Look written to `look` -- goes out the
+same way, and the editor waits for it to return before it takes a step of
+its own. While any step is out, a request that would change a pane (a write,
+a truncation, an rmdir) parks in the engine until none is; everything else,
+opening `pane/new` and `screen` included, is answered at once, which is why a
+Look at any path in the tree comes back. A write into the tree from the
+editor itself only ever happens between steps (a Save), so nothing it waits
+on out there is a request that has to park. QUIC is still served on the
+editor's loop, so through QUIC the old hang remains. `/n/self/...` names the
+same tree without leaving the process.
`/look` and `/exec` are the editor's two clicks, one per line of a write: