• Wengang Wang's avatar
    ocfs2:dlm: avoid dlm->ast_lock lockres->spinlock dependency break · d9ef7522
    Wengang Wang authored
    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: default avatarWengang Wang <wen.gang.wang@oracle.com>
    Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
    d9ef7522
dlmcommon.h 29.1 KB