Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755555AbbBGCJa (ORCPT ); Fri, 6 Feb 2015 21:09:30 -0500 Received: from mail.efficios.com ([78.47.125.74]:39303 "EHLO mail.efficios.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753082AbbBGCJ3 (ORCPT ); Fri, 6 Feb 2015 21:09:29 -0500 From: Mathieu Desnoyers To: Huang Ying Cc: linux-kernel@vger.kernel.org, Mathieu Desnoyers , Paul McKenney , David Howells , Pranith Kumar , stable@vger.kernel.org Subject: [PATCH] llist: Fix missing lockless_dereference() Date: Fri, 6 Feb 2015 21:08:21 -0500 Message-Id: <1423274934-10625-1-git-send-email-mathieu.desnoyers@efficios.com> X-Mailer: git-send-email 2.1.4 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1397 Lines: 47 A lockless_dereference() appears to be missing in llist_del_first(). It should only matter for Alpha in practice. Signed-off-by: Mathieu Desnoyers CC: Huang Ying CC: Paul McKenney CC: David Howells CC: Pranith Kumar CC: stable@vger.kernel.org # v3.1+ --- lib/llist.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/llist.c b/lib/llist.c index f76196d..f34e176 100644 --- a/lib/llist.c +++ b/lib/llist.c @@ -26,6 +26,7 @@ #include #include #include +#include /** @@ -67,7 +68,12 @@ struct llist_node *llist_del_first(struct llist_head *head) { struct llist_node *entry, *old_entry, *next; - entry = head->first; + /* + * Load entry before entry->next. Matches the implicit + * memory barrier before the cmpxchg in llist_add_batch(), + * which ensures entry->next is stored before entry. + */ + entry = lockless_dereference(head->first); for (;;) { if (entry == NULL) return NULL; -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/