diff options
-rw-r--r-- | fs/xfs/linux-2.6/xfs_iops.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c index 62330f283951..190ed61bcd42 100644 --- a/fs/xfs/linux-2.6/xfs_iops.c +++ b/fs/xfs/linux-2.6/xfs_iops.c | |||
@@ -475,6 +475,13 @@ xfs_vn_unlink( | |||
475 | if (likely(!error)) { | 475 | if (likely(!error)) { |
476 | xfs_validate_fields(dir); /* size needs update */ | 476 | xfs_validate_fields(dir); /* size needs update */ |
477 | xfs_validate_fields(inode); | 477 | xfs_validate_fields(inode); |
478 | /* | ||
479 | * With unlink, the VFS makes the dentry "negative": no inode, | ||
480 | * but still hashed. This is incompatible with case-insensitive | ||
481 | * mode, so invalidate (unhash) the dentry in CI-mode. | ||
482 | */ | ||
483 | if (xfs_sb_version_hasasciici(&XFS_M(dir->i_sb)->m_sb)) | ||
484 | d_invalidate(dentry); | ||
478 | } | 485 | } |
479 | return -error; | 486 | return -error; |
480 | } | 487 | } |
@@ -531,6 +538,13 @@ xfs_vn_rmdir( | |||
531 | if (likely(!error)) { | 538 | if (likely(!error)) { |
532 | xfs_validate_fields(inode); | 539 | xfs_validate_fields(inode); |
533 | xfs_validate_fields(dir); | 540 | xfs_validate_fields(dir); |
541 | /* | ||
542 | * With rmdir, the VFS makes the dentry "negative": no inode, | ||
543 | * but still hashed. This is incompatible with case-insensitive | ||
544 | * mode, so invalidate (unhash) the dentry in CI-mode. | ||
545 | */ | ||
546 | if (xfs_sb_version_hasasciici(&XFS_M(dir->i_sb)->m_sb)) | ||
547 | d_invalidate(dentry); | ||
534 | } | 548 | } |
535 | return -error; | 549 | return -error; |
536 | } | 550 | } |