forked from Minki/linux
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: Andreas Gruenbacher <agruenba@redhat.com>
This commit is contained in:
parent
58e08e8d83
commit
34244d711d
@ -1899,7 +1899,10 @@ bool gfs2_delete_work_queued(const 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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user