Skip to content
  • xuejiufei's avatar
    ocfs2/dlm: move lock to the tail of grant queue while doing in-place convert · e5054c9a
    xuejiufei authored
    
    
    We have found a bug when two nodes doing umount one after another.
    
    1) Node 1 migrate a lockres that has 3 locks in grant queue such as
       N2(PR)<->N3(NL)<->N4(PR) to N2.  After migration, lvb of the lock
       N3(NL) and N4(PR) are empty on node 2 because migration target do not
       copy lvb to these two lock.
    
    2) Node 3 want to convert to PR, it can be granted in
       __dlmconvert_master(), and the order of these locks is unchanged.  The
       lvb of the lock N3(PR) on node 2 is copyed from lockres in function
       dlm_update_lvb() while the lvb of lock N4(PR) is still empty.
    
    3) Node 2 want to leave domain, it will migrate this lockres to node 3.
       Then node 2 will trigger the BUG in dlm_prepare_lvb_for_migration()
       when adding the lock N4(PR) to mres with the following message because
       the lvb of mres is already copied from lock N3(PR), but the lvb of lock
       N4(PR) is empty.
    
    "Mismatched lvb in lock cookie=%u:%llu, name=%.*s, node=%u"
    
    [akpm@linux-foundation.org: tweak comment]
    Signed-off-by: default avatarxuejiufei <xuejiufei@huawei.com>
    Acked-by: default avatarJoseph Qi <joseph.qi@huawei.com>
    Cc: Mark Fasheh <mfasheh@suse.de>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    e5054c9a