summaryrefslogtreecommitdiffstats
path: root/drivers/staging/comedi/comedi_fops.c
diff options
context:
space:
mode:
authorIan Abbott2016-02-19 17:13:54 +0100
committerGreg Kroah-Hartman2016-02-21 00:25:58 +0100
commit57c563bf78f50d8a43e7ffe0087bc43dc0f188aa (patch)
tree20ccee91a3ad65d1042702fb23d18733cc02203f /drivers/staging/comedi/comedi_fops.c
parentstaging: comedi: COMEDI_BUFINFO: force bytes_written to 0 if stopped (diff)
downloadkernel-qcow2-linux-57c563bf78f50d8a43e7ffe0087bc43dc0f188aa.tar.gz
kernel-qcow2-linux-57c563bf78f50d8a43e7ffe0087bc43dc0f188aa.tar.xz
kernel-qcow2-linux-57c563bf78f50d8a43e7ffe0087bc43dc0f188aa.zip
staging: comedi: COMEDI_BUFINFO: return error if no active command
The `COMEDI_BUFINFO` ioctl is used to advance the current position in the buffer and/or get the current buffer position. If no asynchronous command is active (started via the file object that issued this ioctl), this information is meaningless. Change it to return an error (`-EINVAL`) in this case. Prior to this change, if a command was started via a different file object, the ioctl returned `-EACCES`, but now it will return `-EINVAL`, which is consistent with the current behavior of the "read" and "write" file operation handlers. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/comedi/comedi_fops.c')
-rw-r--r--drivers/staging/comedi/comedi_fops.c22
1 files changed, 2 insertions, 20 deletions
diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c
index b7c9270f9e92..a9fabf7a1000 100644
--- a/drivers/staging/comedi/comedi_fops.c
+++ b/drivers/staging/comedi/comedi_fops.c
@@ -1123,24 +1123,8 @@ static int do_bufinfo_ioctl(struct comedi_device *dev,
async = s->async;
- if (!async) {
- dev_dbg(dev->class_dev,
- "subdevice does not have async capability\n");
- bi.buf_write_ptr = 0;
- bi.buf_read_ptr = 0;
- bi.buf_write_count = 0;
- bi.buf_read_count = 0;
- bi.bytes_read = 0;
- bi.bytes_written = 0;
- goto copyback;
- }
- if (!s->busy) {
- bi.bytes_read = 0;
- bi.bytes_written = 0;
- goto copyback_position;
- }
- if (s->busy != file)
- return -EACCES;
+ if (!async || s->busy != file)
+ return -EINVAL;
if (!(async->cmd.flags & CMDF_WRITE)) {
/* command was set up in "read" direction */
@@ -1165,7 +1149,6 @@ static int do_bufinfo_ioctl(struct comedi_device *dev,
bi.bytes_read = 0;
}
-copyback_position:
bi.buf_write_count = async->buf_write_count;
bi.buf_write_ptr = async->buf_write_ptr;
bi.buf_read_count = async->buf_read_count;
@@ -1174,7 +1157,6 @@ copyback_position:
if (become_nonbusy)
do_become_nonbusy(dev, s);
-copyback:
if (copy_to_user(arg, &bi, sizeof(bi)))
return -EFAULT;