From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f68.google.com ([74.125.82.68]:53700 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389750AbeG0XWF (ORCPT ); Fri, 27 Jul 2018 19:22:05 -0400 Received: by mail-wm0-f68.google.com with SMTP id s9-v6so6690248wmh.3 for ; Fri, 27 Jul 2018 14:58:12 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <7034.1532728300@warthog.procyon.org.uk> References: <153271267980.9458.7640156373438016898.stgit@warthog.procyon.org.uk> <153271287586.9458.6001928723332685410.stgit@warthog.procyon.org.uk> <7034.1532728300@warthog.procyon.org.uk> From: Andy Lutomirski Date: Fri, 27 Jul 2018 14:57:51 -0700 Message-ID: Subject: Re: [PATCH 29/38] vfs: syscall: Add fsconfig() for configuring and managing a context [ver #10] To: David Howells Cc: Al Viro , Linux API , Linus Torvalds , Linux FS Devel , LKML Content-Type: text/plain; charset="UTF-8" Sender: linux-fsdevel-owner@vger.kernel.org List-ID: On Fri, Jul 27, 2018 at 2:51 PM, David Howells wrote: > Andy Lutomirski wrote: > >> 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. > >> > (*) 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. > >> > (*) 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. > >> > (*) 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.