On 1/14/2015 6:09 PM, Doug Ledford wrote:
On Wed, 2015-01-14 at 18:02 +0200, Erez Shitrit wrote:
Hi Doug,

Perhaps I am missing something here, but ping6 still doesn't work for me
in many cases.

I think the reason is that your origin patch does the following:
in function ipoib_mcast_join_task
          if (test_bit(IPOIB_MCAST_FLAG_SENDONLY, &mcast->flags))
              ipoib_mcast_sendonly_join(mcast);
          else
              ipoib_mcast_join(dev, mcast, 1);
          return;
The flow for sendonly_join doesn't include handling the mc_task, so only
the first mc in the list (if it is sendonly mcg) will be sent, and no
more mcg's that are in the ipoib mc list are going to be sent. (see how
it is in ipoib_mcast_join flow)
Yes, I know what you are talking about.  However, my patches did not add
this bug, it was present in the original code.  Please check a plain
v3.18 kernel, which does not have my patches, and you will see that
ipoib_mcast_sendonly_join_complete also fails to restart the mcast join
thread there as well.
Agree.
but in 3.18 there was no call from mc_task to sendonly_join, just to the full-member join, so no need at that point to handle the task. (the call for sendonly-join was by demand whenever new packet to mcg was sent by the kernel)
only in 3.19 the sendonly join was called explicitly from the mc_task.

I can demonstrate it with the log of ipoib:
I am trying to ping6 fe80::202:c903:9f:3b0a via ib0

The log is:
ib0: restarting multicast task
ib0: setting up send only multicast group for
ff12:601b:ffff:0000:0000:0000:0000:0016
ib0: adding multicast entry for mgid ff12:601b:ffff:0000:0000:0001:ff43:3bf1
ib0: no multicast record for ff12:601b:ffff:0000:0000:0000:0000:0016,
starting sendonly join
ib0: join completion for ff12:601b:ffff:0000:0000:0000:0000:0001 (status 0)
ib0: MGID ff12:601b:ffff:0000:0000:0000:0000:0001 AV ffff88081afb5f40,
LID 0xc015, SL 0
ib0: join completion for ff12:401b:ffff:0000:0000:0000:0000:0001 (status 0)
ib0: MGID ff12:401b:ffff:0000:0000:0000:0000:0001 AV ffff88081e1c42c0,
LID 0xc014, SL 0
ib0: sendonly multicast join failed for
ff12:601b:ffff:0000:0000:0000:0000:0016, status -22
ib0: no multicast record for ff12:601b:ffff:0000:0000:0000:0000:0016,
starting sendonly join
ib0: sendonly multicast join failed for
ff12:601b:ffff:0000:0000:0000:0000:0016, status -22
ib0: no multicast record for ff12:601b:ffff:0000:0000:0000:0000:0016,
starting sendonly join
ib0: sendonly multicast join failed for
ff12:601b:ffff:0000:0000:0000:0000:0016, status -22
ib0: setting up send only multicast group for
ff12:601b:ffff:0000:0000:0000:0000:0002
ib0: no multicast record for ff12:601b:ffff:0000:0000:0000:0000:0016,
starting sendonly join
ib0: sendonly multicast join failed for
ff12:601b:ffff:0000:0000:0000:0000:0016, status -22
ib0: setting up send only multicast group for
ff12:601b:ffff:0000:0000:0001:ff9f:3b0a
      >>>>>> here you can see that the ipv6 address is added and queued
to the list
ib0: no multicast record for ff12:601b:ffff:0000:0000:0000:0000:0016,
starting sendonly join
ib0: sendonly multicast join failed for
ff12:601b:ffff:0000:0000:0000:0000:0016, status -22
      >>>>>> the ipv6 mcg will not be sent because it is after some other
sendonly, and no one in that flow re-queue the mc_task again.
This is a problem with the design of the original mcast task thread.
I'm looking at a fix now.  Currently the design only allows one join to
be outstanding at a time.  Is there a reason for that that I'm not aware
of?  Some historical context that I don't know about?
IMHO, the reason for only one mc on the air at a time was to make our life easier, otherwise there are locks to take/manage, races between few responses, etc. also, the multicast module in the core keeps all the requests in serialize mode. perhaps, you can use the relevant code from the full-member join in the sendonly joinin order to handle the mc_task, or to return the call to send-only to the mcast_send instead of the mc_task.



--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to