diff options
Diffstat (limited to 'drivers/base')
| -rw-r--r-- | drivers/base/regmap/regcache-rbtree.c | 7 | 
1 files changed, 3 insertions, 4 deletions
| diff --git a/drivers/base/regmap/regcache-rbtree.c b/drivers/base/regmap/regcache-rbtree.c index cfa29dc89bbf..fabf87058d80 100644 --- a/drivers/base/regmap/regcache-rbtree.c +++ b/drivers/base/regmap/regcache-rbtree.c @@ -281,14 +281,14 @@ static int regcache_rbtree_insert_to_block(struct regmap *map,  	if (!blk)  		return -ENOMEM; +	rbnode->block = blk; +  	if (BITS_TO_LONGS(blklen) > BITS_TO_LONGS(rbnode->blklen)) {  		present = krealloc(rbnode->cache_present,  				   BITS_TO_LONGS(blklen) * sizeof(*present),  				   GFP_KERNEL); -		if (!present) { -			kfree(blk); +		if (!present)  			return -ENOMEM; -		}  		memset(present + BITS_TO_LONGS(rbnode->blklen), 0,  		       (BITS_TO_LONGS(blklen) - BITS_TO_LONGS(rbnode->blklen)) @@ -305,7 +305,6 @@ static int regcache_rbtree_insert_to_block(struct regmap *map,  	}  	/* update the rbnode block, its size and the base register */ -	rbnode->block = blk;  	rbnode->blklen = blklen;  	rbnode->base_reg = base_reg;  	rbnode->cache_present = present; |