All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vasily Averin <vvs@sw.ru>
To: linux-scsi@vger.kernel.org, markus.lidel@shadowconnect.com,
	devel@openvz.org, Kirill Korotaev <dev@sw.ru>
Subject: [PATCH I2O] memory leak in i2o_exec_lct_modified
Date: Sat, 04 Mar 2006 11:27:11 +0300	[thread overview]
Message-ID: <44094F5F.9080900@sw.ru> (raw)

[-- Attachment #1: Type: text/plain, Size: 187 bytes --]

i2o_exec_lct_modified() does not release memory allocated for work_struct.

Signed-off-by: Vasily Averin <vvs@sw.ru>

Thank you,
	Vasily Averin

SWsoft Virtuozzo/OpenVZ Linux kernel team

[-- Attachment #2: diff-drv-i2o-memleak-20060304 --]
[-- Type: text/plain, Size: 2036 bytes --]

--- ./drivers/message/i2o/exec-osm.c.i2ml	2006-03-04 11:09:45.000000000 +0300
+++ ./drivers/message/i2o/exec-osm.c	2006-03-04 11:09:03.000000000 +0300
@@ -57,6 +57,11 @@ struct i2o_exec_wait {
 	struct list_head list;	/* node in global wait list */
 };
 
+struct i2o_workqueue {
+	struct work_struct work;
+	struct i2o_controller *c;
+};
+
 /* Exec OSM class handling definition */
 static struct i2o_class_id i2o_exec_class_id[] = {
 	{I2O_CLASS_EXECUTIVE},
@@ -355,16 +360,19 @@ static int i2o_exec_remove(struct device
  *	new LCT and if the buffer for the LCT was to small sends a LCT NOTIFY
  *	again, otherwise send LCT NOTIFY to get informed on next LCT change.
  */
-static void i2o_exec_lct_modified(struct i2o_controller *c)
+static void i2o_exec_lct_modified(void *data)
 {
 	u32 change_ind = 0;
+	struct i2o_workqueue *cp;
 
-	if (i2o_device_parse_lct(c) != -EAGAIN)
-		change_ind = c->lct->change_ind + 1;
+	cp = (struct i2o_workqueue *)data;
+	if (i2o_device_parse_lct(cp->c) != -EAGAIN)
+		change_ind = cp->c->lct->change_ind + 1;
 
 #ifdef CONFIG_I2O_LCT_NOTIFY_ON_CHANGES
-	i2o_exec_lct_notify(c, change_ind);
+	i2o_exec_lct_notify(cp->c, change_ind);
 #endif
+	kfree(cp);
 };
 
 /**
@@ -410,16 +418,22 @@ static int i2o_exec_reply(struct i2o_con
 		return i2o_msg_post_wait_complete(c, m, msg, context);
 
 	if ((le32_to_cpu(msg->u.head[1]) >> 24) == I2O_CMD_LCT_NOTIFY) {
-		struct work_struct *work;
+		struct i2o_workqueue *cp;
 
 		pr_debug("%s: LCT notify received\n", c->name);
 
-		work = kmalloc(sizeof(*work), GFP_ATOMIC);
-		if (!work)
+		cp = kmalloc(sizeof(struct i2o_workqueue), GFP_ATOMIC);
+		if (!cp)
 			return -ENOMEM;
 
-		INIT_WORK(work, (void (*)(void *))i2o_exec_lct_modified, c);
-		queue_work(i2o_exec_driver.event_queue, work);
+		cp->c = c;
+		INIT_WORK(&cp->work, i2o_exec_lct_modified, cp);
+		if (!queue_work(i2o_exec_driver.event_queue, &cp->work)) {
+			printk(KERN_DEBUG "i2o_exec_reply:"
+				" call to queue_work() failed.\n");
+			kfree(cp);
+			return -EIO;
+		}
 		return 1;
 	}
 

             reply	other threads:[~2006-03-04  8:27 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-03-04  8:27 Vasily Averin [this message]
2006-03-05 22:18 ` [PATCH I2O] memory leak in i2o_exec_lct_modified Markus Lidel
  -- strict thread matches above, loose matches on Subject: below --
2006-03-04  8:34 Vasily Averin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=44094F5F.9080900@sw.ru \
    --to=vvs@sw.ru \
    --cc=dev@sw.ru \
    --cc=devel@openvz.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=markus.lidel@shadowconnect.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.