[PATCH] SLAB_PANIC cleanup
From: James Morris <hidden>
Date: 2004-08-17 06:43:38
This is a cleanup patch which adds the SLAB_PANIC to appropriate calls to
kmem_cache_create() in the networking code. This eliminiates the need for
calling code to check the return value then panic on its own.
I found a few places that did not check for an error return from
kmem_cache_create(), and these have been converted to use SLAB_PANIC.
They are:
net/ipv4/fib_hash.c: fn_hash_kmem = kmem_cache_create("ip_fib_hash"
net/bridge/br_fdb.c: br_fdb_cache = kmem_cache_create("bridge_fdb_cache"
net/decnet/dn_table.c: dn_hash_kmem = kmem_cache_create("dn_fib_info_cache"
net/socket.c: sock_inode_cachep = kmem_cache_create("sock_inode_cache"
Please review & apply if ok.
Signed-off-by: James Morris <redacted>
net/bridge/br_fdb.c | 4 ++--
net/core/flow.c | 5 +----
net/core/neighbour.c | 7 ++-----
net/core/skbuff.c | 4 +---
net/core/sock.c | 6 ++----
net/decnet/dn_route.c | 7 ++-----
net/decnet/dn_table.c | 2 +-
net/ipv4/af_inet.c | 12 ++++++------
net/ipv4/fib_hash.c | 4 ++--
net/ipv4/inetpeer.c | 5 +----
net/ipv4/ipmr.c | 5 +----
net/ipv4/route.c | 7 ++-----
net/ipv4/tcp.c | 18 ++++++------------
net/ipv6/af_inet6.c | 12 ++++++------
net/ipv6/ip6_fib.c | 4 +---
net/ipv6/route.c | 6 ++----
net/socket.c | 9 +++------
net/unix/af_unix.c | 7 ++-----
net/xfrm/xfrm_input.c | 4 +---
net/xfrm/xfrm_policy.c | 5 +----
20 files changed, 45 insertions(+), 88 deletions(-)
diff -urN -X dontdiff linux-2.6.8.1-mm1.o/net/bridge/br_fdb.c linux-2.6.8.1-mm1.w/net/bridge/br_fdb.c--- linux-2.6.8.1-mm1.o/net/bridge/br_fdb.c 2004-08-14 10:25:45.000000000 -0400
+++ linux-2.6.8.1-mm1.w/net/bridge/br_fdb.c 2004-08-17 02:41:47.939429992 -0400@@ -30,8 +30,8 @@ { br_fdb_cache = kmem_cache_create("bridge_fdb_cache", sizeof(struct net_bridge_fdb_entry), - 0, - SLAB_HWCACHE_ALIGN, NULL, NULL); + 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, + NULL, NULL); } void __exit br_fdb_fini(void)
diff -urN -X dontdiff linux-2.6.8.1-mm1.o/net/core/flow.c linux-2.6.8.1-mm1.w/net/core/flow.c
--- linux-2.6.8.1-mm1.o/net/core/flow.c 2004-06-16 01:18:55.000000000 -0400
+++ linux-2.6.8.1-mm1.w/net/core/flow.c 2004-08-17 02:37:06.516212824 -0400@@ -343,12 +343,9 @@ flow_cachep = kmem_cache_create("flow_cache", sizeof(struct flow_cache_entry), - 0, SLAB_HWCACHE_ALIGN, + 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL); - if (!flow_cachep) - panic("NET: failed to allocate flow cache slab\n"); - flow_hash_shift = 10; flow_lwm = 2 * flow_hash_size; flow_hwm = 4 * flow_hash_size;
diff -urN -X dontdiff linux-2.6.8.1-mm1.o/net/core/neighbour.c linux-2.6.8.1-mm1.w/net/core/neighbour.c
--- linux-2.6.8.1-mm1.o/net/core/neighbour.c 2004-06-16 01:18:56.000000000 -0400
+++ linux-2.6.8.1-mm1.w/net/core/neighbour.c 2004-08-17 02:57:22.888296160 -0400@@ -1165,12 +1165,9 @@ if (!tbl->kmem_cachep) tbl->kmem_cachep = kmem_cache_create(tbl->id, tbl->entry_size, - 0, SLAB_HWCACHE_ALIGN, + 0, SLAB_HWCACHE_ALIGN| + SLAB_PANIC, NULL, NULL); - - if (!tbl->kmem_cachep) - panic("cannot create neighbour cache"); - tbl->lock = RW_LOCK_UNLOCKED; init_timer(&tbl->gc_timer); tbl->gc_timer.data = (unsigned long)tbl;
diff -urN -X dontdiff linux-2.6.8.1-mm1.o/net/core/skbuff.c linux-2.6.8.1-mm1.w/net/core/skbuff.c
--- linux-2.6.8.1-mm1.o/net/core/skbuff.c 2004-08-14 10:25:45.000000000 -0400
+++ linux-2.6.8.1-mm1.w/net/core/skbuff.c 2004-08-17 02:38:35.910622808 -0400@@ -1430,10 +1430,8 @@ skbuff_head_cache = kmem_cache_create("skbuff_head_cache", sizeof(struct sk_buff), 0, - SLAB_HWCACHE_ALIGN, + SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL); - if (!skbuff_head_cache) - panic("cannot create skbuff cache"); } EXPORT_SYMBOL(___pskb_trim);
diff -urN -X dontdiff linux-2.6.8.1-mm1.o/net/core/sock.c linux-2.6.8.1-mm1.w/net/core/sock.c
--- linux-2.6.8.1-mm1.o/net/core/sock.c 2004-08-14 10:25:45.000000000 -0400
+++ linux-2.6.8.1-mm1.w/net/core/sock.c 2004-08-17 02:51:36.197001248 -0400@@ -660,10 +660,8 @@ void __init sk_init(void) { sk_cachep = kmem_cache_create("sock", sizeof(struct sock), 0, - SLAB_HWCACHE_ALIGN, NULL, NULL); - if (!sk_cachep) - printk(KERN_CRIT "sk_init: Cannot create sock SLAB cache!"); - + SLAB_HWCACHE_ALIGN|SLAB_PANIC, + NULL, NULL); if (num_physpages <= 4096) { sysctl_wmem_max = 32767; sysctl_rmem_max = 32767;
diff -urN -X dontdiff linux-2.6.8.1-mm1.o/net/decnet/dn_route.c linux-2.6.8.1-mm1.w/net/decnet/dn_route.c
--- linux-2.6.8.1-mm1.o/net/decnet/dn_route.c 2004-08-16 19:23:09.000000000 -0400
+++ linux-2.6.8.1-mm1.w/net/decnet/dn_route.c 2004-08-17 02:49:12.544839696 -0400@@ -1788,12 +1788,9 @@ dn_dst_ops.kmem_cachep = kmem_cache_create("dn_dst_cache", sizeof(struct dn_route), - 0, SLAB_HWCACHE_ALIGN, + 0, + SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL); - - if (!dn_dst_ops.kmem_cachep) - panic("DECnet: Failed to allocate dn_dst_cache\n"); - init_timer(&dn_route_timer); dn_route_timer.function = dn_dst_check_expire; dn_route_timer.expires = jiffies + decnet_dst_gc_interval * HZ;
diff -urN -X dontdiff linux-2.6.8.1-mm1.o/net/decnet/dn_table.c linux-2.6.8.1-mm1.w/net/decnet/dn_table.c
--- linux-2.6.8.1-mm1.o/net/decnet/dn_table.c 2004-06-16 01:19:02.000000000 -0400
+++ linux-2.6.8.1-mm1.w/net/decnet/dn_table.c 2004-08-17 02:48:00.593777920 -0400@@ -810,7 +810,7 @@ { dn_hash_kmem = kmem_cache_create("dn_fib_info_cache", sizeof(struct dn_fib_info), - 0, SLAB_HWCACHE_ALIGN, + 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL); }
diff -urN -X dontdiff linux-2.6.8.1-mm1.o/net/ipv4/af_inet.c linux-2.6.8.1-mm1.w/net/ipv4/af_inet.c
--- linux-2.6.8.1-mm1.o/net/ipv4/af_inet.c 2004-08-14 10:25:45.000000000 -0400
+++ linux-2.6.8.1-mm1.w/net/ipv4/af_inet.c 2004-08-17 02:30:55.632595704 -0400@@ -1018,16 +1018,16 @@ tcp_sk_cachep = kmem_cache_create("tcp_sock", sizeof(struct tcp_sock), 0, - SLAB_HWCACHE_ALIGN, NULL, NULL); + SLAB_HWCACHE_ALIGN|SLAB_PANIC, + NULL, NULL); udp_sk_cachep = kmem_cache_create("udp_sock", sizeof(struct udp_sock), 0, - SLAB_HWCACHE_ALIGN, NULL, NULL); + SLAB_HWCACHE_ALIGN|SLAB_PANIC, + NULL, NULL); raw4_sk_cachep = kmem_cache_create("raw4_sock", sizeof(struct raw_sock), 0, - SLAB_HWCACHE_ALIGN, NULL, NULL); - if (!tcp_sk_cachep || !udp_sk_cachep || !raw4_sk_cachep) - printk(KERN_CRIT - "inet_init: Can't create protocol sock SLAB caches!\n"); + SLAB_HWCACHE_ALIGN|SLAB_PANIC, + NULL, NULL); /* * Tell SOCKET that we are alive... */
diff -urN -X dontdiff linux-2.6.8.1-mm1.o/net/ipv4/fib_hash.c linux-2.6.8.1-mm1.w/net/ipv4/fib_hash.c
--- linux-2.6.8.1-mm1.o/net/ipv4/fib_hash.c 2004-06-16 01:19:23.000000000 -0400
+++ linux-2.6.8.1-mm1.w/net/ipv4/fib_hash.c 2004-08-17 02:34:57.717793160 -0400@@ -873,8 +873,8 @@ if (fn_hash_kmem == NULL) fn_hash_kmem = kmem_cache_create("ip_fib_hash", - sizeof(struct fib_node), - 0, SLAB_HWCACHE_ALIGN, + sizeof(struct fib_node), 0, + SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL); tb = kmalloc(sizeof(struct fib_table) + sizeof(struct fn_hash), GFP_KERNEL);
diff -urN -X dontdiff linux-2.6.8.1-mm1.o/net/ipv4/inetpeer.c linux-2.6.8.1-mm1.w/net/ipv4/inetpeer.c
--- linux-2.6.8.1-mm1.o/net/ipv4/inetpeer.c 2004-06-16 01:20:03.000000000 -0400
+++ linux-2.6.8.1-mm1.w/net/ipv4/inetpeer.c 2004-08-17 02:35:53.926248176 -0400@@ -126,12 +126,9 @@ peer_cachep = kmem_cache_create("inet_peer_cache", sizeof(struct inet_peer), - 0, SLAB_HWCACHE_ALIGN, + 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL); - if (!peer_cachep) - panic("cannot create inet_peer_cache"); - /* All the timers, started at system startup tend to synchronize. Perturb it a bit. */
diff -urN -X dontdiff linux-2.6.8.1-mm1.o/net/ipv4/ipmr.c linux-2.6.8.1-mm1.w/net/ipv4/ipmr.c
--- linux-2.6.8.1-mm1.o/net/ipv4/ipmr.c 2004-08-14 10:25:45.000000000 -0400
+++ linux-2.6.8.1-mm1.w/net/ipv4/ipmr.c 2004-08-17 02:33:16.673154280 -0400@@ -1885,11 +1885,8 @@ { mrt_cachep = kmem_cache_create("ip_mrt_cache", sizeof(struct mfc_cache), - 0, SLAB_HWCACHE_ALIGN, + 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL); - if (!mrt_cachep) - panic("cannot allocate ip_mrt_cache"); - init_timer(&ipmr_expire_timer); ipmr_expire_timer.function=ipmr_expire_process; register_netdevice_notifier(&ip_mr_notifier);
diff -urN -X dontdiff linux-2.6.8.1-mm1.o/net/ipv4/route.c linux-2.6.8.1-mm1.w/net/ipv4/route.c
--- linux-2.6.8.1-mm1.o/net/ipv4/route.c 2004-08-16 19:23:09.000000000 -0400
+++ linux-2.6.8.1-mm1.w/net/ipv4/route.c 2004-08-17 02:36:33.417244632 -0400@@ -2760,13 +2760,10 @@ #endif ipv4_dst_ops.kmem_cachep = kmem_cache_create("ip_dst_cache", - sizeof(struct rtable), - 0, SLAB_HWCACHE_ALIGN, + sizeof(struct rtable), 0, + SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL); - if (!ipv4_dst_ops.kmem_cachep) - panic("IP: failed to allocate ip_dst_cache\n"); - goal = num_physpages >> (26 - PAGE_SHIFT); if (rhash_entries) goal = (rhash_entries * sizeof(struct rt_hash_bucket)) >> PAGE_SHIFT;
diff -urN -X dontdiff linux-2.6.8.1-mm1.o/net/ipv4/tcp.c linux-2.6.8.1-mm1.w/net/ipv4/tcp.c
--- linux-2.6.8.1-mm1.o/net/ipv4/tcp.c 2004-08-14 10:25:45.000000000 -0400
+++ linux-2.6.8.1-mm1.w/net/ipv4/tcp.c 2004-08-17 02:32:26.816733608 -0400@@ -2211,25 +2211,19 @@ sizeof(skb->cb)); tcp_openreq_cachep = kmem_cache_create("tcp_open_request", - sizeof(struct open_request), - 0, SLAB_HWCACHE_ALIGN, + sizeof(struct open_request), 0, + SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL); - if (!tcp_openreq_cachep) - panic("tcp_init: Cannot alloc open_request cache."); tcp_bucket_cachep = kmem_cache_create("tcp_bind_bucket", - sizeof(struct tcp_bind_bucket), - 0, SLAB_HWCACHE_ALIGN, + sizeof(struct tcp_bind_bucket), 0, + SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL); - if (!tcp_bucket_cachep) - panic("tcp_init: Cannot alloc tcp_bind_bucket cache."); tcp_timewait_cachep = kmem_cache_create("tcp_tw_bucket", - sizeof(struct tcp_tw_bucket), - 0, SLAB_HWCACHE_ALIGN, + sizeof(struct tcp_tw_bucket), 0, + SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL); - if (!tcp_timewait_cachep) - panic("tcp_init: Cannot alloc tcp_tw_bucket cache."); /* Size and allocate the main established and bind bucket * hash tables.
diff -urN -X dontdiff linux-2.6.8.1-mm1.o/net/ipv6/af_inet6.c linux-2.6.8.1-mm1.w/net/ipv6/af_inet6.c
--- linux-2.6.8.1-mm1.o/net/ipv6/af_inet6.c 2004-08-14 10:25:45.000000000 -0400
+++ linux-2.6.8.1-mm1.w/net/ipv6/af_inet6.c 2004-08-17 02:43:32.244573200 -0400@@ -717,16 +717,16 @@ /* allocate our sock slab caches */ tcp6_sk_cachep = kmem_cache_create("tcp6_sock", sizeof(struct tcp6_sock), 0, - SLAB_HWCACHE_ALIGN, NULL, NULL); + SLAB_HWCACHE_ALIGN|SLAB_PANIC, + NULL, NULL); udp6_sk_cachep = kmem_cache_create("udp6_sock", sizeof(struct udp6_sock), 0, - SLAB_HWCACHE_ALIGN, NULL, NULL); + SLAB_HWCACHE_ALIGN|SLAB_PANIC, + NULL, NULL); raw6_sk_cachep = kmem_cache_create("raw6_sock", sizeof(struct raw6_sock), 0, - SLAB_HWCACHE_ALIGN, NULL, NULL); - if (!tcp6_sk_cachep || !udp6_sk_cachep || !raw6_sk_cachep) - printk(KERN_CRIT "%s: Can't create protocol sock SLAB " - "caches!\n", __FUNCTION__); + SLAB_HWCACHE_ALIGN|SLAB_PANIC, + NULL, NULL); /* Register the socket-side information for inet6_create. */ for(r = &inetsw6[0]; r < &inetsw6[SOCK_MAX]; ++r)
diff -urN -X dontdiff linux-2.6.8.1-mm1.o/net/ipv6/ip6_fib.c linux-2.6.8.1-mm1.w/net/ipv6/ip6_fib.c
--- linux-2.6.8.1-mm1.o/net/ipv6/ip6_fib.c 2004-08-14 10:25:45.000000000 -0400
+++ linux-2.6.8.1-mm1.w/net/ipv6/ip6_fib.c 2004-08-17 02:44:59.806261800 -0400@@ -1237,10 +1237,8 @@ { fib6_node_kmem = kmem_cache_create("fib6_nodes", sizeof(struct fib6_node), - 0, SLAB_HWCACHE_ALIGN, + 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL); - if (!fib6_node_kmem) - panic("cannot create fib6_nodes cache"); } void __exit fib6_gc_cleanup(void)
diff -urN -X dontdiff linux-2.6.8.1-mm1.o/net/ipv6/route.c linux-2.6.8.1-mm1.w/net/ipv6/route.c
--- linux-2.6.8.1-mm1.o/net/ipv6/route.c 2004-08-14 10:25:45.000000000 -0400
+++ linux-2.6.8.1-mm1.w/net/ipv6/route.c 2004-08-17 02:44:31.302595016 -0400@@ -2026,11 +2026,9 @@ ip6_dst_ops.kmem_cachep = kmem_cache_create("ip6_dst_cache", sizeof(struct rt6_info), - 0, SLAB_HWCACHE_ALIGN, + 0, SLAB_HWCACHE_ALIGN| + SLAB_PANIC, NULL, NULL); - if (!ip6_dst_ops.kmem_cachep) - panic("cannot create ip6_dst_cache"); - fib6_init(); #ifdef CONFIG_PROC_FS p = proc_net_create("ipv6_route", 0, rt6_proc_info);
diff -urN -X dontdiff linux-2.6.8.1-mm1.o/net/socket.c linux-2.6.8.1-mm1.w/net/socket.c
--- linux-2.6.8.1-mm1.o/net/socket.c 2004-08-14 10:25:45.000000000 -0400
+++ linux-2.6.8.1-mm1.w/net/socket.c 2004-08-17 02:50:50.653924848 -0400@@ -307,15 +307,12 @@ inode_init_once(&ei->vfs_inode); } -static int init_inodecache(void) +static void init_inodecache(void) { sock_inode_cachep = kmem_cache_create("sock_inode_cache", sizeof(struct socket_alloc), - 0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT, - init_once, NULL); - if (sock_inode_cachep == NULL) - return -ENOMEM; - return 0; + 0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT| + SLAB_PANIC, init_once, NULL); } static struct super_operations sockfs_ops = {
diff -urN -X dontdiff linux-2.6.8.1-mm1.o/net/unix/af_unix.c linux-2.6.8.1-mm1.w/net/unix/af_unix.c
--- linux-2.6.8.1-mm1.o/net/unix/af_unix.c 2004-08-14 10:25:45.000000000 -0400
+++ linux-2.6.8.1-mm1.w/net/unix/af_unix.c 2004-08-17 02:47:27.418821280 -0400@@ -2034,11 +2034,8 @@ /* allocate our sock slab cache */ unix_sk_cachep = kmem_cache_create("unix_sock", sizeof(struct unix_sock), 0, - SLAB_HWCACHE_ALIGN, NULL, NULL); - if (!unix_sk_cachep) - printk(KERN_CRIT - "af_unix_init: Cannot create unix_sock SLAB cache!\n"); - + SLAB_HWCACHE_ALIGN|SLAB_PANIC, + NULL, NULL); sock_register(&unix_family_ops); #ifdef CONFIG_PROC_FS proc_net_fops_create("unix", 0, &unix_seq_fops);
diff -urN -X dontdiff linux-2.6.8.1-mm1.o/net/xfrm/xfrm_input.c linux-2.6.8.1-mm1.w/net/xfrm/xfrm_input.c
--- linux-2.6.8.1-mm1.o/net/xfrm/xfrm_input.c 2004-06-16 01:18:54.000000000 -0400
+++ linux-2.6.8.1-mm1.w/net/xfrm/xfrm_input.c 2004-08-17 02:46:00.745997552 -0400@@ -78,8 +78,6 @@ { secpath_cachep = kmem_cache_create("secpath_cache", sizeof(struct sec_path), - 0, SLAB_HWCACHE_ALIGN, + 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL); - if (!secpath_cachep) - panic("XFRM: failed to allocate secpath_cache\n"); }
diff -urN -X dontdiff linux-2.6.8.1-mm1.o/net/xfrm/xfrm_policy.c linux-2.6.8.1-mm1.w/net/xfrm/xfrm_policy.c
--- linux-2.6.8.1-mm1.o/net/xfrm/xfrm_policy.c 2004-08-14 10:25:45.000000000 -0400
+++ linux-2.6.8.1-mm1.w/net/xfrm/xfrm_policy.c 2004-08-17 02:46:32.691141152 -0400@@ -1230,11 +1230,8 @@ { xfrm_dst_cache = kmem_cache_create("xfrm_dst_cache", sizeof(struct xfrm_dst), - 0, SLAB_HWCACHE_ALIGN, + 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL); - if (!xfrm_dst_cache) - panic("XFRM: failed to allocate xfrm_dst_cache\n"); - INIT_WORK(&xfrm_policy_gc_work, xfrm_policy_gc_task, NULL); register_netdevice_notifier(&xfrm_dev_notifier); }