mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
lib/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. Change-Id: I124d7095003cd140c17b18c2038f67de9ffc9328 Signed-off-by: Joern Engel <joern@purestorage.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Richard Raya <rdxzv.dev@gmail.com>
This commit is contained in:
parent
ff9b168060
commit
6325cc3d94
10
lib/btree.c
10
lib/btree.c
@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* As should be obvious for Linux kernel code, license is GPLv2
|
* As should be obvious for Linux kernel code, license is GPLv2
|
||||||
*
|
*
|
||||||
* Copyright (c) 2007-2008 Joern Engel <joern@logfs.org>
|
* Copyright (c) 2007-2008 Joern Engel <joern@purestorage.com>
|
||||||
* Bits and pieces stolen from Peter Zijlstra's code, which is
|
* Bits and pieces stolen from Peter Zijlstra's code, which is
|
||||||
* Copyright 2007, Red Hat Inc. Peter Zijlstra
|
* Copyright 2007, Red Hat Inc. Peter Zijlstra
|
||||||
* GPLv2
|
* GPLv2
|
||||||
@ -76,6 +76,8 @@ struct btree_geo btree_geo128 = {
|
|||||||
};
|
};
|
||||||
EXPORT_SYMBOL_GPL(btree_geo128);
|
EXPORT_SYMBOL_GPL(btree_geo128);
|
||||||
|
|
||||||
|
#define MAX_KEYLEN (2 * LONG_PER_U64)
|
||||||
|
|
||||||
static struct kmem_cache *btree_cachep;
|
static struct kmem_cache *btree_cachep;
|
||||||
|
|
||||||
void *btree_alloc(gfp_t gfp_mask, void *pool_data)
|
void *btree_alloc(gfp_t gfp_mask, void *pool_data)
|
||||||
@ -313,7 +315,7 @@ void *btree_get_prev(struct btree_head *head, struct btree_geo *geo,
|
|||||||
{
|
{
|
||||||
int i, height;
|
int i, height;
|
||||||
unsigned long *node, *oldnode;
|
unsigned long *node, *oldnode;
|
||||||
unsigned long *retry_key = NULL, key[geo->keylen];
|
unsigned long *retry_key = NULL, key[MAX_KEYLEN];
|
||||||
|
|
||||||
if (keyzero(geo, __key))
|
if (keyzero(geo, __key))
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -639,8 +641,8 @@ EXPORT_SYMBOL_GPL(btree_remove);
|
|||||||
int btree_merge(struct btree_head *target, struct btree_head *victim,
|
int btree_merge(struct btree_head *target, struct btree_head *victim,
|
||||||
struct btree_geo *geo, gfp_t gfp)
|
struct btree_geo *geo, gfp_t gfp)
|
||||||
{
|
{
|
||||||
unsigned long key[geo->keylen];
|
unsigned long key[MAX_KEYLEN];
|
||||||
unsigned long dup[geo->keylen];
|
unsigned long dup[MAX_KEYLEN];
|
||||||
void *val;
|
void *val;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user