dlm: fix sleep in atomic context
authorAlexander Aring <aahringo@redhat.com>
Wed, 17 Apr 2024 19:13:22 +0000 (15:13 -0400)
committerDavid Teigland <teigland@redhat.com>
Wed, 17 Apr 2024 19:20:04 +0000 (14:20 -0500)
commit7b012732d005fba22912dda038dd253e3b9a1bfc
tree7093ab567d97a4f508c8f4f00b02d057cbe0677d
parent15fd7e55177a8d6243096bb6b9536cd15f56d547
dlm: fix sleep in atomic context

This patch changes the orphans mutex to a spinlock since commit
c288745f1d4a ("dlm: avoid blocking receive at the end of recovery") is
using a rwlock_t to lock the DLM message receive path and do_purge() can
be called while this lock is held that forbids to sleep.

We need to use spin_lock_bh() because also a user context that calls
dlm_user_purge() can call do_purge() and since commit 92d59adfaf71
("dlm: do message processing in softirq context") the DLM message
receive path is done under softirq context.

Fixes: c288745f1d4a ("dlm: avoid blocking receive at the end of recovery")
Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Closes: https://lore.kernel.org/gfs2/9ad928eb-2ece-4ad9-a79c-d2bce228e4bc@moroto.mountain/
Signed-off-by: Alexander Aring <aahringo@redhat.com>
Signed-off-by: David Teigland <teigland@redhat.com>
fs/dlm/dlm_internal.h
fs/dlm/lock.c
fs/dlm/lockspace.c