linux/fs/xfs
Barry Naujok 384f3ced07 [XFS] Return case-insensitive match for dentry cache
This implements the code to store the actual filename found during a
lookup in the dentry cache and to avoid multiple entries in the dcache
pointing to the same inode.

To avoid polluting the dcache, we implement a new directory inode
operations for lookup. xfs_vn_ci_lookup() stores the correct case name in
the dcache.

The "actual name" is only allocated and returned for a case- insensitive
match and not an actual match.

Another unusual interaction with the dcache is not storing negative
dentries like other filesystems doing a d_add(dentry, NULL) when an ENOENT
is returned. During the VFS lookup, if a dentry returned has no inode,
dput is called and ENOENT is returned. By not doing a d_add, this actually
removes it completely from the dcache to be reused. create/rename have to
be modified to support unhashed dentries being passed in.

SGI-PV: 981521
SGI-Modid: xfs-linux-melb:xfs-kern:31208a

Signed-off-by: Barry Naujok <bnaujok@sgi.com>
Signed-off-by: Christoph Hellwig <hch@infradead.org>
2008-07-28 16:58:40 +10:00
..
linux-2.6 [XFS] Return case-insensitive match for dentry cache 2008-07-28 16:58:40 +10:00
quota [XFS] Remove unused Falgs parameter from xfs_qm_dqpurge() 2008-07-28 16:58:08 +10:00
support [XFS] Remove unused arg from kmem_free() 2008-07-28 16:58:07 +10:00
Kconfig
Makefile
xfs.h
xfs_acl.c
xfs_acl.h
xfs_ag.h
xfs_alloc.c
xfs_alloc.h
xfs_alloc_btree.c
xfs_alloc_btree.h
xfs_arch.h
xfs_attr.c [XFS] Add op_flags field and helpers to xfs_da_args 2008-07-28 16:58:37 +10:00
xfs_attr.h [XFS] Kill attr_capable checks as already done in xattr_permission. 2008-07-28 16:58:13 +10:00
xfs_attr_leaf.c [XFS] Add op_flags field and helpers to xfs_da_args 2008-07-28 16:58:37 +10:00
xfs_attr_leaf.h
xfs_attr_sf.h [XFS] 2008-07-28 16:58:35 +10:00
xfs_bit.c
xfs_bit.h
xfs_bmap.c [XFS] Remove unused arg from kmem_free() 2008-07-28 16:58:07 +10:00
xfs_bmap.h
xfs_bmap_btree.c
xfs_bmap_btree.h
xfs_btree.c
xfs_btree.h
xfs_buf_item.c [XFS] Remove unused arg from kmem_free() 2008-07-28 16:58:07 +10:00
xfs_buf_item.h
xfs_clnt.h [XFS] Fix up noattr2 so that it will properly update the versionnum and 2008-07-28 16:58:05 +10:00
xfs_da_btree.c [XFS] Add op_flags field and helpers to xfs_da_args 2008-07-28 16:58:37 +10:00
xfs_da_btree.h [XFS] Return case-insensitive match for dentry cache 2008-07-28 16:58:40 +10:00
xfs_dfrag.c [XFS] Remove unused arg from kmem_free() 2008-07-28 16:58:07 +10:00
xfs_dfrag.h
xfs_dinode.h
xfs_dir2.c [XFS] Return case-insensitive match for dentry cache 2008-07-28 16:58:40 +10:00
xfs_dir2.h [XFS] Return case-insensitive match for dentry cache 2008-07-28 16:58:40 +10:00
xfs_dir2_block.c [XFS] Return case-insensitive match for dentry cache 2008-07-28 16:58:40 +10:00
xfs_dir2_block.h
xfs_dir2_data.c [XFS] Name operation vector for hash and compare 2008-07-28 16:58:36 +10:00
xfs_dir2_data.h
xfs_dir2_leaf.c [XFS] Return case-insensitive match for dentry cache 2008-07-28 16:58:40 +10:00
xfs_dir2_leaf.h
xfs_dir2_node.c [XFS] Return case-insensitive match for dentry cache 2008-07-28 16:58:40 +10:00
xfs_dir2_node.h
xfs_dir2_sf.c [XFS] Return case-insensitive match for dentry cache 2008-07-28 16:58:40 +10:00
xfs_dir2_sf.h
xfs_dir2_trace.c [XFS] Add op_flags field and helpers to xfs_da_args 2008-07-28 16:58:37 +10:00
xfs_dir2_trace.h
xfs_dmapi.h
xfs_dmops.c
xfs_error.c [XFS] Remove unused arg from kmem_free() 2008-07-28 16:58:07 +10:00
xfs_error.h
xfs_extfree_item.c [XFS] Remove unused arg from kmem_free() 2008-07-28 16:58:07 +10:00
xfs_extfree_item.h
xfs_filestream.c
xfs_filestream.h
xfs_fs.h
xfs_fsops.c
xfs_fsops.h
xfs_ialloc.c
xfs_ialloc.h
xfs_ialloc_btree.c
xfs_ialloc_btree.h
xfs_iget.c
xfs_imap.h
xfs_inode.c [XFS] kill xfs_igrow_start and xfs_igrow_finish 2008-07-28 16:58:18 +10:00
xfs_inode.h [XFS] kill xfs_igrow_start and xfs_igrow_finish 2008-07-28 16:58:18 +10:00
xfs_inode_item.c [XFS] Remove unused arg from kmem_free() 2008-07-28 16:58:07 +10:00
xfs_inode_item.h
xfs_inum.h
xfs_iomap.c
xfs_iomap.h
xfs_itable.c [XFS] Remove unused arg from kmem_free() 2008-07-28 16:58:07 +10:00
xfs_itable.h
xfs_log.c [XFS] Convert l_flushsema to a sv_t 2008-07-28 16:58:12 +10:00
xfs_log.h
xfs_log_priv.h [XFS] Convert l_flushsema to a sv_t 2008-07-28 16:58:12 +10:00
xfs_log_recover.c [XFS] Remove unused arg from kmem_free() 2008-07-28 16:58:07 +10:00
xfs_log_recover.h
xfs_mount.c [XFS] kill xfs_mount_init 2008-07-28 16:58:29 +10:00
xfs_mount.h [XFS] Name operation vector for hash and compare 2008-07-28 16:58:36 +10:00
xfs_mru_cache.c [XFS] Remove unused arg from kmem_free() 2008-07-28 16:58:07 +10:00
xfs_mru_cache.h
xfs_qmops.c
xfs_quota.h
xfs_refcache.h
xfs_rename.c
xfs_rtalloc.c [XFS] Remove unused arg from kmem_free() 2008-07-28 16:58:07 +10:00
xfs_rtalloc.h
xfs_rw.c
xfs_rw.h
xfs_sb.h [XFS] Fix up noattr2 so that it will properly update the versionnum and 2008-07-28 16:58:05 +10:00
xfs_trans.c [XFS] Remove unused arg from kmem_free() 2008-07-28 16:58:07 +10:00
xfs_trans.h
xfs_trans_ail.c
xfs_trans_buf.c
xfs_trans_extfree.c
xfs_trans_inode.c [XFS] Remove unused arg from kmem_free() 2008-07-28 16:58:07 +10:00
xfs_trans_item.c [XFS] Remove unused arg from kmem_free() 2008-07-28 16:58:07 +10:00
xfs_trans_priv.h
xfs_trans_space.h
xfs_types.h
xfs_utils.c
xfs_utils.h
xfs_vfsops.c [XFS] merge xfs_mount into xfs_fs_fill_super 2008-07-28 16:58:21 +10:00
xfs_vfsops.h [XFS] merge xfs_mount into xfs_fs_fill_super 2008-07-28 16:58:21 +10:00
xfs_vnodeops.c [XFS] Return case-insensitive match for dentry cache 2008-07-28 16:58:40 +10:00
xfs_vnodeops.h [XFS] Return case-insensitive match for dentry cache 2008-07-28 16:58:40 +10:00