forked from Minki/linux
[XFS] Invalidate dentry in unlink/rmdir if in case-insensitive mode
The vfs_unlink/d_delete functionality in the Linux VFS make the dentry negative if it is the only inode being referenced. Case-insensitive mode doesn't work with negative dentries, so if using CI-mode, invalidate the dentry on unlink/rmdir. SGI-PV: 983102 SGI-Modid: xfs-linux-melb:xfs-kern:31308a Signed-off-by: Barry Naujok <bnaujok@sgi.com> Signed-off-by: Christoph Hellwig <hch@infradead.org>
This commit is contained in:
parent
87affd08bc
commit
d532506cd8
@ -475,6 +475,13 @@ xfs_vn_unlink(
|
||||
if (likely(!error)) {
|
||||
xfs_validate_fields(dir); /* size needs update */
|
||||
xfs_validate_fields(inode);
|
||||
/*
|
||||
* With unlink, the VFS makes the dentry "negative": no inode,
|
||||
* but still hashed. This is incompatible with case-insensitive
|
||||
* mode, so invalidate (unhash) the dentry in CI-mode.
|
||||
*/
|
||||
if (xfs_sb_version_hasasciici(&XFS_M(dir->i_sb)->m_sb))
|
||||
d_invalidate(dentry);
|
||||
}
|
||||
return -error;
|
||||
}
|
||||
@ -531,6 +538,13 @@ xfs_vn_rmdir(
|
||||
if (likely(!error)) {
|
||||
xfs_validate_fields(inode);
|
||||
xfs_validate_fields(dir);
|
||||
/*
|
||||
* With rmdir, the VFS makes the dentry "negative": no inode,
|
||||
* but still hashed. This is incompatible with case-insensitive
|
||||
* mode, so invalidate (unhash) the dentry in CI-mode.
|
||||
*/
|
||||
if (xfs_sb_version_hasasciici(&XFS_M(dir->i_sb)->m_sb))
|
||||
d_invalidate(dentry);
|
||||
}
|
||||
return -error;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user