aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/nfs_fs.h
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2016-04-28 23:56:31 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2016-05-09 11:39:45 -0400
commit884be175351e73c515303118150f195dd611787c (patch)
treeba85a80a6422df631b18af344132c6fcb67f1594 /include/linux/nfs_fs.h
parent9ac3d3e8460e3fa6f3a9a39c2049904005016db6 (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.h11
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 */
494extern void nfs_complete_unlink(struct dentry *dentry, struct inode *); 492extern void nfs_complete_unlink(struct dentry *dentry, struct inode *);
495extern void nfs_wait_on_sillyrename(struct dentry *dentry);
496extern void nfs_block_sillyrename(struct dentry *dentry);
497extern void nfs_unblock_sillyrename(struct dentry *dentry);
498 493
499/* 494/*
500 * linux/fs/nfs/write.c 495 * linux/fs/nfs/write.c