On Thu, Jul 28, 2011 at 02:11:29AM +0100, Al Viro wrote: > Once d_move() has happened, there's nothing to protect the old parent > anymore... Granted, it's a hell of a narrow race window, but you > need at least ->d_lock on your dentry... Right, got it. So the following should be safe according to the dcache locking protocols, right? while (ext4_test_inode_state(inode, EXT4_STATE_NEWENTRY)) { ext4_clear_inode_state(inode, EXT4_STATE_NEWENTRY); dentry = NULL; spin_lock(&inode->i_lock); if (!list_empty(&inode->i_dentry)) { dentry = list_first_entry(&inode->i_dentry, struct dentry, d_alias); dget(dentry); } spin_unlock(&inode->i_lock); if (!dentry) break; next = igrab(dentry->d_parent->d_inode); dput(dentry); if (!next) break; iput(inode); inode = next; ... Let me know if I've missed anything.... - Ted -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html