• Andrew Price's avatar
    GFS2: Use rht_for_each_entry_rcu in glock_hash_walk · 3dd1dd8c
    Andrew Price authored
    This lockdep splat was being triggered on umount:
    [55715.973122] ===============================
    [55715.980169] [ INFO: suspicious RCU usage. ]
    [55715.981021] 4.3.0-11553-g8d3de01c-dirty #15 Tainted: G        W
    [55715.982353] -------------------------------
    [55715.983301] fs/gfs2/glock.c:1427 suspicious rcu_dereference_protected() usage!
    The code it refers to is the rht_for_each_entry_safe usage in
    glock_hash_walk. The condition that triggers the warning is
    lockdep_rht_bucket_is_held(tbl, hash) which is checked in the
    __rcu_dereference_protected macro.
    The rhashtable buckets are not changed in glock_hash_walk so it's safe
    to rely on the rcu protection. Replace the rht_for_each_entry_safe()
    usage with rht_for_each_entry_rcu(), which doesn't care whether the
    bucket lock is held if the rcu read lock is held.
    Signed-off-by: default avatarAndrew Price <anprice@redhat.com>
    Signed-off-by: default avatarBob Peterson <rpeterso@redhat.com>
    Acked-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
glock.c 50.5 KB