summaryrefslogtreecommitdiffstats
path: root/fs/afs/callback.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/afs/callback.c')
-rw-r--r--fs/afs/callback.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/fs/afs/callback.c b/fs/afs/callback.c
index 915010464572..d66cd0364243 100644
--- a/fs/afs/callback.c
+++ b/fs/afs/callback.c
@@ -212,7 +212,7 @@ void afs_init_callback_state(struct afs_server *server)
212/* 212/*
213 * actually break a callback 213 * actually break a callback
214 */ 214 */
215void __afs_break_callback(struct afs_vnode *vnode) 215void __afs_break_callback(struct afs_vnode *vnode, enum afs_cb_break_reason reason)
216{ 216{
217 _enter(""); 217 _enter("");
218 218
@@ -223,13 +223,17 @@ void __afs_break_callback(struct afs_vnode *vnode)
223 223
224 if (vnode->lock_state == AFS_VNODE_LOCK_WAITING_FOR_CB) 224 if (vnode->lock_state == AFS_VNODE_LOCK_WAITING_FOR_CB)
225 afs_lock_may_be_available(vnode); 225 afs_lock_may_be_available(vnode);
226
227 trace_afs_cb_break(&vnode->fid, vnode->cb_break, reason, true);
228 } else {
229 trace_afs_cb_break(&vnode->fid, vnode->cb_break, reason, false);
226 } 230 }
227} 231}
228 232
229void afs_break_callback(struct afs_vnode *vnode) 233void afs_break_callback(struct afs_vnode *vnode, enum afs_cb_break_reason reason)
230{ 234{
231 write_seqlock(&vnode->cb_lock); 235 write_seqlock(&vnode->cb_lock);
232 __afs_break_callback(vnode); 236 __afs_break_callback(vnode, reason);
233 write_sequnlock(&vnode->cb_lock); 237 write_sequnlock(&vnode->cb_lock);
234} 238}
235 239
@@ -277,6 +281,8 @@ static void afs_break_one_callback(struct afs_server *server,
277 281
278 write_lock(&volume->cb_v_break_lock); 282 write_lock(&volume->cb_v_break_lock);
279 volume->cb_v_break++; 283 volume->cb_v_break++;
284 trace_afs_cb_break(fid, volume->cb_v_break,
285 afs_cb_break_for_volume_callback, false);
280 write_unlock(&volume->cb_v_break_lock); 286 write_unlock(&volume->cb_v_break_lock);
281 } else { 287 } else {
282 data.volume = NULL; 288 data.volume = NULL;
@@ -285,8 +291,10 @@ static void afs_break_one_callback(struct afs_server *server,
285 afs_iget5_test, &data); 291 afs_iget5_test, &data);
286 if (inode) { 292 if (inode) {
287 vnode = AFS_FS_I(inode); 293 vnode = AFS_FS_I(inode);
288 afs_break_callback(vnode); 294 afs_break_callback(vnode, afs_cb_break_for_callback);
289 iput(inode); 295 iput(inode);
296 } else {
297 trace_afs_cb_miss(fid, afs_cb_break_for_callback);
290 } 298 }
291 } 299 }
292 } 300 }