Source
203
203
*/
204
204
void afs_init_callback_state(struct afs_server *server)
205
205
{
206
206
if (!test_and_clear_bit(AFS_SERVER_FL_NEW, &server->flags))
207
207
server->cb_s_break++;
208
208
}
209
209
210
210
/*
211
211
* actually break a callback
212
212
*/
213
-
void afs_break_callback(struct afs_vnode *vnode)
213
+
void __afs_break_callback(struct afs_vnode *vnode)
214
214
{
215
215
_enter("");
216
216
217
-
write_seqlock(&vnode->cb_lock);
218
-
219
217
clear_bit(AFS_VNODE_NEW_CONTENT, &vnode->flags);
220
218
if (test_and_clear_bit(AFS_VNODE_CB_PROMISED, &vnode->flags)) {
221
219
vnode->cb_break++;
222
220
afs_clear_permits(vnode);
223
221
224
222
spin_lock(&vnode->lock);
225
223
226
224
_debug("break callback");
227
225
228
226
if (list_empty(&vnode->granted_locks) &&
229
227
!list_empty(&vnode->pending_locks))
230
228
afs_lock_may_be_available(vnode);
231
229
spin_unlock(&vnode->lock);
232
230
}
231
+
}
233
232
233
+
void afs_break_callback(struct afs_vnode *vnode)
234
+
{
235
+
write_seqlock(&vnode->cb_lock);
236
+
__afs_break_callback(vnode);
234
237
write_sequnlock(&vnode->cb_lock);
235
238
}
236
239
237
240
/*
238
241
* allow the fileserver to explicitly break one callback
239
242
* - happens when
240
243
* - the backing file is changed
241
244
* - a lock is released
242
245
*/
243
246
static void afs_break_one_callback(struct afs_server *server,