diff options
author | vh249@airwolf.cl.cam.ac.uk <vh249@airwolf.cl.cam.ac.uk> | 2005-03-08 09:39:04 +0000 |
---|---|---|
committer | vh249@airwolf.cl.cam.ac.uk <vh249@airwolf.cl.cam.ac.uk> | 2005-03-08 09:39:04 +0000 |
commit | 39b6d495a8198d758004156c7f5933d84286bb45 (patch) | |
tree | c380ca272f76780e63f3bf14c042307848040f99 | |
parent | b7c8087832883f882029465053493f232cfcb0cc (diff) | |
download | xen-39b6d495a8198d758004156c7f5933d84286bb45.tar.gz xen-39b6d495a8198d758004156c7f5933d84286bb45.tar.bz2 xen-39b6d495a8198d758004156c7f5933d84286bb45.zip |
bitkeeper revision 1.1159.258.23 (422d72b8gvbXrWsyznqgyF7shPiduw)
Fix error path handling not calling iounmap() after ioremap()
Signed-off-by: Yann Droneaud <ydroneaud@mandrakesoft.com>
Signed-off-by: Vincent Hanquez <vincent@xensource.com>
-rw-r--r-- | linux-2.6.10-xen-sparse/arch/xen/kernel/devmem.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/linux-2.6.10-xen-sparse/arch/xen/kernel/devmem.c b/linux-2.6.10-xen-sparse/arch/xen/kernel/devmem.c index ffda098851..456091775b 100644 --- a/linux-2.6.10-xen-sparse/arch/xen/kernel/devmem.c +++ b/linux-2.6.10-xen-sparse/arch/xen/kernel/devmem.c @@ -43,7 +43,7 @@ static ssize_t read_mem(struct file * file, char __user * buf, size_t count, loff_t *ppos) { unsigned long i, p = *ppos; - ssize_t read = 0; + ssize_t read = -EFAULT; void *v; if ((v = ioremap(p, count)) == NULL) { @@ -60,12 +60,12 @@ static ssize_t read_mem(struct file * file, char __user * buf, return count; } if (copy_to_user(buf, v, count)) - return -EFAULT; - iounmap(v); + goto out; - read += count; + read = count; *ppos += read; - +out: + iounmap(v); return read; } @@ -73,18 +73,18 @@ static ssize_t write_mem(struct file * file, const char __user * buf, size_t count, loff_t *ppos) { unsigned long p = *ppos; - ssize_t written = 0; + ssize_t written = -EFAULT; void *v; if ((v = ioremap(p, count)) == NULL) return -EFAULT; if (copy_to_user(v, buf, count)) - return -EFAULT; - iounmap(v); + goto out; - written += count; + written = count; *ppos += written; - +out: + iounmap(v); return written; } |