Re: Connector - how to start?

Evgeniy Polyakov
2006-04-15T12:38:45Z

On Sat, Apr 15, 2006 at 10:18:31PM +1000, Paul Collins (paul@briny.ondioline.org) wrote:
> Evgeniy Polyakov <johnpol@2ka.mipt.ru> writes:
>
> > On Sat, Apr 15, 2006 at 12:50:46PM +0200, Libor Vanek (libor.vanek@gmail.com) wrote:
> >> Hi
> >
> > Hello.
> >
> >> > Why do you want to send big messages over netlink?
> >> > Netlink is fast but not faster than char device for example, or read
> >> > from mapped area, although it is much more convenient to use.
> >> >
> >> > Well, I can increase CONNECTOR_MAX_MSG_SIZE to maximum allowed 64k, if
> >> > there is really strong justification.
> >>
> >> I need to send messages containing several (1 to 3) file names. And
> >> "MAXPATHLEN" is 1024b (usually it's much less but I can't rely on
> >> that).
> >
> > $ touch `perl -e 'print "A"x1024'`
> > touch: cannot touch
> > `AA...AA':
> > File name too long
> >
> > Only 255 is allowed in my system.
>
> There are two limits though, the component length limit (NAME_MAX),
> and the overall length limit (PATH_MAX). For example:
>
> $ mkdir -p `perl -e 'print "A"x255'`/`perl -e 'print "B"x255'`/`perl -e 'print "C"x255'`/`perl -e 'print "D"x255'`
>
> works fine here.
>
> However, with 256 I get "File name too long", as you did.

Sure, as pointed in previous e-mail, several concatenated directories can exceed any resonable limit,
even PATH_MAX (4k):
$ pwd | wc
1 1 4113

So it is wrong idea to transfer the whole name in one message, which
will not only add huge overhead (for each subdir one must transfer the
whole path for the parent dir), but can be impossible to allocate such a
buffer in kernelspace to store the whole pathname.

> --
> Dag vijandelijk luchtschip de huismeester is dood