Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband

* 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband:
IB/iser: Handle aborting a command after it is sent
IB/mthca: Fix thinko in init_mr_table()
RDMA/cxgb3: Fix resource leak in cxio_hal_init_ctrl_qp()

+19 -14
+8 -4
drivers/infiniband/hw/cxgb3/cxio_hal.c
··· 498 498 u64 sge_cmd, ctx0, ctx1; 499 499 u64 base_addr; 500 500 struct t3_modify_qp_wr *wqe; 501 - struct sk_buff *skb = alloc_skb(sizeof(*wqe), GFP_KERNEL); 501 + struct sk_buff *skb; 502 502 503 - 503 + skb = alloc_skb(sizeof(*wqe), GFP_KERNEL); 504 504 if (!skb) { 505 505 PDBG("%s alloc_skb failed\n", __FUNCTION__); 506 506 return -ENOMEM; ··· 508 508 err = cxio_hal_init_ctrl_cq(rdev_p); 509 509 if (err) { 510 510 PDBG("%s err %d initializing ctrl_cq\n", __FUNCTION__, err); 511 - return err; 511 + goto err; 512 512 } 513 513 rdev_p->ctrl_qp.workq = dma_alloc_coherent( 514 514 &(rdev_p->rnic_info.pdev->dev), ··· 518 518 GFP_KERNEL); 519 519 if (!rdev_p->ctrl_qp.workq) { 520 520 PDBG("%s dma_alloc_coherent failed\n", __FUNCTION__); 521 - return -ENOMEM; 521 + err = -ENOMEM; 522 + goto err; 522 523 } 523 524 pci_unmap_addr_set(&rdev_p->ctrl_qp, mapping, 524 525 rdev_p->ctrl_qp.dma_addr); ··· 557 556 rdev_p->ctrl_qp.workq, 1 << T3_CTRL_QP_SIZE_LOG2); 558 557 skb->priority = CPL_PRIORITY_CONTROL; 559 558 return (cxgb3_ofld_send(rdev_p->t3cdev_p, skb)); 559 + err: 560 + kfree_skb(skb); 561 + return err; 560 562 } 561 563 562 564 static int cxio_hal_destroy_ctrl_qp(struct cxio_rdev *rdev_p)
+2 -2
drivers/infiniband/hw/mthca/mthca_mr.c
··· 881 881 } 882 882 mpts = mtts = 1 << i; 883 883 } else { 884 - mpts = dev->limits.num_mtt_segs; 885 - mtts = dev->limits.num_mpts; 884 + mtts = dev->limits.num_mtt_segs; 885 + mpts = dev->limits.num_mpts; 886 886 } 887 887 888 888 if (!mthca_is_memfree(dev) &&
+9 -8
drivers/infiniband/ulp/iser/iser_initiator.c
··· 658 658 { 659 659 int deferred; 660 660 int is_rdma_aligned = 1; 661 + struct iser_regd_buf *regd; 661 662 662 663 /* if we were reading, copy back to unaligned sglist, 663 664 * anyway dma_unmap and free the copy ··· 673 672 } 674 673 675 674 if (iser_ctask->dir[ISER_DIR_IN]) { 676 - deferred = iser_regd_buff_release 677 - (&iser_ctask->rdma_regd[ISER_DIR_IN]); 675 + regd = &iser_ctask->rdma_regd[ISER_DIR_IN]; 676 + deferred = iser_regd_buff_release(regd); 678 677 if (deferred) { 679 - iser_err("References remain for BUF-IN rdma reg\n"); 680 - BUG(); 678 + iser_err("%d references remain for BUF-IN rdma reg\n", 679 + atomic_read(&regd->ref_count)); 681 680 } 682 681 } 683 682 684 683 if (iser_ctask->dir[ISER_DIR_OUT]) { 685 - deferred = iser_regd_buff_release 686 - (&iser_ctask->rdma_regd[ISER_DIR_OUT]); 684 + regd = &iser_ctask->rdma_regd[ISER_DIR_OUT]; 685 + deferred = iser_regd_buff_release(regd); 687 686 if (deferred) { 688 - iser_err("References remain for BUF-OUT rdma reg\n"); 689 - BUG(); 687 + iser_err("%d references remain for BUF-OUT rdma reg\n", 688 + atomic_read(&regd->ref_count)); 690 689 } 691 690 } 692 691