Merge remote-tracking branch 'workqueues/for-next'
authorStephen Rothwell <sfr@canb.auug.org.au>
Tue, 13 Sep 2016 02:31:37 +0000 (12:31 +1000)
committerStephen Rothwell <sfr@canb.auug.org.au>
Tue, 13 Sep 2016 02:31:37 +0000 (12:31 +1000)
1  2 
kernel/workqueue.c

diff --combined kernel/workqueue.c
index bd81f039027782b923b99be667caa12142c2bf5d,4eaec8b86d6560250fd2923fc8114905aef1c761..9debb7c4df648776e0346211cb4ad7644e8f7b47
@@@ -2974,31 -2974,6 +2974,31 @@@ bool flush_delayed_work(struct delayed_
  }
  EXPORT_SYMBOL(flush_delayed_work);
  
 +static bool __cancel_work(struct work_struct *work, bool is_dwork)
 +{
 +      unsigned long flags;
 +      int ret;
 +
 +      do {
 +              ret = try_to_grab_pending(work, is_dwork, &flags);
 +      } while (unlikely(ret == -EAGAIN));
 +
 +      if (unlikely(ret < 0))
 +              return false;
 +
 +      set_work_pool_and_clear_pending(work, get_work_pool_id(work));
 +      local_irq_restore(flags);
 +      return ret;
 +}
 +
 +/*
 + * See cancel_delayed_work()
 + */
 +bool cancel_work(struct work_struct *work)
 +{
 +      return __cancel_work(work, false);
 +}
 +
  /**
   * cancel_delayed_work - cancel a delayed work
   * @dwork: delayed_work to cancel
   */
  bool cancel_delayed_work(struct delayed_work *dwork)
  {
 -      unsigned long flags;
 -      int ret;
 -
 -      do {
 -              ret = try_to_grab_pending(&dwork->work, true, &flags);
 -      } while (unlikely(ret == -EAGAIN));
 -
 -      if (unlikely(ret < 0))
 -              return false;
 -
 -      set_work_pool_and_clear_pending(&dwork->work,
 -                                      get_work_pool_id(&dwork->work));
 -      local_irq_restore(flags);
 -      return ret;
 +      return __cancel_work(&dwork->work, true);
  }
  EXPORT_SYMBOL(cancel_delayed_work);
  
@@@ -4033,6 -4021,7 +4033,7 @@@ void destroy_workqueue(struct workqueue
                for (i = 0; i < WORK_NR_COLORS; i++) {
                        if (WARN_ON(pwq->nr_in_flight[i])) {
                                mutex_unlock(&wq->mutex);
+                               show_workqueue_state();
                                return;
                        }
                }
                    WARN_ON(pwq->nr_active) ||
                    WARN_ON(!list_empty(&pwq->delayed_works))) {
                        mutex_unlock(&wq->mutex);
+                       show_workqueue_state();
                        return;
                }
        }
This page took 0.029846 seconds and 5 git commands to generate.