Thread (34 messages) 34 messages, 6 authors, 2018-08-01

Re: [PATCH 29/38] vfs: syscall: Add fsconfig() for configuring and managing a context [ver #10]

flat view

From: Andy Lutomirski <luto@amacapital.net>
Date: 2018-07-27 23:22:05
Also in: linux-fsdevel, lkml

On Fri, Jul 27, 2018 at 2:51 PM, David Howells [off-list ref] wrote:
Andy Lutomirski [off-list ref] wrote:
quoted
Unless I'm rather confused, you have two or possibly three ways to
pass in an open fd.  Can you clarify what the difference is and/or
remove all but one of them?
No, they're not equivalent.
quoted
quoted
 (*) fsconfig_set_path: A non-empty path is specified.  The parameter must
     be expecting a path object.  value points to a NUL-terminated string
     that is the path and aux is a file descriptor at which to start a
     relative lookup or AT_FDCWD.
So, an example:

        fsconfig(fd, fsconfig_set_path, "source", "/dev/sda1", AT_FDCWD);

I don't want to require that the caller open /dev/sda1 and pass in an fd as
that might prevent the filesystem from "holding" it exclusively.
quoted
quoted
 (*) fsconfig_set_path_empty: As fsconfig_set_path, but with AT_EMPTY_PATH
     implied.
You can't do:

        fsconfig(fd, fsconfig_set_path, "source", "", dir_fd);

because AT_EMPTY_PATH cannot be specified directly[*].  What you do instead is:

        fsconfig(fd, fsconfig_set_path_empty, "source", "", dir_fd);

[*] Not without a 6-arg syscall or some other way of passing it.
Are there still architectures that have problems with 6-arg syscalls?
I *could* require that the caller must call open(O_PATH) or openat(O_PATH)
before calling fsconfig() - so you don't pass a string, but only a path-fd.
quoted
quoted
 (*) fsconfig_set_fd: An open file descriptor is specified.  value must
     be NULL and aux indicates the file descriptor.
See fd=%u on fuse.  I think it's cleaner to do:

        fsconfig(fd, fsconfig_set_fd, "source", NULL, control_fd);

saying explicitly that there's an open file to be passed rather than:

        fsconfig(fd, fsconfig_set_path, "source", NULL, control_fd);
Hmm.  That should probably be clearly documented.  I suppose that, as
long as there is never a case where fsconfig_set_path and
fsconfig_set_fd both succeed, then it's not a big deal.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help