On Fri, Oct 18, 2024 at 05:51:58PM +0100, Al Viro wrote: > On Fri, Oct 18, 2024 at 01:06:12PM +0200, Christian Brauner wrote: > > > Look: all it takes is the following trick > > > * add const char *pathname to struct nameidata > > > * in __set_nameidata() add > > > p->pathname = likely(name) ? name->name : ""; > > > * in path_init() replace > > > const char *s = nd->name->name; > > > with > > > const char *s = nd->pathname; > > > and we are done. Oh, and teach putname() to treat NULL as no-op. > > > > I know, that's what I suggested to Linus initially but he NAKed it > > because he didn't want the extra cycles. > > Extra cycles where? If anything, I'd expect a too-small-to-measure > speedup due to dereference shifted from path_init() to __set_nameidata(). > Below is literally all it takes to make filename_lookup() treat NULL > as empty-string name. > > NOTE: I'm not talking about forcing the pure by-descriptor case through > the dfd+pathname codepath; not without serious profiling. But treating Ah ok, that makes sense. I thought you were talking about that... > AT_FDCWD + NULL by the delta below and passing NULL struct filename to > filename_lookup()? Yes, that's good!