From 7561d8190e8f650b812f6b32aab59f14669cc019 Mon Sep 17 00:00:00 2001 From: Heinz Mauelshagen Date: Tue, 22 Oct 2013 15:34:43 -0400 Subject: [PATCH] dm cache policy mq: return NULL if mq->free list is empty in alloc_entry Addresses callers' (insert_in*cache()) requirement that alloc_entry() return NULL when an entry isn't able to be allocated. Signed-off-by: Heinz Mauelshagen Signed-off-by: Mike Snitzer --- drivers/md/dm-cache-policy-mq.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) Index: linux/drivers/md/dm-cache-policy-mq.c =================================================================== --- linux.orig/drivers/md/dm-cache-policy-mq.c +++ linux/drivers/md/dm-cache-policy-mq.c @@ -399,18 +399,20 @@ static void hash_remove(struct entry *e) */ static struct entry *alloc_entry(struct mq_policy *mq) { - struct entry *e; + struct entry *e = NULL; if (mq->nr_entries_allocated >= mq->nr_entries) { BUG_ON(!list_empty(&mq->free)); return NULL; } - e = list_entry(list_pop(&mq->free), struct entry, list); - INIT_LIST_HEAD(&e->list); - INIT_HLIST_NODE(&e->hlist); + if (!list_empty(&mq->free)) { + e = list_entry(list_pop(&mq->free), struct entry, list); + INIT_LIST_HEAD(&e->list); + INIT_HLIST_NODE(&e->hlist); + mq->nr_entries_allocated++; + } - mq->nr_entries_allocated++; return e; }