On Mon, Apr 26, 2021 at 9:42 PM Gabriel Krisman Bertazi <krisman@xxxxxxxxxxxxx> wrote: > > FAN_ERROR will require fsid, but not necessarily require the filesystem > to expose a file handle. Split those checks into different functions, so > they can be used separately when creating a mark. Ok for the split, but... > > Signed-off-by: Gabriel Krisman Bertazi <krisman@xxxxxxxxxxxxx> > --- > fs/notify/fanotify/fanotify_user.c | 35 +++++++++++++++++++----------- > 1 file changed, 22 insertions(+), 13 deletions(-) > > diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c > index 0332c4afeec3..e0d113e3b65c 100644 > --- a/fs/notify/fanotify/fanotify_user.c > +++ b/fs/notify/fanotify/fanotify_user.c > @@ -1055,7 +1055,23 @@ SYSCALL_DEFINE2(fanotify_init, unsigned int, flags, unsigned int, event_f_flags) > } > > /* Check if filesystem can encode a unique fid */ > -static int fanotify_test_fid(struct path *path, __kernel_fsid_t *fsid) > +static int fanotify_test_fid(struct path *path) This helper can take a dentry. > +{ > + /* > + * We need to make sure that the file system supports at least > + * encoding a file handle so user can use name_to_handle_at() to > + * compare fid returned with event to the file handle of watched > + * objects. However, name_to_handle_at() requires that the > + * filesystem also supports decoding file handles. > + */ > + if (!path->dentry->d_sb->s_export_op || > + !path->dentry->d_sb->s_export_op->fh_to_dentry) > + return -EOPNOTSUPP; > + > + return 0; > +} > + > +static int fanotify_check_path_fsid(struct path *path, __kernel_fsid_t *fsid) And so does this helper. I certainly don't see the need for the _path_ in the helper name. > { > __kernel_fsid_t root_fsid; > int err; > @@ -1082,17 +1098,6 @@ static int fanotify_test_fid(struct path *path, __kernel_fsid_t *fsid) > root_fsid.val[1] != fsid->val[1]) > return -EXDEV; > > - /* > - * We need to make sure that the file system supports at least > - * encoding a file handle so user can use name_to_handle_at() to > - * compare fid returned with event to the file handle of watched > - * objects. However, name_to_handle_at() requires that the > - * filesystem also supports decoding file handles. > - */ > - if (!path->dentry->d_sb->s_export_op || > - !path->dentry->d_sb->s_export_op->fh_to_dentry) > - return -EOPNOTSUPP; > - > return 0; > } > > @@ -1230,7 +1235,11 @@ static int do_fanotify_mark(int fanotify_fd, unsigned int flags, __u64 mask, > } > > if (fid_mode) { > - ret = fanotify_test_fid(&path, &__fsid); > + ret = fanotify_check_path_fsid(&path, &__fsid); > + if (ret) > + goto path_put_and_out; > + > + ret = fanotify_test_fid(&path); Whether _test_ or _check_ please stick to one. Thanks, Amir.