diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2016-04-28 23:56:31 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2016-05-09 11:39:45 -0400 |
commit | 884be175351e73c515303118150f195dd611787c (patch) | |
tree | ba85a80a6422df631b18af344132c6fcb67f1594 /include/linux/nfs_fs.h | |
parent | 9ac3d3e8460e3fa6f3a9a39c2049904005016db6 (diff) |
nfs: per-name sillyunlink exclusion
use d_alloc_parallel() for sillyunlink/lookup exclusion and
explicit rwsem (nfs_rmdir() being a writer and nfs_call_unlink() -
a reader) for rmdir/sillyunlink one.
That ought to make lookup/readdir/!O_CREAT atomic_open really
parallel on NFS.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'include/linux/nfs_fs.h')
-rw-r--r-- | include/linux/nfs_fs.h | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index 67300f8e5f2f..fa167f25465d 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
@@ -163,11 +163,9 @@ struct nfs_inode { | |||
163 | /* Open contexts for shared mmap writes */ | 163 | /* Open contexts for shared mmap writes */ |
164 | struct list_head open_files; | 164 | struct list_head open_files; |
165 | 165 | ||
166 | /* Number of in-flight sillydelete RPC calls */ | 166 | /* Readers: in-flight sillydelete RPC calls */ |
167 | atomic_t silly_count; | 167 | /* Writers: rmdir */ |
168 | /* List of deferred sillydelete requests */ | 168 | struct rw_semaphore rmdir_sem; |
169 | struct hlist_head silly_list; | ||
170 | wait_queue_head_t waitqueue; | ||
171 | 169 | ||
172 | #if IS_ENABLED(CONFIG_NFS_V4) | 170 | #if IS_ENABLED(CONFIG_NFS_V4) |
173 | struct nfs4_cached_acl *nfs4_acl; | 171 | struct nfs4_cached_acl *nfs4_acl; |
@@ -492,9 +490,6 @@ extern void nfs_release_automount_timer(void); | |||
492 | * linux/fs/nfs/unlink.c | 490 | * linux/fs/nfs/unlink.c |
493 | */ | 491 | */ |
494 | extern void nfs_complete_unlink(struct dentry *dentry, struct inode *); | 492 | extern void nfs_complete_unlink(struct dentry *dentry, struct inode *); |
495 | extern void nfs_wait_on_sillyrename(struct dentry *dentry); | ||
496 | extern void nfs_block_sillyrename(struct dentry *dentry); | ||
497 | extern void nfs_unblock_sillyrename(struct dentry *dentry); | ||
498 | 493 | ||
499 | /* | 494 | /* |
500 | * linux/fs/nfs/write.c | 495 | * linux/fs/nfs/write.c |