Lines Matching refs:gl

73 static inline void gfs2_update_reply_times(struct gfs2_glock *gl)  in gfs2_update_reply_times()  argument
76 const unsigned gltype = gl->gl_name.ln_type; in gfs2_update_reply_times()
77 unsigned index = test_bit(GLF_BLOCKING, &gl->gl_flags) ? in gfs2_update_reply_times()
82 rtt = ktime_to_ns(ktime_sub(ktime_get_real(), gl->gl_dstamp)); in gfs2_update_reply_times()
83 lks = this_cpu_ptr(gl->gl_sbd->sd_lkstats); in gfs2_update_reply_times()
84 gfs2_update_stats(&gl->gl_stats, index, rtt); /* Local */ in gfs2_update_reply_times()
88 trace_gfs2_glock_lock_time(gl, rtt); in gfs2_update_reply_times()
100 static inline void gfs2_update_request_times(struct gfs2_glock *gl) in gfs2_update_request_times() argument
103 const unsigned gltype = gl->gl_name.ln_type; in gfs2_update_request_times()
108 dstamp = gl->gl_dstamp; in gfs2_update_request_times()
109 gl->gl_dstamp = ktime_get_real(); in gfs2_update_request_times()
110 irt = ktime_to_ns(ktime_sub(gl->gl_dstamp, dstamp)); in gfs2_update_request_times()
111 lks = this_cpu_ptr(gl->gl_sbd->sd_lkstats); in gfs2_update_request_times()
112 gfs2_update_stats(&gl->gl_stats, GFS2_LKS_SIRT, irt); /* Local */ in gfs2_update_request_times()
119 struct gfs2_glock *gl = arg; in gdlm_ast() local
120 unsigned ret = gl->gl_state; in gdlm_ast()
122 gfs2_update_reply_times(gl); in gdlm_ast()
123 BUG_ON(gl->gl_lksb.sb_flags & DLM_SBF_DEMOTED); in gdlm_ast()
125 if ((gl->gl_lksb.sb_flags & DLM_SBF_VALNOTVALID) && gl->gl_lksb.sb_lvbptr) in gdlm_ast()
126 memset(gl->gl_lksb.sb_lvbptr, 0, GDLM_LVB_SIZE); in gdlm_ast()
128 switch (gl->gl_lksb.sb_status) { in gdlm_ast()
130 gfs2_glock_free(gl); in gdlm_ast()
147 ret = gl->gl_req; in gdlm_ast()
148 if (gl->gl_lksb.sb_flags & DLM_SBF_ALTMODE) { in gdlm_ast()
149 if (gl->gl_req == LM_ST_SHARED) in gdlm_ast()
151 else if (gl->gl_req == LM_ST_DEFERRED) in gdlm_ast()
157 set_bit(GLF_INITIAL, &gl->gl_flags); in gdlm_ast()
158 gfs2_glock_complete(gl, ret); in gdlm_ast()
161 if (!test_bit(GLF_INITIAL, &gl->gl_flags)) in gdlm_ast()
162 gl->gl_lksb.sb_lkid = 0; in gdlm_ast()
163 gfs2_glock_complete(gl, ret); in gdlm_ast()
168 struct gfs2_glock *gl = arg; in gdlm_bast() local
172 gfs2_glock_cb(gl, LM_ST_UNLOCKED); in gdlm_bast()
175 gfs2_glock_cb(gl, LM_ST_DEFERRED); in gdlm_bast()
178 gfs2_glock_cb(gl, LM_ST_SHARED); in gdlm_bast()
205 static u32 make_flags(struct gfs2_glock *gl, const unsigned int gfs_flags, in make_flags() argument
210 if (gl->gl_lksb.sb_lvbptr) in make_flags()
235 if (gl->gl_lksb.sb_lkid != 0) { in make_flags()
237 if (test_bit(GLF_BLOCKING, &gl->gl_flags)) in make_flags()
253 static int gdlm_lock(struct gfs2_glock *gl, unsigned int req_state, in gdlm_lock() argument
256 struct lm_lockstruct *ls = &gl->gl_sbd->sd_lockstruct; in gdlm_lock()
262 lkf = make_flags(gl, flags, req); in gdlm_lock()
263 gfs2_glstats_inc(gl, GFS2_LKS_DCOUNT); in gdlm_lock()
264 gfs2_sbstats_inc(gl, GFS2_LKS_DCOUNT); in gdlm_lock()
265 if (gl->gl_lksb.sb_lkid) { in gdlm_lock()
266 gfs2_update_request_times(gl); in gdlm_lock()
270 gfs2_reverse_hex(strname + 7, gl->gl_name.ln_type); in gdlm_lock()
271 gfs2_reverse_hex(strname + 23, gl->gl_name.ln_number); in gdlm_lock()
272 gl->gl_dstamp = ktime_get_real(); in gdlm_lock()
278 return dlm_lock(ls->ls_dlm, req, &gl->gl_lksb, lkf, strname, in gdlm_lock()
279 GDLM_STRNAME_BYTES - 1, 0, gdlm_ast, gl, gdlm_bast); in gdlm_lock()
282 static void gdlm_put_lock(struct gfs2_glock *gl) in gdlm_put_lock() argument
284 struct gfs2_sbd *sdp = gl->gl_sbd; in gdlm_put_lock()
289 if (gl->gl_lksb.sb_lkid == 0) { in gdlm_put_lock()
290 gfs2_glock_free(gl); in gdlm_put_lock()
294 clear_bit(GLF_BLOCKING, &gl->gl_flags); in gdlm_put_lock()
295 gfs2_glstats_inc(gl, GFS2_LKS_DCOUNT); in gdlm_put_lock()
296 gfs2_sbstats_inc(gl, GFS2_LKS_DCOUNT); in gdlm_put_lock()
297 gfs2_update_request_times(gl); in gdlm_put_lock()
301 if (gl->gl_lksb.sb_lvbptr && (gl->gl_state == LM_ST_EXCLUSIVE)) in gdlm_put_lock()
306 gfs2_glock_free(gl); in gdlm_put_lock()
310 error = dlm_unlock(ls->ls_dlm, gl->gl_lksb.sb_lkid, DLM_LKF_VALBLK, in gdlm_put_lock()
311 NULL, gl); in gdlm_put_lock()
314 gl->gl_name.ln_type, in gdlm_put_lock()
315 (unsigned long long)gl->gl_name.ln_number, error); in gdlm_put_lock()
320 static void gdlm_cancel(struct gfs2_glock *gl) in gdlm_cancel() argument
322 struct lm_lockstruct *ls = &gl->gl_sbd->sd_lockstruct; in gdlm_cancel()
323 dlm_unlock(ls->ls_dlm, gl->gl_lksb.sb_lkid, DLM_LKF_CANCEL, NULL, gl); in gdlm_cancel()