@@ -36,7 +36,7 @@ struct homa_rpc *homa_rpc_alloc_client(struct homa_sock *hsk,
3636 struct homa_rpc * crpc ;
3737 int err ;
3838
39- crpc = kzalloc ( sizeof ( * crpc ) , GFP_KERNEL );
39+ crpc = kmem_cache_zalloc ( hsk -> homa -> rpc_kmem_cache , GFP_KERNEL );
4040 if (unlikely (!crpc )) {
4141 hsk -> error_msg = "couldn't allocate memory for client RPC" ;
4242 return ERR_PTR (- ENOMEM );
@@ -95,7 +95,7 @@ struct homa_rpc *homa_rpc_alloc_client(struct homa_sock *hsk,
9595error :
9696 if (crpc -> peer )
9797 homa_peer_release (crpc -> peer );
98- kfree ( crpc );
98+ kmem_cache_free ( hsk -> homa -> rpc_kmem_cache , crpc );
9999 return ERR_PTR (err );
100100}
101101
@@ -146,7 +146,7 @@ struct homa_rpc *homa_rpc_alloc_server(struct homa_sock *hsk,
146146 }
147147
148148 /* Initialize fields that don't require the socket lock. */
149- srpc = kzalloc ( sizeof ( * srpc ) , GFP_ATOMIC );
149+ srpc = kmem_cache_zalloc ( hsk -> homa -> rpc_kmem_cache , GFP_ATOMIC );
150150 if (!srpc ) {
151151 err = - ENOMEM ;
152152 goto error ;
@@ -209,9 +209,11 @@ struct homa_rpc *homa_rpc_alloc_server(struct homa_sock *hsk,
209209
210210error :
211211 homa_bucket_unlock (bucket , id );
212- if (srpc && srpc -> peer )
213- homa_peer_release (srpc -> peer );
214- kfree (srpc );
212+ if (srpc ) {
213+ if (srpc -> peer )
214+ homa_peer_release (srpc -> peer );
215+ kmem_cache_free (hsk -> homa -> rpc_kmem_cache , srpc );
216+ }
215217 return ERR_PTR (err );
216218}
217219
@@ -652,7 +654,7 @@ int homa_rpc_reap(struct homa_sock *hsk, bool reap_all)
652654#endif /* See strip.py */
653655 rpc -> state = 0 ;
654656 rpc -> magic = 0 ;
655- kfree ( rpc );
657+ kmem_cache_free ( hsk -> homa -> rpc_kmem_cache , rpc );
656658 }
657659 homa_sock_wakeup_wmem (hsk );
658660 tt_record4 ("reaped %d skbs, %d rpcs; %d skbs remain for port %d" ,
0 commit comments