• Christoph Hellwig's avatar
    xfs: fix locking in xfs_iget_cache_hit · bc990f5c
    Christoph Hellwig authored
    The locking in xfs_iget_cache_hit currently has numerous problems:
    
     - we clear the reclaim tag without i_flags_lock which protects
       modifications to it
     - we call inode_init_always which can sleep with pag_ici_lock
       held (this is oss.sgi.com BZ #819)
     - we acquire and drop i_flags_lock a lot and thus provide no
       consistency between the various flags we set/clear under it
    
    This patch fixes all that with a major revamp of the locking in
    the function.  The new version acquires i_flags_lock early and
    only drops it once we need to call into inode_init_always or before
    calling xfs_ilock.
    
    This patch fixes a bug seen in the wild where we race modifying the
    reclaim tag.
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarFelix Blyakher <felixb@sgi.com>
    Reviewed-by: default avatarEric Sandeen <sandeen@sandeen.net>
    Signed-off-by: default avatarFelix Blyakher <felixb@sgi.com>
    bc990f5c
xfs_sync.c 18.2 KB