aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c')
-rw-r--r--drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c84
1 files changed, 36 insertions, 48 deletions
diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
index 986c2a40d978..ff292216290d 100644
--- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
+++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
@@ -66,7 +66,7 @@ ksocknal_create_route(__u32 ipaddr, int port)
{
struct ksock_route *route;
- LIBCFS_ALLOC(route, sizeof(*route));
+ route = kzalloc(sizeof(*route), GFP_NOFS);
if (!route)
return NULL;
@@ -93,7 +93,7 @@ ksocknal_destroy_route(struct ksock_route *route)
if (route->ksnr_peer)
ksocknal_peer_decref(route->ksnr_peer);
- LIBCFS_FREE(route, sizeof(*route));
+ kfree(route);
}
static int
@@ -108,7 +108,7 @@ ksocknal_create_peer(struct ksock_peer **peerp, struct lnet_ni *ni,
LASSERT(id.pid != LNET_PID_ANY);
LASSERT(!in_interrupt());
- LIBCFS_CPT_ALLOC(peer, lnet_cpt_table(), cpt, sizeof(*peer));
+ peer = kzalloc_cpt(sizeof(*peer), GFP_NOFS, cpt);
if (!peer)
return -ENOMEM;
@@ -132,7 +132,7 @@ ksocknal_create_peer(struct ksock_peer **peerp, struct lnet_ni *ni,
if (net->ksnn_shutdown) {
spin_unlock_bh(&net->ksnn_lock);
- LIBCFS_FREE(peer, sizeof(*peer));
+ kfree(peer);
CERROR("Can't create peer: network shutdown\n");
return -ESHUTDOWN;
}
@@ -160,7 +160,7 @@ ksocknal_destroy_peer(struct ksock_peer *peer)
LASSERT(list_empty(&peer->ksnp_tx_queue));
LASSERT(list_empty(&peer->ksnp_zc_req_list));
- LIBCFS_FREE(peer, sizeof(*peer));
+ kfree(peer);
/*
* NB a peer's connections and routes keep a reference on their peer
@@ -487,21 +487,18 @@ ksocknal_add_peer(struct lnet_ni *ni, struct lnet_process_id id, __u32 ipaddr,
ksocknal_nid2peerlist(id.nid));
}
- route2 = NULL;
list_for_each_entry(route2, &peer->ksnp_routes, ksnr_list) {
- if (route2->ksnr_ipaddr == ipaddr)
- break;
-
- route2 = NULL;
- }
- if (!route2) {
- ksocknal_add_route_locked(peer, route);
- route->ksnr_share_count++;
- } else {
- ksocknal_route_decref(route);
- route2->ksnr_share_count++;
+ if (route2->ksnr_ipaddr == ipaddr) {
+ /* Route already exists, use the old one */
+ ksocknal_route_decref(route);
+ route2->ksnr_share_count++;
+ goto out;
+ }
}
-
+ /* Route doesn't already exist, add the new one */
+ ksocknal_add_route_locked(peer, route);
+ route->ksnr_share_count++;
+out:
write_unlock_bh(&ksocknal_data.ksnd_global_lock);
return 0;
@@ -988,7 +985,7 @@ ksocknal_accept(struct lnet_ni *ni, struct socket *sock)
rc = lnet_sock_getaddr(sock, 1, &peer_ip, &peer_port);
LASSERT(!rc); /* we succeeded before */
- LIBCFS_ALLOC(cr, sizeof(*cr));
+ cr = kzalloc(sizeof(*cr), GFP_NOFS);
if (!cr) {
LCONSOLE_ERROR_MSG(0x12f, "Dropping connection request from %pI4h: memory exhausted\n",
&peer_ip);
@@ -1046,7 +1043,7 @@ ksocknal_create_conn(struct lnet_ni *ni, struct ksock_route *route,
LASSERT(active == (type != SOCKLND_CONN_NONE));
- LIBCFS_ALLOC(conn, sizeof(*conn));
+ conn = kzalloc(sizeof(*conn), GFP_NOFS);
if (!conn) {
rc = -ENOMEM;
goto failed_0;
@@ -1073,8 +1070,9 @@ ksocknal_create_conn(struct lnet_ni *ni, struct ksock_route *route,
conn->ksnc_tx_carrier = NULL;
atomic_set(&conn->ksnc_tx_nob, 0);
- LIBCFS_ALLOC(hello, offsetof(struct ksock_hello_msg,
- kshm_ips[LNET_MAX_INTERFACES]));
+ hello = kvzalloc(offsetof(struct ksock_hello_msg,
+ kshm_ips[LNET_MAX_INTERFACES]),
+ GFP_KERNEL);
if (!hello) {
rc = -ENOMEM;
goto failed_1;
@@ -1337,8 +1335,7 @@ ksocknal_create_conn(struct lnet_ni *ni, struct ksock_route *route,
rc = ksocknal_send_hello(ni, conn, peerid.nid, hello);
}
- LIBCFS_FREE(hello, offsetof(struct ksock_hello_msg,
- kshm_ips[LNET_MAX_INTERFACES]));
+ kvfree(hello);
/*
* setup the socket AFTER I've received hello (it disables
@@ -1418,11 +1415,9 @@ ksocknal_create_conn(struct lnet_ni *ni, struct ksock_route *route,
ksocknal_peer_decref(peer);
failed_1:
- if (hello)
- LIBCFS_FREE(hello, offsetof(struct ksock_hello_msg,
- kshm_ips[LNET_MAX_INTERFACES]));
+ kvfree(hello);
- LIBCFS_FREE(conn, sizeof(*conn));
+ kfree(conn);
failed_0:
sock_release(sock);
@@ -1719,7 +1714,7 @@ ksocknal_destroy_conn(struct ksock_conn *conn)
ksocknal_peer_decref(conn->ksnc_peer);
- LIBCFS_FREE(conn, sizeof(*conn));
+ kfree(conn);
}
int
@@ -2262,19 +2257,12 @@ ksocknal_free_buffers(void)
struct ksock_sched_info *info;
int i;
- cfs_percpt_for_each(info, i, ksocknal_data.ksnd_sched_info) {
- if (info->ksi_scheds) {
- LIBCFS_FREE(info->ksi_scheds,
- info->ksi_nthreads_max *
- sizeof(info->ksi_scheds[0]));
- }
- }
+ cfs_percpt_for_each(info, i, ksocknal_data.ksnd_sched_info)
+ kfree(info->ksi_scheds);
cfs_percpt_free(ksocknal_data.ksnd_sched_info);
}
- LIBCFS_FREE(ksocknal_data.ksnd_peers,
- sizeof(struct list_head) *
- ksocknal_data.ksnd_peer_hash_size);
+ kvfree(ksocknal_data.ksnd_peers);
spin_lock(&ksocknal_data.ksnd_tx_lock);
@@ -2289,7 +2277,7 @@ ksocknal_free_buffers(void)
list_for_each_entry_safe(tx, temp, &zlist, tx_list) {
list_del(&tx->tx_list);
- LIBCFS_FREE(tx, tx->tx_desc_size);
+ kfree(tx);
}
} else {
spin_unlock(&ksocknal_data.ksnd_tx_lock);
@@ -2404,9 +2392,9 @@ ksocknal_base_startup(void)
memset(&ksocknal_data, 0, sizeof(ksocknal_data)); /* zero pointers */
ksocknal_data.ksnd_peer_hash_size = SOCKNAL_PEER_HASH_SIZE;
- LIBCFS_ALLOC(ksocknal_data.ksnd_peers,
- sizeof(struct list_head) *
- ksocknal_data.ksnd_peer_hash_size);
+ ksocknal_data.ksnd_peers = kvmalloc_array(ksocknal_data.ksnd_peer_hash_size,
+ sizeof(struct list_head),
+ GFP_KERNEL);
if (!ksocknal_data.ksnd_peers)
return -ENOMEM;
@@ -2459,8 +2447,8 @@ ksocknal_base_startup(void)
info->ksi_nthreads_max = nthrs;
info->ksi_cpt = i;
- LIBCFS_CPT_ALLOC(info->ksi_scheds, lnet_cpt_table(), i,
- info->ksi_nthreads_max * sizeof(*sched));
+ info->ksi_scheds = kzalloc_cpt(info->ksi_nthreads_max * sizeof(*sched),
+ GFP_NOFS, i);
if (!info->ksi_scheds)
goto failed;
@@ -2625,7 +2613,7 @@ ksocknal_shutdown(struct lnet_ni *ni)
}
list_del(&net->ksnn_list);
- LIBCFS_FREE(net, sizeof(*net));
+ kfree(net);
ksocknal_data.ksnd_nnets--;
if (!ksocknal_data.ksnd_nnets)
@@ -2818,7 +2806,7 @@ ksocknal_startup(struct lnet_ni *ni)
return rc;
}
- LIBCFS_ALLOC(net, sizeof(*net));
+ net = kzalloc(sizeof(*net), GFP_NOFS);
if (!net)
goto fail_0;
@@ -2880,7 +2868,7 @@ ksocknal_startup(struct lnet_ni *ni)
return 0;
fail_1:
- LIBCFS_FREE(net, sizeof(*net));
+ kfree(net);
fail_0:
if (!ksocknal_data.ksnd_nnets)
ksocknal_base_shutdown();