Skip to contentSkip to conversation

elevator: fix memory leak in ->elevator_init_fn

PATCH In review Chao Yu 2 participants 2 messages Apr 24, 2015 Block layer

lore
Share & tools
lore

Chao Yu

author
#0 lore raw

PATCH 1/1 elevator: fix memory leak in ->elevator_init_fn

In ->elevator_init_fn, if we fail to call kzalloc_node, we should release elevator queue space which is allocated previously, otherwise it will cause memory leak.

---
 block/cfq-iosched.c      | 1 +
 block/deadline-iosched.c | 1 +
 block/noop-iosched.c     | 1 +
 3 files changed, 3 insertions(+)
block/cfq-iosched.c +1 -0
index 5da8e6e..2793fb7 100644
@@ -4391,6 +4391,7 @@ static int cfq_init_queue(struct request_queue *q, struct elevator_type *e)
 	cfqd = kzalloc_node(sizeof(*cfqd), GFP_KERNEL, q->node);
 	if (!cfqd) {
 		kobject_put(&eq->kobj);
+		kfree(eq);
 		return -ENOMEM;
 	}
 	eq->elevator_data = cfqd;
block/deadline-iosched.c +1 -0
index a753df2..bc6d7d9 100644
@@ -349,6 +349,7 @@ static int deadline_init_queue(struct request_queue *q, struct elevator_type *e)
 	dd = kzalloc_node(sizeof(*dd), GFP_KERNEL, q->node);
 	if (!dd) {
 		kobject_put(&eq->kobj);
+		kfree(eq);
 		return -ENOMEM;
 	}
 	eq->elevator_data = dd;
block/noop-iosched.c +1 -0
index 3de89d4..1399c78 100644
@@ -71,6 +71,7 @@ static int noop_init_queue(struct request_queue *q, struct elevator_type *e)
 	nd = kmalloc_node(sizeof(*nd), GFP_KERNEL, q->node);
 	if (!nd) {
 		kobject_put(&eq->kobj);
+		kfree(eq);
 		return -ENOMEM;
 	}
 	eq->elevator_data = nd;
Signature · 1 line
2.3.3