On Thu, Nov 21, 2019 at 08:10:39AM +0000, David Howells wrote: > James Bottomley <James.Bottomley@xxxxxxxxxxxxxxxxxxxxx> wrote: > > > I was looking to use the read only bind mount as a template for > > reimplementing shiftfs when I discovered that you can't actually create a > > read only bind mount with the new API. The problem is that fspick() will > > only reconfigure the underlying superblock, which you don't want because you > > only want the bound subtree to become read only and open_tree()/move_mount() > > doesn't give you any facility to add or change options on the bind. > > You'd use open_tree() with OPEN_TREE_CLONE and possibly AT_RECURSIVE rather > than fspick(). fspick() is, as you observed, more for reconfiguring the > superblock. > > What is missing is a mount_setattr() syscall - something like: > > mount_setattr(int dfd, const char *path, unsigned int at_flags, > unsigned int attr_change_mask, unsigned int attrs); > > which would allow what you want to be done like: > > fd = open_tree(AT_FDCWD, "/my/source/", OPEN_TREE_CLONE); > mount_setattr(fd, "", AT_EMPTY_PATH | AT_RECURSIVE, > MOUNT_ATTR_RDONLY, MOUNT_ATTR_RDONLY); > move_mount(fd, "", AT_FDCWD, "/mnt", MOVE_MOUNT_F_EMPTY_PATH); > > Christian: you said you wanted to have a look at doing this - is that still > your intention? Yes, it is. I can't put an exact time-frame on this rn. Also, I thought we've agreed a while back that the flags would move into a struct since mount is gaining flags quickly too. :) Christian