lkml.org 
[lkml]   [2012]   [Feb]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 2/9] blkcg: drop unnecessary RCU locking
    On Thu, Feb 16, 2012 at 02:37:51PM -0800, Tejun Heo wrote:
    > Now that blkg additions / removals are always done under both q and
    > blkcg locks, the only place RCU locking is used is blkg_lookup() for
    > lockless lookup. This patch drops unncessary RCU locking replacing it
    > with plain blkcg / q locking as necessary.
    >
    > * blkg_lookup_create() and blkiocg_pre_destroy() already perform
    > proper locking and don't need RCU. Dropped.

    But blkg_lookup_create() is called under rcu() to protect blkcg pointer.
    And blkg_lookup() is also happening under same rcu read lock. So I think
    you can't drop rcu from blkg_lookup_create().

    > {
    > struct blkio_group *blkg, *new_blkg;
    >
    > - WARN_ON_ONCE(!rcu_read_lock_held());

    Don't we want to be called with rcu lock held needed for blkg_lookup()?

    > lockdep_assert_held(q->queue_lock);
    >
    > /*

    [..]
    > @@ -581,11 +580,9 @@ struct blkio_group *blkg_lookup_create(struct blkio_cgroup *blkcg,
    > * allocation is fixed.
    > */
    > spin_unlock_irq(q->queue_lock);
    > - rcu_read_unlock();
    >
    > new_blkg = blkg_alloc(blkcg, q);
    >
    > - rcu_read_lock();
    > spin_lock_irq(q->queue_lock);

    blkg_alloc() might sleep here with rcu lock held?

    Thanks
    Vivek


    \
     
     \ /
      Last update: 2012-02-17 17:23    [W:0.026 / U:30.380 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site