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) {
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;
}
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;
}