From: Lars Ellenberg Date: Mon, 28 Apr 2014 09:43:21 +0000 (+0200) Subject: drbd: add drbd_queue_work_if_unqueued helper X-Git-Tag: omap-for-v3.17/fixes-against-rc2~74^2~27 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=15e26f6a3c6de2c665b4a30b9a70a902111f281f;p=pandora-kernel.git drbd: add drbd_queue_work_if_unqueued helper We sometimes do if (list_empty(&w.list)) drbd_queue_work(&q, &w.list); Removal (list_del_init) may happen outside all locks, after all pending work entries have been moved to an on-stack local work list. For not dynamically allocated, but embeded, work structs, we must avoid to re-add until it really was removed. Move that list_empty check inside the spin_lock(&q->q_lock) within the helper function, and change to list_empty_careful(). This may have been the reason for a list_add corruption inside drbd_queue_work(). Signed-off-by: Philipp Reisner Signed-off-by: Lars Ellenberg --- Reading git-diff-tree failed