On Wed, 2010-05-19 at 17:22 +0100, Ian Abbott wrote: > For write(), any data copied to the data buffer after the previously > set up streaming acquisition command has finished won't be used, but a > non-empty write() does not currently return 0 (or -EPIPE on error) after > the command has finished until the data buffer has been filled up. > Change this behavior to return 0 (or -EPIPE) any time after the command > has finished, without bothering to fill up the buffer with more useless > data. > > Signed-off-by: Ian Abbott <abbotti@xxxxxxxxx> > --- > drivers/staging/comedi/comedi_fops.c | 23 +++++++++++++---------- > 1 files changed, 13 insertions(+), 10 deletions(-) > > diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c > index 158a6b2..9a26428 100644 > --- a/drivers/staging/comedi/comedi_fops.c > +++ b/drivers/staging/comedi/comedi_fops.c > @@ -1576,6 +1576,19 @@ static ssize_t comedi_write(struct file *file, const char __user *buf, > while (nbytes > 0 && !retval) { > set_current_state(TASK_INTERRUPTIBLE); > > + if (!(comedi_get_subdevice_runflags(s) & SRF_RUNNING)) { > + if (count == 0) { > + if (comedi_get_subdevice_runflags(s) & > + SRF_ERROR) { > + retval = -EPIPE; > + } else { > + retval = 0; > + } > + do_become_nonbusy(dev, s); > + } > + break; > + } Hi Ian. You tend to get many tab indentations. As this is in a while (.. && !retval) the retval = 0 is unnecessary, so maybe something like this is better? if (!(comedi_get_subdevice_runflags(s) & SRF_RUNNING)) { if (count) break; if (comedi_get_subdevice_runflags(s) & SRF_ERROR) retval = -EPIPE; do_become_nonbusy(dev, s); break; } Maybe a macro/function like test_runflags might be useful to reduce the name/line length. #define test_runflags(s, flags) \ return !!(comedi_get_subdevice_runflags(s) & flags); _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/devel