Skip to content
  • Tejun Heo's avatar
    writeback: add lockdep annotation to inode_to_wb() · aaa2cacf
    Tejun Heo authored
    
    
    With the previous three patches, all operations which acquire wb from
    inode are either under one of inode->i_lock, mapping->tree_lock or
    wb->list_lock or protected by unlocked_inode_to_wb transaction.  This
    will be depended upon by foreign inode wb switching.
    
    This patch adds lockdep assertion to inode_to_wb() so that usages
    outside the above list locks can be caught easily.  There are three
    exceptions.
    
    * locked_inode_to_wb_and_lock_list() is holding wb->list_lock but the
      wb may not be the inode's.  Ensuring that is the function's role
      after all.  Updated to deref inode->i_wb directly.
    
    * inode_wb_stat_unlocked_begin() is usually protected by combination
      of !I_WB_SWITCH and rcu_read_lock().  Updated to deref inode->i_wb
      directly.
    
    * inode_congested() wants to test whether inode->i_wb is set before
      starting the transaction.  Added inode_to_wb_is_valid() which tests
      inode->i_wb directly.
    
    v5: might_lock() removed.  It annotates that the lock is grabbed w/
        irq enabled which isn't the case and triggering lockdep warning
        spuriously.
    
    v4: might_lock() added to unlocked_inode_to_wb_begin().
    
    v3: inode_congested() conversion added.
    
    v2: locked_inode_to_wb_and_lock_list() was missing in the first
        version.
    
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Jens Axboe <axboe@kernel.dk>
    Cc: Jan Kara <jack@suse.cz>
    Cc: Wu Fengguang <fengguang.wu@intel.com>
    Cc: Greg Thelen <gthelen@google.com>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    aaa2cacf