diff options
author | Jeff Layton <jlayton@redhat.com> | 2011-07-26 12:20:17 -0400 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2011-07-31 17:21:20 -0400 |
commit | ad635942c869ad8fc9af270d4998c42b4e978b32 (patch) | |
tree | b199a039df4aacd26224302b7c29193171e4d444 /fs/cifs/cifsglob.h | |
parent | 5980fc966bb347801f3fcc39a2ef2a1e14fbf8cb (diff) |
cifs: simplify refcounting for oplock breaks
Currently, we take a sb->s_active reference and a cifsFileInfo reference
when an oplock break workqueue job is queued. This is unnecessary and
more complicated than it needs to be. Also as Al points out,
deactivate_super has non-trivial locking implications so it's best to
avoid that if we can.
Instead, just cancel any pending oplock breaks for this filehandle
synchronously in cifsFileInfo_put after taking it off the lists.
That should ensure that this job doesn't outlive the structures it
depends on.
Reported-by: Al Viro <viro@ZenIV.linux.org.uk>
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'fs/cifs/cifsglob.h')
-rw-r--r-- | fs/cifs/cifsglob.h | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h index 1fcf4e5b3112..38ce6d44b145 100644 --- a/fs/cifs/cifsglob.h +++ b/fs/cifs/cifsglob.h | |||
@@ -942,8 +942,6 @@ GLOBAL_EXTERN spinlock_t siduidlock; | |||
942 | GLOBAL_EXTERN spinlock_t sidgidlock; | 942 | GLOBAL_EXTERN spinlock_t sidgidlock; |
943 | 943 | ||
944 | void cifs_oplock_break(struct work_struct *work); | 944 | void cifs_oplock_break(struct work_struct *work); |
945 | void cifs_oplock_break_get(struct cifsFileInfo *cfile); | ||
946 | void cifs_oplock_break_put(struct cifsFileInfo *cfile); | ||
947 | 945 | ||
948 | extern const struct slow_work_ops cifs_oplock_break_ops; | 946 | extern const struct slow_work_ops cifs_oplock_break_ops; |
949 | 947 | ||