summaryrefslogtreecommitdiffstats
path: root/drivers/char/raw.c
diff options
context:
space:
mode:
authorDavid Jeffery <djeffery@redhat.com>2014-09-29 10:21:10 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2014-10-31 06:33:26 -0400
commitb2de525f095708b2adbadaec3f1e4017a23d1e09 (patch)
tree4a46a47864031b2a019d6fa605d835a3ca88c539 /drivers/char/raw.c
parentb0afd8e5db7b11aa9078e82e7f9abc30dc35a3c1 (diff)
downloadop-kernel-dev-b2de525f095708b2adbadaec3f1e4017a23d1e09.zip
op-kernel-dev-b2de525f095708b2adbadaec3f1e4017a23d1e09.tar.gz
Return short read or 0 at end of a raw device, not EIO
Author: David Jeffery <djeffery@redhat.com> Changes to the basic direct I/O code have broken the raw driver when reading to the end of a raw device. Instead of returning a short read for a read that extends partially beyond the device's end or 0 when at the end of the device, these reads now return EIO. The raw driver needs the same end of device handling as was added for normal block devices. Using blkdev_read_iter, which has the needed size checks, prevents the EIO conditions at the end of the device. Signed-off-by: David Jeffery <djeffery@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'drivers/char/raw.c')
-rw-r--r--drivers/char/raw.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/char/raw.c b/drivers/char/raw.c
index 0102dc7..a24891b 100644
--- a/drivers/char/raw.c
+++ b/drivers/char/raw.c
@@ -285,7 +285,7 @@ static long raw_ctl_compat_ioctl(struct file *file, unsigned int cmd,
static const struct file_operations raw_fops = {
.read = new_sync_read,
- .read_iter = generic_file_read_iter,
+ .read_iter = blkdev_read_iter,
.write = new_sync_write,
.write_iter = blkdev_write_iter,
.fsync = blkdev_fsync,
OpenPOWER on IntegriCloud