IB/qib: Fix for broken sparse warning fix

Commit 1fb9fed6d489 ("IB/qib: Fix QP RCU sparse warning") broke QP
hash list deletion in qp_remove() badly.

This patch restores the former for loop behavior, while still fixing
the sparse warnings.

Cc: <stable@vger.kernel.org>
Reviewed-by: Gary Leshner <gary.s.leshner@intel.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>

authored by Mike Marciniszyn and committed by Roland Dreier d359f354 949db153

+3 -8
+3 -8
drivers/infiniband/hw/qib/qib_qp.c
··· 263 struct qib_qp __rcu **qpp; 264 265 qpp = &dev->qp_table[n]; 266 - q = rcu_dereference_protected(*qpp, 267 - lockdep_is_held(&dev->qpt_lock)); 268 - for (; q; qpp = &q->next) { 269 if (q == qp) { 270 atomic_dec(&qp->refcount); 271 *qpp = qp->next; 272 rcu_assign_pointer(qp->next, NULL); 273 - q = rcu_dereference_protected(*qpp, 274 - lockdep_is_held(&dev->qpt_lock)); 275 break; 276 } 277 - q = rcu_dereference_protected(*qpp, 278 - lockdep_is_held(&dev->qpt_lock)); 279 - } 280 } 281 282 spin_unlock_irqrestore(&dev->qpt_lock, flags);
··· 263 struct qib_qp __rcu **qpp; 264 265 qpp = &dev->qp_table[n]; 266 + for (; (q = rcu_dereference_protected(*qpp, 267 + lockdep_is_held(&dev->qpt_lock))) != NULL; 268 + qpp = &q->next) 269 if (q == qp) { 270 atomic_dec(&qp->refcount); 271 *qpp = qp->next; 272 rcu_assign_pointer(qp->next, NULL); 273 break; 274 } 275 } 276 277 spin_unlock_irqrestore(&dev->qpt_lock, flags);