From: Bart Van Assche <bvanassche-HInyCGIudOg@public.gmane.org>
To: Roland Dreier <roland-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Cc: Sagi Grimberg <sagig-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
Vu Pham <vuhuong-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
David Dillow <dave-i1Mk8JYDVaaSihdK6806/g@public.gmane.org>,
Sebastian Parschauer
<sebastian.riemer-EIkl63zCoXaH+58JC4qpiA@public.gmane.org>,
linux-rdma <linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: [PATCH 6/9] IB/srp: Make srp_alloc_req_data() reallocate request data
Date: Tue, 06 May 2014 14:54:40 +0200 [thread overview]
Message-ID: <5368DB90.9050209@acm.org> (raw)
In-Reply-To: <5368DA5B.80609-HInyCGIudOg@public.gmane.org>
This patch is needed by the patch that adds fast registration support.
Signed-off-by: Bart Van Assche <bvanassche-HInyCGIudOg@public.gmane.org>
Cc: Roland Dreier <roland-BHEL68pLQRGGvPXPguhicg@public.gmane.org>
Cc: David Dillow <dave-i1Mk8JYDVaaSihdK6806/g@public.gmane.org>
Cc: Sagi Grimberg <sagig-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Cc: Vu Pham <vu-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Cc: Sebastian Parschauer <sebastian.riemer-EIkl63zCoXaH+58JC4qpiA@public.gmane.org>
---
drivers/infiniband/ulp/srp/ib_srp.c | 41 ++++++++++++++++++++++++-------------
1 file changed, 27 insertions(+), 14 deletions(-)
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index ba434d6..1c4b0d3 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -574,17 +574,18 @@ static void srp_disconnect_target(struct srp_target_port *target)
}
}
-static void srp_free_req_data(struct srp_target_port *target)
+static void srp_free_req_data(struct srp_target_port *target,
+ struct srp_request *req_ring)
{
struct ib_device *ibdev = target->srp_host->srp_dev->dev;
struct srp_request *req;
int i;
- if (!target->req_ring)
+ if (!req_ring)
return;
for (i = 0; i < target->req_ring_size; ++i) {
- req = &target->req_ring[i];
+ req = &req_ring[i];
kfree(req->fmr_list);
kfree(req->map_page);
if (req->indirect_dma_addr) {
@@ -595,27 +596,34 @@ static void srp_free_req_data(struct srp_target_port *target)
kfree(req->indirect_desc);
}
- kfree(target->req_ring);
- target->req_ring = NULL;
+ kfree(req_ring);
}
+/**
+ * srp_alloc_req_data() - allocate or reallocate request data
+ * @target: SRP target port.
+ *
+ * If target->req_ring was non-NULL before this function got invoked it will
+ * also be non-NULL after this function has finished.
+ */
static int srp_alloc_req_data(struct srp_target_port *target)
{
struct srp_device *srp_dev = target->srp_host->srp_dev;
struct ib_device *ibdev = srp_dev->dev;
- struct srp_request *req;
+ struct list_head free_reqs;
+ struct srp_request *req_ring, *req;
dma_addr_t dma_addr;
int i, ret = -ENOMEM;
- INIT_LIST_HEAD(&target->free_reqs);
+ INIT_LIST_HEAD(&free_reqs);
- target->req_ring = kzalloc(target->req_ring_size *
- sizeof(*target->req_ring), GFP_KERNEL);
- if (!target->req_ring)
+ req_ring = kzalloc(target->req_ring_size * sizeof(*req_ring),
+ GFP_KERNEL);
+ if (!req_ring)
goto out;
for (i = 0; i < target->req_ring_size; ++i) {
- req = &target->req_ring[i];
+ req = &req_ring[i];
req->fmr_list = kmalloc(target->cmd_sg_cnt * sizeof(void *),
GFP_KERNEL);
req->map_page = kmalloc(SRP_FMR_SIZE * sizeof(void *),
@@ -632,11 +640,16 @@ static int srp_alloc_req_data(struct srp_target_port *target)
req->indirect_dma_addr = dma_addr;
req->index = i;
- list_add_tail(&req->list, &target->free_reqs);
+ list_add_tail(&req->list, &free_reqs);
}
+ swap(target->req_ring, req_ring);
+ INIT_LIST_HEAD(&target->free_reqs);
+ list_splice(&free_reqs, &target->free_reqs);
ret = 0;
out:
+ srp_free_req_data(target, req_ring);
+
return ret;
}
@@ -669,7 +682,7 @@ static void srp_remove_target(struct srp_target_port *target)
srp_free_target_ib(target);
cancel_work_sync(&target->tl_err_work);
srp_rport_put(target->rport);
- srp_free_req_data(target);
+ srp_free_req_data(target, target->req_ring);
spin_lock(&target->srp_host->target_lock);
list_del(&target->list);
@@ -2750,7 +2763,7 @@ err_free_ib:
srp_free_target_ib(target);
err_free_mem:
- srp_free_req_data(target);
+ srp_free_req_data(target, target->req_ring);
err:
scsi_host_put(target_host);
--
1.8.4.5
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2014-05-06 12:54 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-06 12:49 [PATCH 0/9] SRP initiator patches for kernel 3.16 Bart Van Assche
[not found] ` <5368DA5B.80609-HInyCGIudOg@public.gmane.org>
2014-05-06 12:50 ` [PATCH 1/9] IB/srp: Fix kernel-doc warnings Bart Van Assche
[not found] ` <5368DAB2.2070006-HInyCGIudOg@public.gmane.org>
2014-05-07 10:35 ` Sagi Grimberg
2014-05-06 12:51 ` [PATCH 2/9] IB/srp: Introduce an additional local variable Bart Van Assche
[not found] ` <5368DADF.2070105-HInyCGIudOg@public.gmane.org>
2014-05-07 10:37 ` Sagi Grimberg
[not found] ` <536A0CF7.7080307-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2014-05-07 13:52 ` Bart Van Assche
[not found] ` <536A3AA4.5010100-HInyCGIudOg@public.gmane.org>
2014-05-07 16:58 ` Sagi Grimberg
2014-05-06 12:52 ` [PATCH 3/9] IB/srp: Introduce srp_alloc_fmr_pool() Bart Van Assche
[not found] ` <5368DB05.4070600-HInyCGIudOg@public.gmane.org>
2014-05-07 10:38 ` Sagi Grimberg
2014-05-06 12:53 ` [PATCH 4/9] IB/srp: Introduce srp_map_fmr() Bart Van Assche
[not found] ` <5368DB2F.8020506-HInyCGIudOg@public.gmane.org>
2014-05-07 10:39 ` Sagi Grimberg
2014-05-06 12:53 ` [PATCH 5/9] IB/srp: Introduce srp_finish_mapping() Bart Van Assche
[not found] ` <5368DB58.6070502-HInyCGIudOg@public.gmane.org>
2014-05-07 10:41 ` Sagi Grimberg
2014-05-06 12:54 ` Bart Van Assche [this message]
[not found] ` <5368DB90.9050209-HInyCGIudOg@public.gmane.org>
2014-05-07 10:50 ` [PATCH 6/9] IB/srp: Make srp_alloc_req_data() reallocate request data Sagi Grimberg
[not found] ` <536A0FF7.7050608-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2014-05-07 14:11 ` Bart Van Assche
[not found] ` <536A3F08.7030108-HInyCGIudOg@public.gmane.org>
2014-05-07 16:58 ` Sagi Grimberg
2014-05-06 12:55 ` [PATCH 7/9] IB/srp: Avoid triggering an infinite loop if memory mapping fails Bart Van Assche
[not found] ` <5368DBC5.6070609-HInyCGIudOg@public.gmane.org>
2014-05-07 10:50 ` Sagi Grimberg
2014-05-06 12:56 ` [PATCH 8/9] IB/srp: Rename FMR-related variables Bart Van Assche
2014-05-06 12:56 ` [PATCH 9/9] IB/srp: Add fast registration support Bart Van Assche
[not found] ` <5368DC09.70608-HInyCGIudOg@public.gmane.org>
2014-05-07 11:34 ` Sagi Grimberg
[not found] ` <536A1A3A.9090208-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2014-05-07 14:59 ` Bart Van Assche
[not found] ` <536A4A68.4080605-HInyCGIudOg@public.gmane.org>
2014-05-07 17:19 ` Sagi Grimberg
[not found] ` <536A6B2F.70807-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2014-05-08 12:38 ` Bart Van Assche
[not found] ` <536B7ABE.8080502-HInyCGIudOg@public.gmane.org>
2014-05-08 15:16 ` Sagi Grimberg
[not found] ` <536B9FB4.5040009-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2014-05-08 16:00 ` Bart Van Assche
[not found] ` <536BAA13.3050905-HInyCGIudOg@public.gmane.org>
2014-05-08 16:18 ` Sagi Grimberg
2014-05-12 13:21 ` Bart Van Assche
2014-05-06 14:06 ` [PATCH 0/9] SRP initiator patches for kernel 3.16 Jack Wang
[not found] ` <5368EC54.8020802-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2014-05-06 14:26 ` Bart Van Assche
2014-05-06 14:21 ` [PATCH 3/9] IB/srp: Introduce srp_alloc_fmr_pool() Bart Van Assche
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5368DB90.9050209@acm.org \
--to=bvanassche-hinycgiudog@public.gmane.org \
--cc=dave-i1Mk8JYDVaaSihdK6806/g@public.gmane.org \
--cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=roland-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=sagig-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
--cc=sebastian.riemer-EIkl63zCoXaH+58JC4qpiA@public.gmane.org \
--cc=vuhuong-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).