diff options
Diffstat (limited to 'net/dccp/ccid.c')
| -rw-r--r-- | net/dccp/ccid.c | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/net/dccp/ccid.c b/net/dccp/ccid.c index f3e9ba1cfd01..57dfb9c8c4f2 100644 --- a/net/dccp/ccid.c +++ b/net/dccp/ccid.c | |||
| @@ -77,34 +77,24 @@ int ccid_getsockopt_builtin_ccids(struct sock *sk, int len, | |||
| 77 | return err; | 77 | return err; |
| 78 | } | 78 | } |
| 79 | 79 | ||
| 80 | static struct kmem_cache *ccid_kmem_cache_create(int obj_size, const char *fmt,...) | 80 | static struct kmem_cache *ccid_kmem_cache_create(int obj_size, char *slab_name_fmt, const char *fmt,...) |
| 81 | { | 81 | { |
| 82 | struct kmem_cache *slab; | 82 | struct kmem_cache *slab; |
| 83 | char slab_name_fmt[32], *slab_name; | ||
| 84 | va_list args; | 83 | va_list args; |
| 85 | 84 | ||
| 86 | va_start(args, fmt); | 85 | va_start(args, fmt); |
| 87 | vsnprintf(slab_name_fmt, sizeof(slab_name_fmt), fmt, args); | 86 | vsnprintf(slab_name_fmt, sizeof(slab_name_fmt), fmt, args); |
| 88 | va_end(args); | 87 | va_end(args); |
| 89 | 88 | ||
| 90 | slab_name = kstrdup(slab_name_fmt, GFP_KERNEL); | 89 | slab = kmem_cache_create(slab_name_fmt, sizeof(struct ccid) + obj_size, 0, |
| 91 | if (slab_name == NULL) | ||
| 92 | return NULL; | ||
| 93 | slab = kmem_cache_create(slab_name, sizeof(struct ccid) + obj_size, 0, | ||
| 94 | SLAB_HWCACHE_ALIGN, NULL); | 90 | SLAB_HWCACHE_ALIGN, NULL); |
| 95 | if (slab == NULL) | ||
| 96 | kfree(slab_name); | ||
| 97 | return slab; | 91 | return slab; |
| 98 | } | 92 | } |
| 99 | 93 | ||
| 100 | static void ccid_kmem_cache_destroy(struct kmem_cache *slab) | 94 | static void ccid_kmem_cache_destroy(struct kmem_cache *slab) |
| 101 | { | 95 | { |
| 102 | if (slab != NULL) { | 96 | if (slab != NULL) |
| 103 | const char *name = kmem_cache_name(slab); | ||
| 104 | |||
| 105 | kmem_cache_destroy(slab); | 97 | kmem_cache_destroy(slab); |
| 106 | kfree(name); | ||
| 107 | } | ||
| 108 | } | 98 | } |
| 109 | 99 | ||
| 110 | static int ccid_activate(struct ccid_operations *ccid_ops) | 100 | static int ccid_activate(struct ccid_operations *ccid_ops) |
| @@ -113,6 +103,7 @@ static int ccid_activate(struct ccid_operations *ccid_ops) | |||
| 113 | 103 | ||
| 114 | ccid_ops->ccid_hc_rx_slab = | 104 | ccid_ops->ccid_hc_rx_slab = |
| 115 | ccid_kmem_cache_create(ccid_ops->ccid_hc_rx_obj_size, | 105 | ccid_kmem_cache_create(ccid_ops->ccid_hc_rx_obj_size, |
| 106 | ccid_ops->ccid_hc_rx_slab_name, | ||
| 116 | "ccid%u_hc_rx_sock", | 107 | "ccid%u_hc_rx_sock", |
| 117 | ccid_ops->ccid_id); | 108 | ccid_ops->ccid_id); |
| 118 | if (ccid_ops->ccid_hc_rx_slab == NULL) | 109 | if (ccid_ops->ccid_hc_rx_slab == NULL) |
| @@ -120,6 +111,7 @@ static int ccid_activate(struct ccid_operations *ccid_ops) | |||
| 120 | 111 | ||
| 121 | ccid_ops->ccid_hc_tx_slab = | 112 | ccid_ops->ccid_hc_tx_slab = |
| 122 | ccid_kmem_cache_create(ccid_ops->ccid_hc_tx_obj_size, | 113 | ccid_kmem_cache_create(ccid_ops->ccid_hc_tx_obj_size, |
| 114 | ccid_ops->ccid_hc_tx_slab_name, | ||
| 123 | "ccid%u_hc_tx_sock", | 115 | "ccid%u_hc_tx_sock", |
| 124 | ccid_ops->ccid_id); | 116 | ccid_ops->ccid_id); |
| 125 | if (ccid_ops->ccid_hc_tx_slab == NULL) | 117 | if (ccid_ops->ccid_hc_tx_slab == NULL) |
