Lines Matching refs:gl

72 static inline void gfs2_update_reply_times(struct gfs2_glock *gl)  in gfs2_update_reply_times()  argument
75 const unsigned gltype = gl->gl_name.ln_type; in gfs2_update_reply_times()
76 unsigned index = test_bit(GLF_BLOCKING, &gl->gl_flags) ? in gfs2_update_reply_times()
81 rtt = ktime_to_ns(ktime_sub(ktime_get_real(), gl->gl_dstamp)); in gfs2_update_reply_times()
82 lks = this_cpu_ptr(gl->gl_name.ln_sbd->sd_lkstats); in gfs2_update_reply_times()
83 gfs2_update_stats(&gl->gl_stats, index, rtt); /* Local */ in gfs2_update_reply_times()
87 trace_gfs2_glock_lock_time(gl, rtt); in gfs2_update_reply_times()
99 static inline void gfs2_update_request_times(struct gfs2_glock *gl) in gfs2_update_request_times() argument
102 const unsigned gltype = gl->gl_name.ln_type; in gfs2_update_request_times()
107 dstamp = gl->gl_dstamp; in gfs2_update_request_times()
108 gl->gl_dstamp = ktime_get_real(); in gfs2_update_request_times()
109 irt = ktime_to_ns(ktime_sub(gl->gl_dstamp, dstamp)); in gfs2_update_request_times()
110 lks = this_cpu_ptr(gl->gl_name.ln_sbd->sd_lkstats); in gfs2_update_request_times()
111 gfs2_update_stats(&gl->gl_stats, GFS2_LKS_SIRT, irt); /* Local */ in gfs2_update_request_times()
118 struct gfs2_glock *gl = arg; in gdlm_ast() local
119 unsigned ret = gl->gl_state; in gdlm_ast()
121 gfs2_update_reply_times(gl); in gdlm_ast()
122 BUG_ON(gl->gl_lksb.sb_flags & DLM_SBF_DEMOTED); in gdlm_ast()
124 if ((gl->gl_lksb.sb_flags & DLM_SBF_VALNOTVALID) && gl->gl_lksb.sb_lvbptr) in gdlm_ast()
125 memset(gl->gl_lksb.sb_lvbptr, 0, GDLM_LVB_SIZE); in gdlm_ast()
127 switch (gl->gl_lksb.sb_status) { in gdlm_ast()
129 if (gl->gl_ops->go_free) in gdlm_ast()
130 gl->gl_ops->go_free(gl); in gdlm_ast()
131 gfs2_glock_free(gl); in gdlm_ast()
148 ret = gl->gl_req; in gdlm_ast()
149 if (gl->gl_lksb.sb_flags & DLM_SBF_ALTMODE) { in gdlm_ast()
150 if (gl->gl_req == LM_ST_SHARED) in gdlm_ast()
152 else if (gl->gl_req == LM_ST_DEFERRED) in gdlm_ast()
158 set_bit(GLF_INITIAL, &gl->gl_flags); in gdlm_ast()
159 gfs2_glock_complete(gl, ret); in gdlm_ast()
162 if (!test_bit(GLF_INITIAL, &gl->gl_flags)) in gdlm_ast()
163 gl->gl_lksb.sb_lkid = 0; in gdlm_ast()
164 gfs2_glock_complete(gl, ret); in gdlm_ast()
169 struct gfs2_glock *gl = arg; in gdlm_bast() local
173 gfs2_glock_cb(gl, LM_ST_UNLOCKED); in gdlm_bast()
176 gfs2_glock_cb(gl, LM_ST_DEFERRED); in gdlm_bast()
179 gfs2_glock_cb(gl, LM_ST_SHARED); in gdlm_bast()
182 fs_err(gl->gl_name.ln_sbd, "unknown bast mode %d\n", mode); in gdlm_bast()
206 static u32 make_flags(struct gfs2_glock *gl, const unsigned int gfs_flags, in make_flags() argument
211 if (gl->gl_lksb.sb_lvbptr) in make_flags()
236 if (gl->gl_lksb.sb_lkid != 0) { in make_flags()
238 if (test_bit(GLF_BLOCKING, &gl->gl_flags)) in make_flags()
254 static int gdlm_lock(struct gfs2_glock *gl, unsigned int req_state, in gdlm_lock() argument
257 struct lm_lockstruct *ls = &gl->gl_name.ln_sbd->sd_lockstruct; in gdlm_lock()
262 req = make_mode(gl->gl_name.ln_sbd, req_state); in gdlm_lock()
263 lkf = make_flags(gl, flags, req); in gdlm_lock()
264 gfs2_glstats_inc(gl, GFS2_LKS_DCOUNT); in gdlm_lock()
265 gfs2_sbstats_inc(gl, GFS2_LKS_DCOUNT); in gdlm_lock()
266 if (gl->gl_lksb.sb_lkid) { in gdlm_lock()
267 gfs2_update_request_times(gl); in gdlm_lock()
271 gfs2_reverse_hex(strname + 7, gl->gl_name.ln_type); in gdlm_lock()
272 gfs2_reverse_hex(strname + 23, gl->gl_name.ln_number); in gdlm_lock()
273 gl->gl_dstamp = ktime_get_real(); in gdlm_lock()
279 return dlm_lock(ls->ls_dlm, req, &gl->gl_lksb, lkf, strname, in gdlm_lock()
280 GDLM_STRNAME_BYTES - 1, 0, gdlm_ast, gl, gdlm_bast); in gdlm_lock()
283 static void gdlm_put_lock(struct gfs2_glock *gl) in gdlm_put_lock() argument
285 struct gfs2_sbd *sdp = gl->gl_name.ln_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 gfs2_glock_free(gl); in gdlm_put_lock()
307 !gl->gl_lksb.sb_lvbptr) { in gdlm_put_lock()
308 gfs2_glock_free(gl); in gdlm_put_lock()
312 error = dlm_unlock(ls->ls_dlm, gl->gl_lksb.sb_lkid, DLM_LKF_VALBLK, in gdlm_put_lock()
313 NULL, gl); in gdlm_put_lock()
316 gl->gl_name.ln_type, in gdlm_put_lock()
317 (unsigned long long)gl->gl_name.ln_number, error); in gdlm_put_lock()
322 static void gdlm_cancel(struct gfs2_glock *gl) in gdlm_cancel() argument
324 struct lm_lockstruct *ls = &gl->gl_name.ln_sbd->sd_lockstruct; in gdlm_cancel()
325 dlm_unlock(ls->ls_dlm, gl->gl_lksb.sb_lkid, DLM_LKF_CANCEL, NULL, gl); in gdlm_cancel()