|
@@ -1550,14 +1550,15 @@ static void glock_hash_walk(glock_examiner examiner, const struct gfs2_sbd *sdp)
|
|
|
|
|
|
do {
|
|
|
gl = ERR_PTR(rhashtable_walk_start(&iter));
|
|
|
- if (gl)
|
|
|
- continue;
|
|
|
+ if (IS_ERR(gl))
|
|
|
+ goto walk_stop;
|
|
|
|
|
|
while ((gl = rhashtable_walk_next(&iter)) && !IS_ERR(gl))
|
|
|
- if ((gl->gl_name.ln_sbd == sdp) &&
|
|
|
+ if (gl->gl_name.ln_sbd == sdp &&
|
|
|
lockref_get_not_dead(&gl->gl_lockref))
|
|
|
examiner(gl);
|
|
|
|
|
|
+walk_stop:
|
|
|
rhashtable_walk_stop(&iter);
|
|
|
} while (cond_resched(), gl == ERR_PTR(-EAGAIN));
|
|
|
|
|
@@ -1940,6 +1941,7 @@ static void gfs2_glock_iter_next(struct gfs2_glock_iter *gi)
|
|
|
}
|
|
|
|
|
|
static void *gfs2_glock_seq_start(struct seq_file *seq, loff_t *pos)
|
|
|
+ __acquires(RCU)
|
|
|
{
|
|
|
struct gfs2_glock_iter *gi = seq->private;
|
|
|
loff_t n = *pos;
|
|
@@ -1972,6 +1974,7 @@ static void *gfs2_glock_seq_next(struct seq_file *seq, void *iter_ptr,
|
|
|
}
|
|
|
|
|
|
static void gfs2_glock_seq_stop(struct seq_file *seq, void *iter_ptr)
|
|
|
+ __releases(RCU)
|
|
|
{
|
|
|
struct gfs2_glock_iter *gi = seq->private;
|
|
|
|