forked from Minki/linux
GFS2: Fix race relating to glock min-hold time
In the case that a request for a glock arrives right after the grant reply has arrived, it sometimes means that the gl_tstamp field hasn't been updated recently enough. The net result is that the min-hold time for the glock is ignored. If this happens often enough, it leads to poor performance. This patch adds an additional test, so that if the reply pending bit is set on a glock, then it will select the maximum length of time for the min-hold time, rather than looking at gl_tstamp. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
This commit is contained in:
parent
0188d6c580
commit
dff5257473
@ -1265,6 +1265,8 @@ static void blocking_cb(struct gfs2_sbd *sdp, struct lm_lockname *name,
|
|||||||
holdtime = gl->gl_tchange + gl->gl_ops->go_min_hold_time;
|
holdtime = gl->gl_tchange + gl->gl_ops->go_min_hold_time;
|
||||||
if (time_before(now, holdtime))
|
if (time_before(now, holdtime))
|
||||||
delay = holdtime - now;
|
delay = holdtime - now;
|
||||||
|
if (test_bit(GLF_REPLY_PENDING, &gl->gl_flags))
|
||||||
|
delay = gl->gl_ops->go_min_hold_time;
|
||||||
|
|
||||||
spin_lock(&gl->gl_spin);
|
spin_lock(&gl->gl_spin);
|
||||||
handle_callback(gl, state, 1, delay);
|
handle_callback(gl, state, 1, delay);
|
||||||
|
Loading…
Reference in New Issue
Block a user