On Mon, Dec 23, 2024 at 02:31:38PM -0700, Jens Axboe wrote: > > And that's a user-visible ABI. What the hell? > > > > NOTE: file here is may be anything whatsoever. It may be a pipe, > > an arbitrary file in tmpfs, a socket, etc. > > > > How hard an ABI it is? If it's really used by random userland code > > (admin tools, etc.), we have a problem. If that thing is cast in > > stone, we'll have to emulate the current behaviour of that code, > > no matter what. I really hope it can be replaced with something > > saner, though. > > > > Incidentally, call your file "<none>"; is the current behaviour > > the right thing to do? > > > > What behaviour _is_ actually wanted? Jens, Jann? > > It's not really API, it's just for debugging purposes. Famous last words... Let's hope that change won't bring some deployed userland tool screaming about breakage; it's been there for almost 5 years... > Ideal behavior - > show the file name, if possible, if not it can be anything like "anon > inode" or whatever. > > IOW, we can change this however we want. All right, how about seq_printf(m, "%5u: ", i); if (f) seq_file_path(m, f, " \t\n\\<"); else seq_puts(m, "<none>"); seq_puts(m, "\n"); in io_uring_show_fdinfo(), instead of your if (f) seq_printf(m, "%5u: %s\n", i, file_dentry(f)->d_iname); else seq_printf(m, "%5u: <none>\n", i); Can you live with that? Said that, I'm not sure that <none> case is worth printing - you are dumping the entire table, in order of increasing index, so it's not as if those lines carried any useful information... If we do not care about those, it becomes if (f) { seq_printf(m, "%5u: ", i); seq_file_path(m, f, " \t\n\\"); seq_puts(m, "\n"); } - we only need to escape '<' in names to avoid output clashing with <none>...