Messages in this thread | | | Date | Sun, 12 Oct 2014 23:18:17 +0100 | From | Al Viro <> | Subject | WTF is d_add_ci() doing with negative dentries? |
| |
AFAICS, if d_add_ci() ever finds a negative hashed dentry for exact name, it's already buggered. Because right *before* that d_add_ci() lookup for exact name would've turned valid negative. IOW, the whole thing ought to be found = d_hash_and_lookup(dentry->d_parent, name); if (found) { iput(inode); return found; } new = d_alloc(dentry->d_parent, name); if (!new) { iput(inode); return ERR_PTR(-ENOMEM); } found = d_splice_alias(inode, new); if (found) { dput(new); return found; } return new; Moreover, it might very well be better to pass dentry->d_parent instead of dentry... Objections?
| |