diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index 6dd2179cf1a4a42c2473cdae3ca1ba023e78ea6b..7c52d6888924c53215579b1b663083be376dfa48 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -3973,8 +3973,12 @@ static void *cfq_init_queue(struct request_queue *q)
 		return NULL;
 
 	cfqd = kmalloc_node(sizeof(*cfqd), GFP_KERNEL | __GFP_ZERO, q->node);
-	if (!cfqd)
+	if (!cfqd) {
+		spin_lock(&cic_index_lock);
+		ida_remove(&cic_index_ida, i);
+		spin_unlock(&cic_index_lock);
 		return NULL;
+	}
 
 	/*
 	 * Don't need take queue_lock in the routine, since we are