• Tejun Heo's avatar
    net/ceph: make ceph_msgr_wq non-reentrant · f363e45f
    Tejun Heo authored
    ceph messenger code does a rather complex dancing around multithread
    workqueue to make sure the same work item isn't executed concurrently
    on different CPUs.  This restriction can be provided by workqueue with
    WQ_NON_REENTRANT.
    
    Make ceph_msgr_wq non-reentrant workqueue with the default concurrency
    level and remove the QUEUED/BUSY logic.
    
    * This removes backoff handling in con_work() but it couldn't reliably
      block execution of con_work() to begin with - queue_con() can be
      called after the work started but before BUSY is set.  It seems that
      it was an optimization for a rather cold path and can be safely
      removed.
    
    * The number of concurrent work items is bound by the number of
      connections and connetions are independent from each other.  With
      the default concurrency level, different connections will be
      executed independently.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Sage Weil <sage@newdream.net>
    Cc: ceph-devel@vger.kernel.org
    Signed-off-by: default avatarSage Weil <sage@newdream.net>
    f363e45f
messenger.c 59.2 KB