diff options
author | Jeff Layton <jlayton@redhat.com> | 2009-08-28 10:11:11 -0400 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2009-09-01 18:25:29 -0400 |
commit | 1b49c5566136455764a8d17ead25784f534c202d (patch) | |
tree | 6946842743140355a6f6b1fb1f27fbfa59132337 /fs/cifs/transport.c | |
parent | 8e047d09ee1143058b71f40c5f4d028dde52d883 (diff) |
cifs: protect GlobalOplock_Q with its own spinlock
Right now, the GlobalOplock_Q is protected by the GlobalMid_Lock. That
lock is also used for completely unrelated purposes (mostly for managing
the global mid queue). Give the list its own dedicated spinlock
(cifs_oplock_lock) and rename the list to cifs_oplock_list to
eliminate the camel-case.
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'fs/cifs/transport.c')
-rw-r--r-- | fs/cifs/transport.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c index 0ad3e2d116a6..1da4ab250eae 100644 --- a/fs/cifs/transport.c +++ b/fs/cifs/transport.c | |||
@@ -119,20 +119,19 @@ AllocOplockQEntry(struct inode *pinode, __u16 fid, struct cifsTconInfo *tcon) | |||
119 | temp->pinode = pinode; | 119 | temp->pinode = pinode; |
120 | temp->tcon = tcon; | 120 | temp->tcon = tcon; |
121 | temp->netfid = fid; | 121 | temp->netfid = fid; |
122 | spin_lock(&GlobalMid_Lock); | 122 | spin_lock(&cifs_oplock_lock); |
123 | list_add_tail(&temp->qhead, &GlobalOplock_Q); | 123 | list_add_tail(&temp->qhead, &cifs_oplock_list); |
124 | spin_unlock(&GlobalMid_Lock); | 124 | spin_unlock(&cifs_oplock_lock); |
125 | } | 125 | } |
126 | return temp; | 126 | return temp; |
127 | |||
128 | } | 127 | } |
129 | 128 | ||
130 | void DeleteOplockQEntry(struct oplock_q_entry *oplockEntry) | 129 | void DeleteOplockQEntry(struct oplock_q_entry *oplockEntry) |
131 | { | 130 | { |
132 | spin_lock(&GlobalMid_Lock); | 131 | spin_lock(&cifs_oplock_lock); |
133 | /* should we check if list empty first? */ | 132 | /* should we check if list empty first? */ |
134 | list_del(&oplockEntry->qhead); | 133 | list_del(&oplockEntry->qhead); |
135 | spin_unlock(&GlobalMid_Lock); | 134 | spin_unlock(&cifs_oplock_lock); |
136 | kmem_cache_free(cifs_oplock_cachep, oplockEntry); | 135 | kmem_cache_free(cifs_oplock_cachep, oplockEntry); |
137 | } | 136 | } |
138 | 137 | ||
@@ -144,14 +143,14 @@ void DeleteTconOplockQEntries(struct cifsTconInfo *tcon) | |||
144 | if (tcon == NULL) | 143 | if (tcon == NULL) |
145 | return; | 144 | return; |
146 | 145 | ||
147 | spin_lock(&GlobalMid_Lock); | 146 | spin_lock(&cifs_oplock_lock); |
148 | list_for_each_entry(temp, &GlobalOplock_Q, qhead) { | 147 | list_for_each_entry(temp, &cifs_oplock_list, qhead) { |
149 | if ((temp->tcon) && (temp->tcon == tcon)) { | 148 | if ((temp->tcon) && (temp->tcon == tcon)) { |
150 | list_del(&temp->qhead); | 149 | list_del(&temp->qhead); |
151 | kmem_cache_free(cifs_oplock_cachep, temp); | 150 | kmem_cache_free(cifs_oplock_cachep, temp); |
152 | } | 151 | } |
153 | } | 152 | } |
154 | spin_unlock(&GlobalMid_Lock); | 153 | spin_unlock(&cifs_oplock_lock); |
155 | } | 154 | } |
156 | 155 | ||
157 | static int | 156 | static int |