diff options
author | Tejun Heo <tj@kernel.org> | 2010-07-20 16:09:02 -0400 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2010-07-22 16:59:15 -0400 |
commit | 9b646972467fb5fdc677f9e4251875db20bdbb64 (patch) | |
tree | 01d54cf7e0ee110bd8287c3360de0c3997e859ae /fs/cifs/dir.c | |
parent | d098adfb7d281258173a43151483e52e21761021 (diff) |
cifs: use workqueue instead of slow-work
Workqueue can now handle high concurrency. Use system_nrt_wq
instead of slow-work.
* Updated is_valid_oplock_break() to not call cifs_oplock_break_put()
as advised by Steve French. It might cause deadlock. Instead,
reference is increased after queueing succeeded and
cifs_oplock_break() briefly grabs GlobalSMBSeslock before putting
the cfile to make sure it doesn't put before the matching get is
finished.
* Anton Blanchard reported that cifs conversion was using now gone
system_single_wq. Use system_nrt_wq which provides non-reentrance
guarantee which is enough and much better.
Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Steve French <sfrench@samba.org>
Cc: Anton Blanchard <anton@samba.org>
Diffstat (limited to 'fs/cifs/dir.c')
-rw-r--r-- | fs/cifs/dir.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c index 391816b461ca..b066e73c4153 100644 --- a/fs/cifs/dir.c +++ b/fs/cifs/dir.c | |||
@@ -162,7 +162,7 @@ cifs_new_fileinfo(struct inode *newinode, __u16 fileHandle, | |||
162 | mutex_init(&pCifsFile->lock_mutex); | 162 | mutex_init(&pCifsFile->lock_mutex); |
163 | INIT_LIST_HEAD(&pCifsFile->llist); | 163 | INIT_LIST_HEAD(&pCifsFile->llist); |
164 | atomic_set(&pCifsFile->count, 1); | 164 | atomic_set(&pCifsFile->count, 1); |
165 | slow_work_init(&pCifsFile->oplock_break, &cifs_oplock_break_ops); | 165 | INIT_WORK(&pCifsFile->oplock_break, cifs_oplock_break); |
166 | 166 | ||
167 | write_lock(&GlobalSMBSeslock); | 167 | write_lock(&GlobalSMBSeslock); |
168 | list_add(&pCifsFile->tlist, &cifs_sb->tcon->openFileList); | 168 | list_add(&pCifsFile->tlist, &cifs_sb->tcon->openFileList); |