|
@@ -775,6 +775,22 @@ static void path_rec_completion(int status,
|
|
|
spin_lock_irqsave(&priv->lock, flags);
|
|
|
|
|
|
if (!IS_ERR_OR_NULL(ah)) {
|
|
|
+ /*
|
|
|
+ * pathrec.dgid is used as the database key from the LLADDR,
|
|
|
+ * it must remain unchanged even if the SA returns a different
|
|
|
+ * GID to use in the AH.
|
|
|
+ */
|
|
|
+ if (memcmp(pathrec->dgid.raw, path->pathrec.dgid.raw,
|
|
|
+ sizeof(union ib_gid))) {
|
|
|
+ ipoib_dbg(
|
|
|
+ priv,
|
|
|
+ "%s got PathRec for gid %pI6 while asked for %pI6\n",
|
|
|
+ dev->name, pathrec->dgid.raw,
|
|
|
+ path->pathrec.dgid.raw);
|
|
|
+ memcpy(pathrec->dgid.raw, path->pathrec.dgid.raw,
|
|
|
+ sizeof(union ib_gid));
|
|
|
+ }
|
|
|
+
|
|
|
path->pathrec = *pathrec;
|
|
|
|
|
|
old_ah = path->ah;
|