Commit 34244d71 authored by Andreas Gruenbacher's avatar Andreas Gruenbacher

gfs2: Don't sleep during glock hash walk

In flush_delete_work, instead of flushing each individual pending
delayed work item, cancel and re-queue them for immediate execution.
The waiting isn't needed here because we're already waiting for all
queued work items to complete in gfs2_flush_delete_work.  This makes the
code more efficient, but more importantly, it avoids sleeping during a
rhashtable walk, inside rcu_read_lock().
Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
parent 58e08e8d
...@@ -1899,7 +1899,10 @@ bool gfs2_delete_work_queued(const struct gfs2_glock *gl) ...@@ -1899,7 +1899,10 @@ bool gfs2_delete_work_queued(const struct gfs2_glock *gl)
static void flush_delete_work(struct gfs2_glock *gl) static void flush_delete_work(struct gfs2_glock *gl)
{ {
flush_delayed_work(&gl->gl_delete); if (cancel_delayed_work(&gl->gl_delete)) {
queue_delayed_work(gfs2_delete_workqueue,
&gl->gl_delete, 0);
}
gfs2_glock_queue_work(gl, 0); gfs2_glock_queue_work(gl, 0);
} }
......
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