d9ef75221a
Currently we process a dirty lockres with the lockres->spinlock taken. While during the process, we may need to lock on dlm->ast_lock. This breaks the dependency of dlm->ast_lock(lock first) and lockres->spinlock(lock second). This patch fixes the problem. Since we can't release lockres->spinlock, we have to take dlm->ast_lock just before taking the lockres->spinlock and release it after lockres->spinlock is released. And use __dlm_queue_bast()/__dlm_queue_ast(), the nolock version, in dlm_shuffle_lists(). There are no too many locks on a lockres, so there is no performance harm. Signed-off-by: Wengang Wang <wen.gang.wang@oracle.com> Signed-off-by: Joel Becker <joel.becker@oracle.com> |
||
---|---|---|
.. | ||
dlmapi.h | ||
dlmast.c | ||
dlmcommon.h | ||
dlmconvert.c | ||
dlmconvert.h | ||
dlmdebug.c | ||
dlmdebug.h | ||
dlmdomain.c | ||
dlmdomain.h | ||
dlmlock.c | ||
dlmmaster.c | ||
dlmrecovery.c | ||
dlmthread.c | ||
dlmunlock.c | ||
dlmver.c | ||
dlmver.h | ||
Makefile |