Message ID | 20211229203002.4110839-2-shr@fb.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | io_uring: add xattr support | expand |
On Wed, Dec 29, 2021 at 12:29:58PM -0800, Stefan Roesch wrote: > This splits off a do_user_path_at_empty function from the > user_path_at_empty_function. This is required so it can be > called from io_uring. Umm... Why do you bother with that wrapper? filename_lookup() is already there and already non-static. Granted, its user outside of fs/namei.c is ugly as hell, but looking at this series, I'd rather have the damn thing call filename_lookup() directly. _Or_, if you really feel like doing that wrapper, make it inline in internal.h and have fs_parser.c use call the same thing - it also passes NULL as the last argument. Said that, I really don't see the point of having that wrapper in the first place.
On 12/29/21 4:49 PM, Al Viro wrote: > On Wed, Dec 29, 2021 at 12:29:58PM -0800, Stefan Roesch wrote: >> This splits off a do_user_path_at_empty function from the >> user_path_at_empty_function. This is required so it can be >> called from io_uring. > > Umm... Why do you bother with that wrapper? filename_lookup() is already > there and already non-static. Granted, its user outside of fs/namei.c > is ugly as hell, but looking at this series, I'd rather have the damn > thing call filename_lookup() directly. _Or_, if you really feel like > doing that wrapper, make it inline in internal.h and have fs_parser.c > use call the same thing - it also passes NULL as the last argument. > > Said that, I really don't see the point of having that wrapper in the > first place. I'll remove the wrapper in the next version.
diff --git a/fs/internal.h b/fs/internal.h index 432ea3ce76ec..afa60757d5f6 100644 --- a/fs/internal.h +++ b/fs/internal.h @@ -202,3 +202,9 @@ struct linux_dirent64; int vfs_getdents(struct file *file, struct linux_dirent64 __user *dirent, unsigned int count, loff_t *pos); + + /* + * fs/namei.c: + */ +extern int do_user_path_at_empty(int dfd, struct filename *filename, + unsigned int flags, struct path *path); diff --git a/fs/namei.c b/fs/namei.c index 1f9d2187c765..d988e241b32c 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -2794,12 +2794,18 @@ int path_pts(struct path *path) } #endif +int do_user_path_at_empty(int dfd, struct filename *filename, unsigned int flags, + struct path *path) +{ + return filename_lookup(dfd, filename, flags, path, NULL); +} + int user_path_at_empty(int dfd, const char __user *name, unsigned flags, - struct path *path, int *empty) + struct path *path, int *empty) { struct filename *filename = getname_flags(name, flags, empty); - int ret = filename_lookup(dfd, filename, flags, path, NULL); + int ret = do_user_path_at_empty(dfd, filename, flags, path); putname(filename); return ret; }