Skip to content
  • Tejun Heo's avatar
    blkcg: drop unnecessary RCU locking · c875f4d0
    Tejun Heo authored
    
    
    Now that blkg additions / removals are always done under both q and
    blkcg locks, the only places RCU locking is necessary are
    blkg_lookup[_create]() for lookup w/o blkcg lock.  This patch drops
    unncessary RCU locking replacing it with plain blkcg locking as
    necessary.
    
    * blkiocg_pre_destroy() already perform proper locking and don't need
      RCU.  Dropped.
    
    * blkio_read_blkg_stats() now uses blkcg->lock instead of RCU read
      lock.  This isn't a hot path.
    
    * Now unnecessary synchronize_rcu() from queue exit paths removed.
      This makes q->nr_blkgs unnecessary.  Dropped.
    
    * RCU annotation on blkg->q removed.
    
    -v2: Vivek pointed out that blkg_lookup_create() still needs to be
         called under rcu_read_lock().  Updated.
    
    -v3: After the update, stats_lock locking in blkio_read_blkg_stats()
         shouldn't be using _irq variant as it otherwise ends up enabling
         irq while blkcg->lock is locked.  Fixed.
    
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Vivek Goyal <vgoyal@redhat.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    c875f4d0