提交 92cd12c5 编写于 作者: D David S. Miller

Merge branch 'rds-ib-trivial-patches'

Zhu Yanjun says:

====================
rds: ib: trivial patches

v2 -> v3
remove err from messages.
====================
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
...@@ -677,9 +677,8 @@ int rds_ib_cm_handle_connect(struct rdma_cm_id *cm_id, ...@@ -677,9 +677,8 @@ int rds_ib_cm_handle_connect(struct rdma_cm_id *cm_id,
event->param.conn.initiator_depth); event->param.conn.initiator_depth);
/* rdma_accept() calls rdma_reject() internally if it fails */ /* rdma_accept() calls rdma_reject() internally if it fails */
err = rdma_accept(cm_id, &conn_param); if (rdma_accept(cm_id, &conn_param))
if (err) rds_ib_conn_error(conn, "rdma_accept failed\n");
rds_ib_conn_error(conn, "rdma_accept failed (%d)\n", err);
out: out:
if (conn) if (conn)
......
...@@ -78,17 +78,15 @@ struct rds_ib_mr *rds_ib_alloc_fmr(struct rds_ib_device *rds_ibdev, int npages) ...@@ -78,17 +78,15 @@ struct rds_ib_mr *rds_ib_alloc_fmr(struct rds_ib_device *rds_ibdev, int npages)
return ibmr; return ibmr;
out_no_cigar: out_no_cigar:
if (ibmr) {
if (fmr->fmr)
ib_dealloc_fmr(fmr->fmr);
kfree(ibmr); kfree(ibmr);
}
atomic_dec(&pool->item_count); atomic_dec(&pool->item_count);
return ERR_PTR(err); return ERR_PTR(err);
} }
int rds_ib_map_fmr(struct rds_ib_device *rds_ibdev, struct rds_ib_mr *ibmr, static int rds_ib_map_fmr(struct rds_ib_device *rds_ibdev,
struct scatterlist *sg, unsigned int nents) struct rds_ib_mr *ibmr, struct scatterlist *sg,
unsigned int nents)
{ {
struct ib_device *dev = rds_ibdev->dev; struct ib_device *dev = rds_ibdev->dev;
struct rds_ib_fmr *fmr = &ibmr->u.fmr; struct rds_ib_fmr *fmr = &ibmr->u.fmr;
...@@ -114,29 +112,39 @@ int rds_ib_map_fmr(struct rds_ib_device *rds_ibdev, struct rds_ib_mr *ibmr, ...@@ -114,29 +112,39 @@ int rds_ib_map_fmr(struct rds_ib_device *rds_ibdev, struct rds_ib_mr *ibmr,
u64 dma_addr = ib_sg_dma_address(dev, &scat[i]); u64 dma_addr = ib_sg_dma_address(dev, &scat[i]);
if (dma_addr & ~PAGE_MASK) { if (dma_addr & ~PAGE_MASK) {
if (i > 0) if (i > 0) {
ib_dma_unmap_sg(dev, sg, nents,
DMA_BIDIRECTIONAL);
return -EINVAL; return -EINVAL;
else } else {
++page_cnt; ++page_cnt;
} }
}
if ((dma_addr + dma_len) & ~PAGE_MASK) { if ((dma_addr + dma_len) & ~PAGE_MASK) {
if (i < sg_dma_len - 1) if (i < sg_dma_len - 1) {
ib_dma_unmap_sg(dev, sg, nents,
DMA_BIDIRECTIONAL);
return -EINVAL; return -EINVAL;
else } else {
++page_cnt; ++page_cnt;
} }
}
len += dma_len; len += dma_len;
} }
page_cnt += len >> PAGE_SHIFT; page_cnt += len >> PAGE_SHIFT;
if (page_cnt > ibmr->pool->fmr_attr.max_pages) if (page_cnt > ibmr->pool->fmr_attr.max_pages) {
ib_dma_unmap_sg(dev, sg, nents, DMA_BIDIRECTIONAL);
return -EINVAL; return -EINVAL;
}
dma_pages = kmalloc_node(sizeof(u64) * page_cnt, GFP_ATOMIC, dma_pages = kmalloc_node(sizeof(u64) * page_cnt, GFP_ATOMIC,
rdsibdev_to_node(rds_ibdev)); rdsibdev_to_node(rds_ibdev));
if (!dma_pages) if (!dma_pages) {
ib_dma_unmap_sg(dev, sg, nents, DMA_BIDIRECTIONAL);
return -ENOMEM; return -ENOMEM;
}
page_cnt = 0; page_cnt = 0;
for (i = 0; i < sg_dma_len; ++i) { for (i = 0; i < sg_dma_len; ++i) {
...@@ -149,8 +157,10 @@ int rds_ib_map_fmr(struct rds_ib_device *rds_ibdev, struct rds_ib_mr *ibmr, ...@@ -149,8 +157,10 @@ int rds_ib_map_fmr(struct rds_ib_device *rds_ibdev, struct rds_ib_mr *ibmr,
} }
ret = ib_map_phys_fmr(fmr->fmr, dma_pages, page_cnt, io_addr); ret = ib_map_phys_fmr(fmr->fmr, dma_pages, page_cnt, io_addr);
if (ret) if (ret) {
ib_dma_unmap_sg(dev, sg, nents, DMA_BIDIRECTIONAL);
goto out; goto out;
}
/* Success - we successfully remapped the MR, so we can /* Success - we successfully remapped the MR, so we can
* safely tear down the old mapping. * safely tear down the old mapping.
......
...@@ -125,8 +125,6 @@ void rds_ib_mr_exit(void); ...@@ -125,8 +125,6 @@ void rds_ib_mr_exit(void);
void __rds_ib_teardown_mr(struct rds_ib_mr *); void __rds_ib_teardown_mr(struct rds_ib_mr *);
void rds_ib_teardown_mr(struct rds_ib_mr *); void rds_ib_teardown_mr(struct rds_ib_mr *);
struct rds_ib_mr *rds_ib_alloc_fmr(struct rds_ib_device *, int); struct rds_ib_mr *rds_ib_alloc_fmr(struct rds_ib_device *, int);
int rds_ib_map_fmr(struct rds_ib_device *, struct rds_ib_mr *,
struct scatterlist *, unsigned int);
struct rds_ib_mr *rds_ib_reuse_mr(struct rds_ib_mr_pool *); struct rds_ib_mr *rds_ib_reuse_mr(struct rds_ib_mr_pool *);
int rds_ib_flush_mr_pool(struct rds_ib_mr_pool *, int, struct rds_ib_mr **); int rds_ib_flush_mr_pool(struct rds_ib_mr_pool *, int, struct rds_ib_mr **);
struct rds_ib_mr *rds_ib_reg_fmr(struct rds_ib_device *, struct scatterlist *, struct rds_ib_mr *rds_ib_reg_fmr(struct rds_ib_device *, struct scatterlist *,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册