diff options
Diffstat (limited to 'net/rds')
-rw-r--r-- | net/rds/ib.h | 3 | ||||
-rw-r--r-- | net/rds/ib_cm.c | 2 | ||||
-rw-r--r-- | net/rds/ib_recv.c | 22 |
3 files changed, 10 insertions, 17 deletions
diff --git a/net/rds/ib.h b/net/rds/ib.h index 202140a84f0c..4c2ee2401979 100644 --- a/net/rds/ib.h +++ b/net/rds/ib.h | |||
@@ -297,8 +297,7 @@ void rds_ib_flush_mrs(void); | |||
297 | int __init rds_ib_recv_init(void); | 297 | int __init rds_ib_recv_init(void); |
298 | void rds_ib_recv_exit(void); | 298 | void rds_ib_recv_exit(void); |
299 | int rds_ib_recv(struct rds_connection *conn); | 299 | int rds_ib_recv(struct rds_connection *conn); |
300 | int rds_ib_recv_refill(struct rds_connection *conn, gfp_t kptr_gfp, | 300 | int rds_ib_recv_refill(struct rds_connection *conn, int prefill); |
301 | gfp_t page_gfp, int prefill); | ||
302 | void rds_ib_inc_free(struct rds_incoming *inc); | 301 | void rds_ib_inc_free(struct rds_incoming *inc); |
303 | int rds_ib_inc_copy_to_user(struct rds_incoming *inc, struct iovec *iov, | 302 | int rds_ib_inc_copy_to_user(struct rds_incoming *inc, struct iovec *iov, |
304 | size_t size); | 303 | size_t size); |
diff --git a/net/rds/ib_cm.c b/net/rds/ib_cm.c index 1a91af75f4c7..75eda9c82135 100644 --- a/net/rds/ib_cm.c +++ b/net/rds/ib_cm.c | |||
@@ -135,7 +135,7 @@ void rds_ib_cm_connect_complete(struct rds_connection *conn, struct rdma_cm_even | |||
135 | rds_ib_recv_init_ring(ic); | 135 | rds_ib_recv_init_ring(ic); |
136 | /* Post receive buffers - as a side effect, this will update | 136 | /* Post receive buffers - as a side effect, this will update |
137 | * the posted credit count. */ | 137 | * the posted credit count. */ |
138 | rds_ib_recv_refill(conn, GFP_KERNEL, GFP_HIGHUSER, 1); | 138 | rds_ib_recv_refill(conn, 1); |
139 | 139 | ||
140 | /* Tune RNR behavior */ | 140 | /* Tune RNR behavior */ |
141 | rds_ib_tune_rnr(ic, &qp_attr); | 141 | rds_ib_tune_rnr(ic, &qp_attr); |
diff --git a/net/rds/ib_recv.c b/net/rds/ib_recv.c index e9fe08a86c40..8f041f7954a2 100644 --- a/net/rds/ib_recv.c +++ b/net/rds/ib_recv.c | |||
@@ -135,8 +135,7 @@ void rds_ib_recv_clear_ring(struct rds_ib_connection *ic) | |||
135 | } | 135 | } |
136 | 136 | ||
137 | static int rds_ib_recv_refill_one(struct rds_connection *conn, | 137 | static int rds_ib_recv_refill_one(struct rds_connection *conn, |
138 | struct rds_ib_recv_work *recv, | 138 | struct rds_ib_recv_work *recv) |
139 | gfp_t kptr_gfp, gfp_t page_gfp) | ||
140 | { | 139 | { |
141 | struct rds_ib_connection *ic = conn->c_transport_data; | 140 | struct rds_ib_connection *ic = conn->c_transport_data; |
142 | dma_addr_t dma_addr; | 141 | dma_addr_t dma_addr; |
@@ -148,8 +147,7 @@ static int rds_ib_recv_refill_one(struct rds_connection *conn, | |||
148 | rds_ib_stats_inc(s_ib_rx_alloc_limit); | 147 | rds_ib_stats_inc(s_ib_rx_alloc_limit); |
149 | goto out; | 148 | goto out; |
150 | } | 149 | } |
151 | recv->r_ibinc = kmem_cache_alloc(rds_ib_incoming_slab, | 150 | recv->r_ibinc = kmem_cache_alloc(rds_ib_incoming_slab, GFP_NOWAIT); |
152 | kptr_gfp); | ||
153 | if (!recv->r_ibinc) { | 151 | if (!recv->r_ibinc) { |
154 | atomic_dec(&rds_ib_allocation); | 152 | atomic_dec(&rds_ib_allocation); |
155 | goto out; | 153 | goto out; |
@@ -159,7 +157,7 @@ static int rds_ib_recv_refill_one(struct rds_connection *conn, | |||
159 | } | 157 | } |
160 | 158 | ||
161 | if (!recv->r_frag) { | 159 | if (!recv->r_frag) { |
162 | recv->r_frag = kmem_cache_alloc(rds_ib_frag_slab, kptr_gfp); | 160 | recv->r_frag = kmem_cache_alloc(rds_ib_frag_slab, GFP_NOWAIT); |
163 | if (!recv->r_frag) | 161 | if (!recv->r_frag) |
164 | goto out; | 162 | goto out; |
165 | INIT_LIST_HEAD(&recv->r_frag->f_item); | 163 | INIT_LIST_HEAD(&recv->r_frag->f_item); |
@@ -167,7 +165,7 @@ static int rds_ib_recv_refill_one(struct rds_connection *conn, | |||
167 | } | 165 | } |
168 | 166 | ||
169 | if (!ic->i_frag.f_page) { | 167 | if (!ic->i_frag.f_page) { |
170 | ic->i_frag.f_page = alloc_page(page_gfp); | 168 | ic->i_frag.f_page = alloc_page(GFP_NOWAIT); |
171 | if (!ic->i_frag.f_page) | 169 | if (!ic->i_frag.f_page) |
172 | goto out; | 170 | goto out; |
173 | ic->i_frag.f_offset = 0; | 171 | ic->i_frag.f_offset = 0; |
@@ -221,8 +219,7 @@ out: | |||
221 | * | 219 | * |
222 | * -1 is returned if posting fails due to temporary resource exhaustion. | 220 | * -1 is returned if posting fails due to temporary resource exhaustion. |
223 | */ | 221 | */ |
224 | int rds_ib_recv_refill(struct rds_connection *conn, gfp_t kptr_gfp, | 222 | int rds_ib_recv_refill(struct rds_connection *conn, int prefill) |
225 | gfp_t page_gfp, int prefill) | ||
226 | { | 223 | { |
227 | struct rds_ib_connection *ic = conn->c_transport_data; | 224 | struct rds_ib_connection *ic = conn->c_transport_data; |
228 | struct rds_ib_recv_work *recv; | 225 | struct rds_ib_recv_work *recv; |
@@ -241,7 +238,7 @@ int rds_ib_recv_refill(struct rds_connection *conn, gfp_t kptr_gfp, | |||
241 | } | 238 | } |
242 | 239 | ||
243 | recv = &ic->i_recvs[pos]; | 240 | recv = &ic->i_recvs[pos]; |
244 | ret = rds_ib_recv_refill_one(conn, recv, kptr_gfp, page_gfp); | 241 | ret = rds_ib_recv_refill_one(conn, recv); |
245 | if (ret) { | 242 | if (ret) { |
246 | ret = -1; | 243 | ret = -1; |
247 | break; | 244 | break; |
@@ -856,11 +853,8 @@ void rds_ib_recv_tasklet_fn(unsigned long data) | |||
856 | if (rds_ib_ring_empty(&ic->i_recv_ring)) | 853 | if (rds_ib_ring_empty(&ic->i_recv_ring)) |
857 | rds_ib_stats_inc(s_ib_rx_ring_empty); | 854 | rds_ib_stats_inc(s_ib_rx_ring_empty); |
858 | 855 | ||
859 | /* | ||
860 | * If the ring is running low, then schedule the thread to refill. | ||
861 | */ | ||
862 | if (rds_ib_ring_low(&ic->i_recv_ring)) | 856 | if (rds_ib_ring_low(&ic->i_recv_ring)) |
863 | queue_delayed_work(rds_wq, &conn->c_recv_w, 0); | 857 | rds_ib_recv_refill(conn, 0); |
864 | } | 858 | } |
865 | 859 | ||
866 | int rds_ib_recv(struct rds_connection *conn) | 860 | int rds_ib_recv(struct rds_connection *conn) |
@@ -875,7 +869,7 @@ int rds_ib_recv(struct rds_connection *conn) | |||
875 | * we're really low and we want the caller to back off for a bit. | 869 | * we're really low and we want the caller to back off for a bit. |
876 | */ | 870 | */ |
877 | mutex_lock(&ic->i_recv_mutex); | 871 | mutex_lock(&ic->i_recv_mutex); |
878 | if (rds_ib_recv_refill(conn, GFP_KERNEL, GFP_HIGHUSER, 0)) | 872 | if (rds_ib_recv_refill(conn, 0)) |
879 | ret = -ENOMEM; | 873 | ret = -ENOMEM; |
880 | else | 874 | else |
881 | rds_ib_stats_inc(s_ib_rx_refill_from_thread); | 875 | rds_ib_stats_inc(s_ib_rx_refill_from_thread); |