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>
This commit is contained in:
parent
bb0c6bfac7
commit
57c563bf78
1 changed files with 2 additions and 20 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue