Commit a7ac203d authored by Andreas Gruenbacher's avatar Andreas Gruenbacher

gfs2: Fix "Introduce flag for glock holder auto-demotion"

Function demote_incompat_holders iterates over the list of glock holders
with list_for_each_entry, and it then sometimes removes the current
holder from the list.  This will get the loop stuck; we must use
list_for_each_entry_safe instead.
Reported-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
parent f3506eee
...@@ -411,14 +411,14 @@ static void do_error(struct gfs2_glock *gl, const int ret) ...@@ -411,14 +411,14 @@ static void do_error(struct gfs2_glock *gl, const int ret)
static void demote_incompat_holders(struct gfs2_glock *gl, static void demote_incompat_holders(struct gfs2_glock *gl,
struct gfs2_holder *new_gh) struct gfs2_holder *new_gh)
{ {
struct gfs2_holder *gh; struct gfs2_holder *gh, *tmp;
/* /*
* Demote incompatible holders before we make ourselves eligible. * Demote incompatible holders before we make ourselves eligible.
* (This holder may or may not allow auto-demoting, but we don't want * (This holder may or may not allow auto-demoting, but we don't want
* to demote the new holder before it's even granted.) * to demote the new holder before it's even granted.)
*/ */
list_for_each_entry(gh, &gl->gl_holders, gh_list) { list_for_each_entry_safe(gh, tmp, &gl->gl_holders, gh_list) {
/* /*
* Since holders are at the front of the list, we stop when we * Since holders are at the front of the list, we stop when we
* find the first non-holder. * find the first non-holder.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment