diff --git a/lib/generic/lru.c b/lib/generic/lru.c
index 7ab31ae9b8e082b550d00ff32e260f0430b7a38f..12bba4ed728954f69892e704be2f1ca2577c5baa 100644
--- a/lib/generic/lru.c
+++ b/lib/generic/lru.c
@@ -165,8 +165,15 @@ KR_EXPORT void * lru_get_impl(struct lru *lru, const char *key, uint key_len,
 		if (g->hashes[i] == khash_top) {
 			it = g->items[i];
 			if (likely(it && it->key_len == key_len
-					&& (key_len == 0 || memcmp(it->data, key, key_len) == 0)))
-				goto found; // to reduce huge nesting depth
+					&& (key_len == 0 || memcmp(it->data, key, key_len) == 0))) {
+				/* Found a key, but trying to insert a value larger than available
+				 * space in the allocated slot, so the entry must be resized to fit. */
+				if (unlikely(do_insert && val_len > it->val_len)) {
+					goto insert;
+				} else {
+					goto found; // to reduce huge nesting depth	
+				}
+			}
 		}
 	}
 	// key not found; first try an empty/counted-out place to insert