svn commit: r286087 - head/sys/ofed/drivers/infiniband/core

Mark Johnston markj at FreeBSD.org
Thu Jul 30 18:28:38 UTC 2015


Author: markj
Date: Thu Jul 30 18:28:37 2015
New Revision: 286087
URL: https://svnweb.freebsd.org/changeset/base/286087

Log:
  ib mad: fix an incorrect use of list_for_each_entry
  
  In tf_dequeue(), if we reach the end of the list without finding a
  non-cancelled element, "tmp" will be a pointer into the list head, so the
  tmp->canceled check is bogus. Use a flag instead.
  
  Submitted by:	Tao Liu <Tao.Liu at isilon.com>
  Reviewed by:	hselasky
  MFC after:	1 week
  Sponsored by:	EMC / Isilon Storage Division
  Differential Revision: https://reviews.freebsd.org/D3244

Modified:
  head/sys/ofed/drivers/infiniband/core/mad.c

Modified: head/sys/ofed/drivers/infiniband/core/mad.c
==============================================================================
--- head/sys/ofed/drivers/infiniband/core/mad.c	Thu Jul 30 18:28:34 2015	(r286086)
+++ head/sys/ofed/drivers/infiniband/core/mad.c	Thu Jul 30 18:28:37 2015	(r286087)
@@ -292,6 +292,7 @@ static struct tf_entry *tf_dequeue(struc
 	unsigned long flags;
 	unsigned long time_left;
 	struct tf_entry *tmp, *tmp1;
+	bool found = false;
 
 	spin_lock_irqsave(&tf->lists_lock, flags);
 	if (list_empty(&tf->fifo_head)) {
@@ -300,11 +301,13 @@ static struct tf_entry *tf_dequeue(struc
 	}
 
 	list_for_each_entry(tmp, &tf->fifo_head, fifo_list) {
-		if (!tmp->canceled)
+		if (!tmp->canceled) {
+			found = true;
 			break;
+		}
 	}
 
-	if (tmp->canceled) {
+	if (!found) {
 		spin_unlock_irqrestore(&tf->lists_lock, flags);
 		return NULL;
 	}


More information about the svn-src-head mailing list