Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

btree: avoid variable-length allocations

geo->keylen cannot be larger than 4. So we might as well make
fixed-size allocations.

Given the one remaining user, geo->keylen cannot even be larger than 1.
Logfs used to have 64bit and 128bit keys, tcm_qla2xxx only has 32bit
keys. But let's not break the code if we don't have to.

Signed-off-by: Joern Engel <joern@purestorage.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Joern Engel and committed by
Linus Torvalds
8df3aaaf fed8f509

+6 -4
+6 -4
lib/btree.c
··· 3 3 * 4 4 * As should be obvious for Linux kernel code, license is GPLv2 5 5 * 6 - * Copyright (c) 2007-2008 Joern Engel <joern@logfs.org> 6 + * Copyright (c) 2007-2008 Joern Engel <joern@purestorage.com> 7 7 * Bits and pieces stolen from Peter Zijlstra's code, which is 8 8 * Copyright 2007, Red Hat Inc. Peter Zijlstra 9 9 * GPLv2 ··· 75 75 .no_longs = 2 * LONG_PER_U64 * (NODESIZE / sizeof(long) / (1 + 2 * LONG_PER_U64)), 76 76 }; 77 77 EXPORT_SYMBOL_GPL(btree_geo128); 78 + 79 + #define MAX_KEYLEN (2 * LONG_PER_U64) 78 80 79 81 static struct kmem_cache *btree_cachep; 80 82 ··· 315 313 { 316 314 int i, height; 317 315 unsigned long *node, *oldnode; 318 - unsigned long *retry_key = NULL, key[geo->keylen]; 316 + unsigned long *retry_key = NULL, key[MAX_KEYLEN]; 319 317 320 318 if (keyzero(geo, __key)) 321 319 return NULL; ··· 641 639 int btree_merge(struct btree_head *target, struct btree_head *victim, 642 640 struct btree_geo *geo, gfp_t gfp) 643 641 { 644 - unsigned long key[geo->keylen]; 645 - unsigned long dup[geo->keylen]; 642 + unsigned long key[MAX_KEYLEN]; 643 + unsigned long dup[MAX_KEYLEN]; 646 644 void *val; 647 645 int err; 648 646