diff options
author | Bryan O'Sullivan <bos@pathscale.com> | 2007-03-15 17:45:03 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2007-04-18 23:20:57 -0400 |
commit | 5a7d4eea9185c20275307fcd1077d6f9dfdab48a (patch) | |
tree | 40c04e0bcc2ce15781f0090f4fa24d8bfb9fc38c /drivers/infiniband/hw/ipath | |
parent | 0ed3c594e3878274787810422760dc7c51e0ee72 (diff) |
IB/ipath: Discard multicast packets without a GRH
This patch fixes a bug where multicast packets without a GRH were not
being dropped as per the IB spec.
Signed-off-by: Ralph Campbell <ralph.campbell@qlogic.com>
Signed-off-by: Bryan O'Sullivan <bryan.osullivan@qlogic.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/hw/ipath')
-rw-r--r-- | drivers/infiniband/hw/ipath/ipath_verbs.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/infiniband/hw/ipath/ipath_verbs.c b/drivers/infiniband/hw/ipath/ipath_verbs.c index 9bec5a9b4557..f5604b876500 100644 --- a/drivers/infiniband/hw/ipath/ipath_verbs.c +++ b/drivers/infiniband/hw/ipath/ipath_verbs.c | |||
@@ -438,6 +438,10 @@ void ipath_ib_rcv(struct ipath_ibdev *dev, void *rhdr, void *data, | |||
438 | struct ipath_mcast *mcast; | 438 | struct ipath_mcast *mcast; |
439 | struct ipath_mcast_qp *p; | 439 | struct ipath_mcast_qp *p; |
440 | 440 | ||
441 | if (lnh != IPATH_LRH_GRH) { | ||
442 | dev->n_pkt_drops++; | ||
443 | goto bail; | ||
444 | } | ||
441 | mcast = ipath_mcast_find(&hdr->u.l.grh.dgid); | 445 | mcast = ipath_mcast_find(&hdr->u.l.grh.dgid); |
442 | if (mcast == NULL) { | 446 | if (mcast == NULL) { |
443 | dev->n_pkt_drops++; | 447 | dev->n_pkt_drops++; |
@@ -445,8 +449,7 @@ void ipath_ib_rcv(struct ipath_ibdev *dev, void *rhdr, void *data, | |||
445 | } | 449 | } |
446 | dev->n_multicast_rcv++; | 450 | dev->n_multicast_rcv++; |
447 | list_for_each_entry_rcu(p, &mcast->qp_list, list) | 451 | list_for_each_entry_rcu(p, &mcast->qp_list, list) |
448 | ipath_qp_rcv(dev, hdr, lnh == IPATH_LRH_GRH, data, | 452 | ipath_qp_rcv(dev, hdr, 1, data, tlen, p->qp); |
449 | tlen, p->qp); | ||
450 | /* | 453 | /* |
451 | * Notify ipath_multicast_detach() if it is waiting for us | 454 | * Notify ipath_multicast_detach() if it is waiting for us |
452 | * to finish. | 455 | * to finish. |