On Fri, Jun 21, 2019 at 03:16:04PM +0200, Christian Brauner wrote: > On June 21, 2019 3:12:43 PM GMT+02:00, David Howells <dhowells@xxxxxxxxxx> wrote: > >Christian Brauner <christian@xxxxxxxxxx> wrote: > > > >> > static int vfs_fsinfo_fd(unsigned int fd, struct fsinfo_kparams > >*params) > >> > { > >> > struct fd f = fdget_raw(fd); > >> > >> You're using fdget_raw() which means you want to allow O_PATH fds but > >> below you're checking whether the f_ops correspond to > >> fscontext_fops. If it's an O_PATH > > > >It can't be. The only way to get an fs_context fd is from fsopen() or > >fspick() - neither of which allow O_PATH to be specified. > > > >If you tried to go through /proc/pid/fd with open(O_PATH), I think > >you'd get > >the symlink, not the target. > > Then you should use fdget(), no? :) That is unless you want fsinfo() to be useable on any fd and just fds that are returned from the new mount-api syscalls. Maybe that wasn't clear from my first mail. Is the information returned for: int fd = fsopen()/fspick(); fsinfo(fd); int ofd = open("/", O_PATH); fsinfo(ofd, ...); the same if they refer to the same mount or would they differ? Christian