On Mon, Dec 09, 2024 at 02:55:45PM -0800, Linus Torvalds wrote: > On Mon, 9 Dec 2024 at 14:49, Linus Torvalds > <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > > > > IOW, I'd *start* with something like the attached, and then build on that.. > > Key word being "something like". I just checked, and that suggested > patch will cause build issues in lib/test_printf.c, because it does > things like > > .d_iname = "foo" > > and it turns out that doesn't work when it's a flex-array. > > It doesn't have to be a flex array, of course - it could easily just > continue to use DNAME_INLINE_LEN (now just defined in terms of "words > * sizeof*(unsigned long)"). > > I did that flex array thing mainly to see if somebody ends up > depending on the array as such. Clearly that test_printf.c code does > exactly that, but looks like nothing else is. Actually, grepping for DNAME_INLINE_LEN brings some interesting hits: drivers/net/ieee802154/adf7242.c:1165: char debugfs_dir_name[DNAME_INLINE_LEN + 1]; cargo-culted, AFAICS; would be better off with a constant of their own. fs/ext4/fast_commit.c:326: fc_dentry->fcd_name.len > DNAME_INLINE_LEN) fs/ext4/fast_commit.c:452: if (dentry->d_name.len > DNAME_INLINE_LEN) { fs/ext4/fast_commit.c:1332: fc_dentry->fcd_name.len > DNAME_INLINE_LEN) fs/ext4/fast_commit.h:113: unsigned char fcd_iname[DNAME_INLINE_LEN]; /* Dirent name string */ Looks like that might want struct name_snapshot, along with {take,release}_dentry_name_snapshot(). fs/libfs.c:1792: char strbuf[DNAME_INLINE_LEN]; fs/libfs.c:1819: if (len <= DNAME_INLINE_LEN - 1) { memcpy() in there might very well be better off a struct assignment. And that thing probably ought to migrate to fs/dcache.c - RCU-related considerations in it are much trickier than it is usual for ->d_compare() instances.