Hello,

On Wed, Aug 6, 2008 at 7:53 PM, <[EMAIL PROTECTED]> wrote:

> On Wed, Aug 06, 2008 at 02:17:34PM +0300, Sergiu Ivanov wrote:
> > On Tue, Aug 5, 2008 at 4:16 AM, <[EMAIL PROTECTED]> wrote:
>
> > > The last step is to return the resulting translated node to the
> > > client. Now I see two options for that: Either we do the lookup with
> > > the remaining file name components on the newly started translator,
> > > and return the resulting port to the client. Or we just return the
> > > translator port, along with an appropriate retry notification... Not
> > > sure which is more correct.
> >
> > As far as I can see from hurd/hurd_types.h, if we just return the
> > translator port with some retry notification, the caller will anyway
> > call us again to continue the lookup on the newly started translator.
>
> Yes, that is what should happen. That's why I wonder whether we should
> do the further lookup in nsmux, or just let the client continue.
>
> I'm not sure about the exact implications. I think one case where there
> would be a difference is when the client does a lookup with O_NOTRANS...
> And I'm not sure which variant behaves more correcly in this case. This
> needs some consideration.
>

It somehow seems to me that doing the further lookup in nsmux will be
more appropriate... The situation about starting the translator could
possibly be handled similarly to the way netfs_S_dir_lookup handles
symlinks. In case a symlink is found, whose target is stated as a
relative path, netfs_S_dir_lookup just prepends the already existent
path with the path to the target of the symlink. It gives the client a
retry notification only when the path to the target of the symlink is
absolute. We should probably follow a similar idea, what do you think?

> What makes me think so is that the retry notification does not seem to
> > be FS_RETRY_MAGIC, because this one is mainly used when we encounter a
> > symlink, whose target is stated using the absolute path (of course, we
> > are not interested in ttys or file descriptors -- things also stated
> > in hurd/hurd_types.h for FS_RETRY_MAGIC). FS_RETRY_REAUTH and
> > FS_RETRY_NORMAL will both make the caller to invoke us again,
> > FS_RETRY_REAUTH will just urge them to reauthenticate the retry port
> > at first.
>
> Well, thanks for the explanation... I don't think it's really relevant
> here, but I learned something new -- I might need it one day ;-)


I hope it wasn't really annoying... I just showed what my thoughts
are, just in case they are wrong :-)

> As far as I understand, we will need to create *two* special nodes for
> > each lookup with special syntax
>
[...]
> > and the second being the node returned by netfs_attempt_lookup and
> > containing the port to the first (proxy) node.
>
> No idea what you mean here :-(
>
> The second node is created after starting the translator: it mirrors the
> target node provided by the translator. We give it to libnetfs as the
> final result of the (magic) name lookup, and consequently a port to it
> is returned to the client.
>

Yes, this was what I meant. Sorry for being messy again :-)

> In this case, do you mean that for directories, both nodes will be
> > needed?
>
> Yes, for directories we always need to mirror the node (both for
> directory nodes resulting from a magic lookup, and for ordinary
> directory nodes), as further lookups may take place, which we need to
> proxy again.


OK, it seems to me I'm getting the overall picture quite right.


> > > So, it looks like with some trickery, it may be possible to
> > > implement it with what libnetfs provides us; but in the long run,
> > > for a proper solution to both mentioned issues, we will really have
> > > to replace the dir_lookup() implementation by a custom one doing
> > > exactly what we need...
> >
> > Yes, I do agree. Actually, I almost managed to understand the details
> > of the standard implementation of netfs_S_dir_lookup. Now I'll try to
> > implement the "icky" solution and see what we get. This should also
> > show me the way how to customize netfs_S_dir_lookup for us.
>
> Well, I just wonder whether this won't turn out more tricky than doing
> it manually right away -- recursion is always confusing :-)


I very much hope it won't be too tricky... Usually, the recursion is
quite friendly with me, I hope the tradition won't change in this case.

One is simply to append or to prepend some magic token to the file name
> of the node we need shadowed, e.g. "file,,\33" or ",,\33file" (whichever
> is easier to parse).


I will probably implement the first variant: I think such syntax will
be easier to parse.

The second variant (less ugly I think), is not to do the lookup on the
> normal root port of the translator, but rather on some special port. Of
> course, this means we need a way to create this special port... Which
> probably defeats the object :-)
>

Probably, knowing how to create such special ports, we could
immediately accept the custom port management technique :-)

Thanks for some extra explanation! It helped me a lot!

scolobb

Reply via email to