Data structure for inserting and replacing data in list
A hashtable sounds like a better fit for your problem than using a linked list like this, giving you O(1) lookup time in the average case (O(n) for worst case).

You can find a popular hashing algorithm here: djb2

Also are you sure of your use of const?

struct _kvp *const item;
const struct _kvp *item;