|
@@ -1107,31 +1107,27 @@ static int try_to_grab_pending(struct work_struct *work, bool is_dwork,
|
|
|
* item is currently queued on that pool.
|
|
|
*/
|
|
|
cwq = get_work_cwq(work);
|
|
|
- if (cwq) {
|
|
|
- if (cwq->pool == pool) {
|
|
|
- debug_work_deactivate(work);
|
|
|
+ if (cwq && cwq->pool == pool) {
|
|
|
+ debug_work_deactivate(work);
|
|
|
|
|
|
- /*
|
|
|
- * A delayed work item cannot be grabbed directly
|
|
|
- * because it might have linked NO_COLOR work items
|
|
|
- * which, if left on the delayed_list, will confuse
|
|
|
- * cwq->nr_active management later on and cause
|
|
|
- * stall. Make sure the work item is activated
|
|
|
- * before grabbing.
|
|
|
- */
|
|
|
- if (*work_data_bits(work) & WORK_STRUCT_DELAYED)
|
|
|
- cwq_activate_delayed_work(work);
|
|
|
+ /*
|
|
|
+ * A delayed work item cannot be grabbed directly because
|
|
|
+ * it might have linked NO_COLOR work items which, if left
|
|
|
+ * on the delayed_list, will confuse cwq->nr_active
|
|
|
+ * management later on and cause stall. Make sure the work
|
|
|
+ * item is activated before grabbing.
|
|
|
+ */
|
|
|
+ if (*work_data_bits(work) & WORK_STRUCT_DELAYED)
|
|
|
+ cwq_activate_delayed_work(work);
|
|
|
|
|
|
- list_del_init(&work->entry);
|
|
|
- cwq_dec_nr_in_flight(get_work_cwq(work),
|
|
|
- get_work_color(work));
|
|
|
+ list_del_init(&work->entry);
|
|
|
+ cwq_dec_nr_in_flight(get_work_cwq(work), get_work_color(work));
|
|
|
|
|
|
- /* work->data points to cwq iff queued, point to pool */
|
|
|
- set_work_pool_and_keep_pending(work, pool->id);
|
|
|
+ /* work->data points to cwq iff queued, point to pool */
|
|
|
+ set_work_pool_and_keep_pending(work, pool->id);
|
|
|
|
|
|
- spin_unlock(&pool->lock);
|
|
|
- return 1;
|
|
|
- }
|
|
|
+ spin_unlock(&pool->lock);
|
|
|
+ return 1;
|
|
|
}
|
|
|
spin_unlock(&pool->lock);
|
|
|
fail:
|