On Tue, Dec 24, 2024 at 11:44:55AM -0800, Linus Torvalds wrote: > On Tue, 24 Dec 2024 at 11:18, Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote: > > > > if (f) > > seq_file_path(m, f, " \t\n\\<"); > > else > > seq_puts(m, "<none>"); > > Maybe seq_file_path() could do the "<none>" thing itself. > > Right now it looks like d_path() just oopses with a NULL pointer > dereference if you pass it a NULL path. Our printk() routines - > including '%pd' - tend to do "(null)" for this case (and also handle > ERR_PTR() cases) thanks to the 'check_pointer()' logic. Umm... What about the escape character set? If we have seq_file_path() produce "<none>" for a NULL file reference, we'd need to make sure that file called "<none>" won't get mixed with that... OTOH, there will be leading / in all cases except for pipes/sockets/anon files/anything that has ->d_dname() and it looks like the output of all instances has either '/' or ':' in it... Feels brittle, though. Anyway, I'm not at all sure that those <none> lines are actually useful for anything - we get something like UserFiles: 512 followed by 512 lines of form index:name or index:<none>, with indices going from 0 to 511. We are dumping an io_uring private descriptor table - all of it in one call of ->show(). And each line is prepended with the slot number, so it's not obvious that dumping empty slots makes sense.