Actually, it *can* be SMP-safe, if you do it right. Something like
len = dentry->d_name.len;
if (!len) {
len = snprintf(dentry->d_iname,
DNAME_INLINE_LEN_MIN,
"pipe:[%lu]",
dentry->d_inode->i_ino);
smp_wmb();
dentry->d_name.len = len;
}
if (len >= buflen)
len = buflen-1;
memcpy(buffer, dentry->d_iname, len);
buffer[len] = 0;
return buffer;
should work, although it depends on the fact that our snprintf()
implementation should be "stable" (ie if snprintf() modifies the buffer
temporarily as it goes along, that would break, but I think our
vsnprintf is good in that respect).
So you could have two different CPU's doing the snprintf() on the same
buffer at the same time (and assigning the length at the same time), but
since they'll write the same thing, you don't really care.
It's a bit subtle, though. And probably not really worth it.
Linus
-