Lines Matching refs:gl

70 static inline void gfs2_update_reply_times(struct gfs2_glock *gl)  in gfs2_update_reply_times()  argument
73 const unsigned gltype = gl->gl_name.ln_type; in gfs2_update_reply_times()
74 unsigned index = test_bit(GLF_BLOCKING, &gl->gl_flags) ? in gfs2_update_reply_times()
79 rtt = ktime_to_ns(ktime_sub(ktime_get_real(), gl->gl_dstamp)); in gfs2_update_reply_times()
80 lks = this_cpu_ptr(gl->gl_name.ln_sbd->sd_lkstats); in gfs2_update_reply_times()
81 gfs2_update_stats(&gl->gl_stats, index, rtt); /* Local */ in gfs2_update_reply_times()
85 trace_gfs2_glock_lock_time(gl, rtt); in gfs2_update_reply_times()
97 static inline void gfs2_update_request_times(struct gfs2_glock *gl) in gfs2_update_request_times() argument
100 const unsigned gltype = gl->gl_name.ln_type; in gfs2_update_request_times()
105 dstamp = gl->gl_dstamp; in gfs2_update_request_times()
106 gl->gl_dstamp = ktime_get_real(); in gfs2_update_request_times()
107 irt = ktime_to_ns(ktime_sub(gl->gl_dstamp, dstamp)); in gfs2_update_request_times()
108 lks = this_cpu_ptr(gl->gl_name.ln_sbd->sd_lkstats); in gfs2_update_request_times()
109 gfs2_update_stats(&gl->gl_stats, GFS2_LKS_SIRT, irt); /* Local */ in gfs2_update_request_times()
116 struct gfs2_glock *gl = arg; in gdlm_ast() local
117 unsigned ret = gl->gl_state; in gdlm_ast()
119 gfs2_update_reply_times(gl); in gdlm_ast()
120 BUG_ON(gl->gl_lksb.sb_flags & DLM_SBF_DEMOTED); in gdlm_ast()
122 if ((gl->gl_lksb.sb_flags & DLM_SBF_VALNOTVALID) && gl->gl_lksb.sb_lvbptr) in gdlm_ast()
123 memset(gl->gl_lksb.sb_lvbptr, 0, GDLM_LVB_SIZE); in gdlm_ast()
125 switch (gl->gl_lksb.sb_status) { in gdlm_ast()
127 gfs2_glock_free(gl); in gdlm_ast()
144 ret = gl->gl_req; in gdlm_ast()
145 if (gl->gl_lksb.sb_flags & DLM_SBF_ALTMODE) { in gdlm_ast()
146 if (gl->gl_req == LM_ST_SHARED) in gdlm_ast()
148 else if (gl->gl_req == LM_ST_DEFERRED) in gdlm_ast()
154 set_bit(GLF_INITIAL, &gl->gl_flags); in gdlm_ast()
155 gfs2_glock_complete(gl, ret); in gdlm_ast()
158 if (!test_bit(GLF_INITIAL, &gl->gl_flags)) in gdlm_ast()
159 gl->gl_lksb.sb_lkid = 0; in gdlm_ast()
160 gfs2_glock_complete(gl, ret); in gdlm_ast()
165 struct gfs2_glock *gl = arg; in gdlm_bast() local
169 gfs2_glock_cb(gl, LM_ST_UNLOCKED); in gdlm_bast()
172 gfs2_glock_cb(gl, LM_ST_DEFERRED); in gdlm_bast()
175 gfs2_glock_cb(gl, LM_ST_SHARED); in gdlm_bast()
178 fs_err(gl->gl_name.ln_sbd, "unknown bast mode %d\n", mode); in gdlm_bast()
202 static u32 make_flags(struct gfs2_glock *gl, const unsigned int gfs_flags, in make_flags() argument
207 if (gl->gl_lksb.sb_lvbptr) in make_flags()
232 if (gl->gl_lksb.sb_lkid != 0) { in make_flags()
234 if (test_bit(GLF_BLOCKING, &gl->gl_flags)) in make_flags()
250 static int gdlm_lock(struct gfs2_glock *gl, unsigned int req_state, in gdlm_lock() argument
253 struct lm_lockstruct *ls = &gl->gl_name.ln_sbd->sd_lockstruct; in gdlm_lock()
258 req = make_mode(gl->gl_name.ln_sbd, req_state); in gdlm_lock()
259 lkf = make_flags(gl, flags, req); in gdlm_lock()
260 gfs2_glstats_inc(gl, GFS2_LKS_DCOUNT); in gdlm_lock()
261 gfs2_sbstats_inc(gl, GFS2_LKS_DCOUNT); in gdlm_lock()
262 if (gl->gl_lksb.sb_lkid) { in gdlm_lock()
263 gfs2_update_request_times(gl); in gdlm_lock()
267 gfs2_reverse_hex(strname + 7, gl->gl_name.ln_type); in gdlm_lock()
268 gfs2_reverse_hex(strname + 23, gl->gl_name.ln_number); in gdlm_lock()
269 gl->gl_dstamp = ktime_get_real(); in gdlm_lock()
275 return dlm_lock(ls->ls_dlm, req, &gl->gl_lksb, lkf, strname, in gdlm_lock()
276 GDLM_STRNAME_BYTES - 1, 0, gdlm_ast, gl, gdlm_bast); in gdlm_lock()
279 static void gdlm_put_lock(struct gfs2_glock *gl) in gdlm_put_lock() argument
281 struct gfs2_sbd *sdp = gl->gl_name.ln_sbd; in gdlm_put_lock()
286 if (gl->gl_lksb.sb_lkid == 0) { in gdlm_put_lock()
287 gfs2_glock_free(gl); in gdlm_put_lock()
291 clear_bit(GLF_BLOCKING, &gl->gl_flags); in gdlm_put_lock()
292 gfs2_glstats_inc(gl, GFS2_LKS_DCOUNT); in gdlm_put_lock()
293 gfs2_sbstats_inc(gl, GFS2_LKS_DCOUNT); in gdlm_put_lock()
294 gfs2_update_request_times(gl); in gdlm_put_lock()
298 if (gl->gl_lksb.sb_lvbptr && (gl->gl_state == LM_ST_EXCLUSIVE)) in gdlm_put_lock()
303 gfs2_glock_free(gl); in gdlm_put_lock()
307 error = dlm_unlock(ls->ls_dlm, gl->gl_lksb.sb_lkid, DLM_LKF_VALBLK, in gdlm_put_lock()
308 NULL, gl); in gdlm_put_lock()
311 gl->gl_name.ln_type, in gdlm_put_lock()
312 (unsigned long long)gl->gl_name.ln_number, error); in gdlm_put_lock()
317 static void gdlm_cancel(struct gfs2_glock *gl) in gdlm_cancel() argument
319 struct lm_lockstruct *ls = &gl->gl_name.ln_sbd->sd_lockstruct; in gdlm_cancel()
320 dlm_unlock(ls->ls_dlm, gl->gl_lksb.sb_lkid, DLM_LKF_CANCEL, NULL, gl); in gdlm_cancel()