On Thu, Jul 12, 2018 at 09:23:22AM -0700, Andy Lutomirski wrote: > As a straw man, I suggest: > > fsconfigure(contextfd, ADD_BLOCKDEV, dfd, path, flags); > > fsconfigure(contextfd, ADD_OPTION, 0, “foo=bar”, flags);
Bollocks. First of all, block device *IS* a fucking option. Always had been. It's not even that it's passed as a separate argument for historical reasons - just look at NFS. That argument is a detached part of options, parsed (yes, *parsed*) by filesystem in question in whatever way it prefers. Look at the things like e.g. cramfs. That argument is interpreted as pathname of block device. Or that of mtd device. Or the magic string "mtd" followed by mtd number. What's more, filesystems can and do live on more than one device. Like e.g. btrfs. Or like something journalled with the journal on separate device. So you do *NOT* get away from the need to open stuff while doing mount - not unless you introduce arseloads of ADD_... shite in your scheme. And create a huge centralized pile of code dealing with it. ADD_NFS_IPV4_SERVER_AND_PATH, etc.? You can't avoid parsing stuff. It's one thing to argue at which *point* you prefer doing that, but it has to be done kernel-side. Format of filesystem options is fundamentally up to filesystem, whichever syscall you use.