diff options
Diffstat (limited to 'fs/gfs2/glock.c')
-rw-r--r-- | fs/gfs2/glock.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c index 2bf62bcc5181..297421c0427a 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c | |||
@@ -39,6 +39,8 @@ | |||
39 | #include "super.h" | 39 | #include "super.h" |
40 | #include "util.h" | 40 | #include "util.h" |
41 | #include "bmap.h" | 41 | #include "bmap.h" |
42 | #define CREATE_TRACE_POINTS | ||
43 | #include "trace_gfs2.h" | ||
42 | 44 | ||
43 | struct gfs2_gl_hash_bucket { | 45 | struct gfs2_gl_hash_bucket { |
44 | struct hlist_head hb_list; | 46 | struct hlist_head hb_list; |
@@ -155,7 +157,7 @@ static void glock_free(struct gfs2_glock *gl) | |||
155 | 157 | ||
156 | if (aspace) | 158 | if (aspace) |
157 | gfs2_aspace_put(aspace); | 159 | gfs2_aspace_put(aspace); |
158 | 160 | trace_gfs2_glock_put(gl); | |
159 | sdp->sd_lockstruct.ls_ops->lm_put_lock(gfs2_glock_cachep, gl); | 161 | sdp->sd_lockstruct.ls_ops->lm_put_lock(gfs2_glock_cachep, gl); |
160 | } | 162 | } |
161 | 163 | ||
@@ -317,14 +319,17 @@ restart: | |||
317 | return 2; | 319 | return 2; |
318 | gh->gh_error = ret; | 320 | gh->gh_error = ret; |
319 | list_del_init(&gh->gh_list); | 321 | list_del_init(&gh->gh_list); |
322 | trace_gfs2_glock_queue(gh, 0); | ||
320 | gfs2_holder_wake(gh); | 323 | gfs2_holder_wake(gh); |
321 | goto restart; | 324 | goto restart; |
322 | } | 325 | } |
323 | set_bit(HIF_HOLDER, &gh->gh_iflags); | 326 | set_bit(HIF_HOLDER, &gh->gh_iflags); |
327 | trace_gfs2_promote(gh, 1); | ||
324 | gfs2_holder_wake(gh); | 328 | gfs2_holder_wake(gh); |
325 | goto restart; | 329 | goto restart; |
326 | } | 330 | } |
327 | set_bit(HIF_HOLDER, &gh->gh_iflags); | 331 | set_bit(HIF_HOLDER, &gh->gh_iflags); |
332 | trace_gfs2_promote(gh, 0); | ||
328 | gfs2_holder_wake(gh); | 333 | gfs2_holder_wake(gh); |
329 | continue; | 334 | continue; |
330 | } | 335 | } |
@@ -354,6 +359,7 @@ static inline void do_error(struct gfs2_glock *gl, const int ret) | |||
354 | else | 359 | else |
355 | continue; | 360 | continue; |
356 | list_del_init(&gh->gh_list); | 361 | list_del_init(&gh->gh_list); |
362 | trace_gfs2_glock_queue(gh, 0); | ||
357 | gfs2_holder_wake(gh); | 363 | gfs2_holder_wake(gh); |
358 | } | 364 | } |
359 | } | 365 | } |
@@ -422,6 +428,7 @@ static void finish_xmote(struct gfs2_glock *gl, unsigned int ret) | |||
422 | int rv; | 428 | int rv; |
423 | 429 | ||
424 | spin_lock(&gl->gl_spin); | 430 | spin_lock(&gl->gl_spin); |
431 | trace_gfs2_glock_state_change(gl, state); | ||
425 | state_change(gl, state); | 432 | state_change(gl, state); |
426 | gh = find_first_waiter(gl); | 433 | gh = find_first_waiter(gl); |
427 | 434 | ||
@@ -851,6 +858,7 @@ static void handle_callback(struct gfs2_glock *gl, unsigned int state, | |||
851 | gl->gl_demote_state != state) { | 858 | gl->gl_demote_state != state) { |
852 | gl->gl_demote_state = LM_ST_UNLOCKED; | 859 | gl->gl_demote_state = LM_ST_UNLOCKED; |
853 | } | 860 | } |
861 | trace_gfs2_demote_rq(gl); | ||
854 | } | 862 | } |
855 | 863 | ||
856 | /** | 864 | /** |
@@ -936,6 +944,7 @@ fail: | |||
936 | goto do_cancel; | 944 | goto do_cancel; |
937 | return; | 945 | return; |
938 | } | 946 | } |
947 | trace_gfs2_glock_queue(gh, 1); | ||
939 | list_add_tail(&gh->gh_list, insert_pt); | 948 | list_add_tail(&gh->gh_list, insert_pt); |
940 | do_cancel: | 949 | do_cancel: |
941 | gh = list_entry(gl->gl_holders.next, struct gfs2_holder, gh_list); | 950 | gh = list_entry(gl->gl_holders.next, struct gfs2_holder, gh_list); |
@@ -1032,6 +1041,7 @@ void gfs2_glock_dq(struct gfs2_holder *gh) | |||
1032 | !test_bit(GLF_DEMOTE, &gl->gl_flags)) | 1041 | !test_bit(GLF_DEMOTE, &gl->gl_flags)) |
1033 | fast_path = 1; | 1042 | fast_path = 1; |
1034 | } | 1043 | } |
1044 | trace_gfs2_glock_queue(gh, 0); | ||
1035 | spin_unlock(&gl->gl_spin); | 1045 | spin_unlock(&gl->gl_spin); |
1036 | if (likely(fast_path)) | 1046 | if (likely(fast_path)) |
1037 | return; | 1047 | return; |