On Tue, May 30, 2023 at 04:08:38PM +0200, Miklos Szeredi wrote: > On Sat, 27 May 2023 at 16:04, Amir Goldstein <amir73il@xxxxxxxxx> wrote: > > > If we would want to support data-only layers in the middle on the > > stack, which would this syntax make sense? > > lowerdir=lower1::data1:lower2::data2 > > > > If this syntax makes sense to everyone, then we can change the syntax > > of data-only in the tail from lower1::data1:data2 to lower1::data1::data2 > > and enforce that after the first ::, only :: are allowed. > > > > Miklos, any thoughts? > > I have a feeling that this was your natural interpretation when you first > > saw the :: syntax. > > Yes, I think it's more natural to have a prefix for each data-only > layer. And this is also good for extensibility, as discussed. Sorry, just a quick braindump vaguely related to this new mount syntax. A while ago util-linux reported issues with overlayfs when mounted through the new mount api (cf. [1]) and I completely forgot to mention this to you during LSFMM. So say you do: fs_fd = fsopen("overlay", FSOPEN_CLOEXEC); fsconfig(fs_fd, FSCONFIG_SET_STRING, "upperdir", "/home/asavah/kross/tmp/asusb450eg/upper", 0); fsconfig(fs_fd, FSCONFIG_SET_STRING, "workdir", "/tmp/work", 0); fsconfig(fs_fd, FSCONFIG_SET_STRING, "lowerdir", "0:1:2:3:4:5:6:7:8:9:a:b:c:d:e:f:10:11:12:13:14:15:16:17:18:19:1a:1b:1c:1d:1e:1f:20:21:22:23:24:25:26:27:28:29:2a:2b:2c:2d:2e:2f: This will fail because FSCONFIG_SET_STRING is limited to 256 bytes. That's a reasonable limit and I don't think we need to extend this to PATH_MAX. Instead, my reaction had been that lowerdir should be specifiable multiple times through fsconfig() and overlayfs should probably append lower layers via: ret = fsconfig(fs_fd, FSCONFIG_SET_STRING, "lowerdir", "/home/username/project/data1", 0); // append ret = fsconfig(fs_fd, FSCONFIG_SET_STRING, "lowerdir", ":/home/username/project/data2", 0); // append ret = fsconfig(fs_fd, FSCONFIG_SET_STRING, "lowerdir", ":/home/username/project/data3", 0); // replace everything specified until now ret = fsconfig(fs_fd, FSCONFIG_SET_STRING, "lowerdir", "/home/username/project/data4", 0); // reset everything ret = fsconfig(fs_fd, FSCONFIG_SET_STRING, "lowerdir", "", 0); so with the new syntax this would probably be: ret = fsconfig(fs_fd, FSCONFIG_SET_STRING, "lowerdir", "/home/username/project/data1", 0); // append data only layer ret = fsconfig(fs_fd, FSCONFIG_SET_STRING, "lowerdir", "::/home/username/project/data2", 0); // append data only layer ret = fsconfig(fs_fd, FSCONFIG_SET_STRING, "lowerdir", "::/home/username/project/data3", 0); [1]: https://github.com/util-linux/util-linux/issues/1992