aboutsummaryrefslogtreecommitdiff
path: root/lib/mpi/generic_mpih-rshift.c
diff options
context:
space:
mode:
authorMike Snitzer <snitzer@redhat.com>2020-08-24 14:19:55 -0400
committerMike Snitzer <snitzer@redhat.com>2020-09-01 16:41:56 -0400
commitc322ee9320eaa4013ca3620b1130992916b19b31 (patch)
tree2f7a395244b925895261a7386467a18054b3fc8c /lib/mpi/generic_mpih-rshift.c
parentf9e040efcc28309e5c592f7e79085a9a52e31f58 (diff)
dm mpath: fix racey management of PG initialization
Commit 935fcc56abc3 ("dm mpath: only flush workqueue when needed") changed flush_multipath_work() to avoid needless workqueue flushing (of a multipath global workqueue). But that change didn't realize the surrounding flush_multipath_work() code should also only run if 'pg_init_in_progress' is set. Fix this by only doing all of flush_multipath_work()'s PG init related work if 'pg_init_in_progress' is set. Otherwise multipath_wait_for_pg_init_completion() will run unconditionally but the preceeding flush_workqueue(kmpath_handlerd) may not. This could lead to deadlock (though only if kmpath_handlerd never runs a corresponding work to decrement 'pg_init_in_progress'). It could also be, though highly unlikely, that the kmpath_handlerd work that does PG init completes before 'pg_init_in_progress' is set, and then an intervening DM table reload's multipath_postsuspend() triggers flush_multipath_work(). Fixes: 935fcc56abc3 ("dm mpath: only flush workqueue when needed") Cc: stable@vger.kernel.org Reported-by: Ben Marzinski <bmarzins@redhat.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Diffstat (limited to 'lib/mpi/generic_mpih-rshift.c')
0 files changed, 0 insertions, 0 deletions