NFSv4.2: add client side xattr caching.
Implement client side caching for NFSv4.2 extended attributes. The cache is a per-inode hashtable, with name/value entries. There is one special entry for the listxattr cache. NFS inodes have a pointer to a cache structure. The cache structure is allocated on demand, freed when the cache is invalidated. Memory shrinkers keep the size in check. Large entries (> PAGE_SIZE) are collected by a separate shrinker, and freed more aggressively than others. Signed-off-by: Frank van der Linden <fllinden@amazon.com> Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:

committed by
Trond Myklebust

parent
012a211abd
commit
95ad37f90c
@@ -69,6 +69,7 @@ static void nfs4_evict_inode(struct inode *inode)
|
||||
pnfs_destroy_layout(NFS_I(inode));
|
||||
/* First call standard NFS clear_inode() code */
|
||||
nfs_clear_inode(inode);
|
||||
nfs4_xattr_cache_zap(inode);
|
||||
}
|
||||
|
||||
struct nfs_referral_count {
|
||||
@@ -268,6 +269,12 @@ static int __init init_nfs_v4(void)
|
||||
if (err)
|
||||
goto out1;
|
||||
|
||||
#ifdef CONFIG_NFS_V4_2
|
||||
err = nfs4_xattr_cache_init();
|
||||
if (err)
|
||||
goto out2;
|
||||
#endif
|
||||
|
||||
err = nfs4_register_sysctl();
|
||||
if (err)
|
||||
goto out2;
|
||||
@@ -288,6 +295,9 @@ static void __exit exit_nfs_v4(void)
|
||||
nfs4_pnfs_v3_ds_connect_unload();
|
||||
|
||||
unregister_nfs_version(&nfs_v4);
|
||||
#ifdef CONFIG_NFS_V4_2
|
||||
nfs4_xattr_cache_exit();
|
||||
#endif
|
||||
nfs4_unregister_sysctl();
|
||||
nfs_idmap_quit();
|
||||
nfs_dns_resolver_destroy();
|
||||
|
Reference in New Issue
Block a user