diff options
author | Markus Lidel <Markus.Lidel@shadowconnect.com> | 2006-06-10 09:54:14 -0700 |
---|---|---|
committer | Chris Wright <chrisw@sous-sol.org> | 2006-06-22 12:16:12 -0700 |
commit | d83d3226f92a802242e8e80d0c7206d7b39c7b49 (patch) | |
tree | 093880512c86e8e464c2d4f928f245de3b0cb423 /include | |
parent | a4dad8b5746aa25f97c5b94c96fcf20cda9593fb (diff) |
[PATCH] I2O: Bugfixes to get I2O working again
- Fixed locking of struct i2o_exec_wait in Executive-OSM
- Removed LCT Notify in i2o_exec_probe() which caused freeing memory and
accessing freed memory during first enumeration of I2O devices
- Added missing locking in i2o_exec_lct_notify()
- removed put_device() of I2O controller in i2o_iop_remove() which caused
the controller structure get freed to early
- Fixed size of mempool in i2o_iop_alloc()
- Fixed access to freed memory in i2o_msg_get()
See http://bugzilla.kernel.org/show_bug.cgi?id=6561
Signed-off-by: Markus Lidel <Markus.Lidel@shadowconnect.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/i2o.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/include/linux/i2o.h b/include/linux/i2o.h index 5a9d8c59917..6368e315714 100644 --- a/include/linux/i2o.h +++ b/include/linux/i2o.h @@ -1116,8 +1116,11 @@ static inline struct i2o_message *i2o_msg_get(struct i2o_controller *c) mmsg->mfa = readl(c->in_port); if (unlikely(mmsg->mfa >= c->in_queue.len)) { + u32 mfa = mmsg->mfa; + mempool_free(mmsg, c->in_msg.mempool); - if(mmsg->mfa == I2O_QUEUE_EMPTY) + + if (mfa == I2O_QUEUE_EMPTY) return ERR_PTR(-EBUSY); return ERR_PTR(-EFAULT); } |