summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/staging/comedi/comedi_fops.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c
index 04d6040246ee..e625ef2bcb7f 100644
--- a/drivers/staging/comedi/comedi_fops.c
+++ b/drivers/staging/comedi/comedi_fops.c
@@ -1111,6 +1111,7 @@ static int do_bufinfo_ioctl(struct comedi_device *dev,
struct comedi_bufinfo bi;
struct comedi_subdevice *s;
struct comedi_async *async;
+ bool become_nonbusy = false;
if (copy_from_user(&bi, arg, sizeof(bi)))
return -EFAULT;
@@ -1149,7 +1150,7 @@ static int do_bufinfo_ioctl(struct comedi_device *dev,
if (comedi_is_subdevice_idle(s) &&
comedi_buf_read_n_available(s) == 0)
- do_become_nonbusy(dev, s);
+ become_nonbusy = true;
}
bi.bytes_written = 0;
} else {
@@ -1168,6 +1169,9 @@ copyback_position:
bi.buf_read_count = async->buf_read_count;
bi.buf_read_ptr = async->buf_read_ptr;
+ if (become_nonbusy)
+ do_become_nonbusy(dev, s);
+
copyback:
if (copy_to_user(arg, &bi, sizeof(bi)))
return -EFAULT;