Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1272420
| From | Ian Abbott <abbotti@mev.co.uk> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH 8/8] staging: comedi: check for more errors for zero-length write |
| Date | 2015-11-18 19:00 +0100 |
| Message-ID | <qwfbt-6aN-23@gated-at.bofh.it> (permalink) |
| References | <qwfbs-6aN-7@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
If the "write" file operation handler, `comedi_write()` is passed 0 for
the amount to write, some error conditions are currently skipped and the
function just returns 0. Change it to check those error conditions and
return an error value if appropriate. The trickiest case is the check
for when the previously set up asynchronous command has terminated with
an error. In that case, `-EPIPE` is returned (as it is for a write of
non-zero length) and the subdevice gets marked as non-busy.
A zero-length write that returns 0 has no other effects, in particular,
it does not cause the subdevice to be marked as non-busy.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
---
drivers/staging/comedi/comedi_fops.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c
index 5a9c9d9..d57fade 100644
--- a/drivers/staging/comedi/comedi_fops.c
+++ b/drivers/staging/comedi/comedi_fops.c
@@ -2331,8 +2331,6 @@ static ssize_t comedi_write(struct file *file, const char __user *buf,
}
async = s->async;
- if (!nbytes)
- goto out;
if (s->busy != file || !(async->cmd.flags & CMDF_WRITE)) {
retval = -EINVAL;
goto out;
@@ -2349,9 +2347,12 @@ static ssize_t comedi_write(struct file *file, const char __user *buf,
if (!comedi_is_runflags_running(runflags)) {
if (comedi_is_runflags_in_error(runflags))
retval = -EPIPE;
- become_nonbusy = true;
+ if (retval || nbytes)
+ become_nonbusy = true;
break;
}
+ if (nbytes == 0)
+ break;
/* Allocate all free buffer space. */
comedi_buf_write_alloc(s, async->prealloc_bufsz);
--
2.6.2
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH 0/8] staging: comedi: some comedi_write() changes Ian Abbott <abbotti@mev.co.uk> - 2015-11-18 19:00 +0100
[PATCH 1/8] staging: comedi: rearrange comedi_write() code Ian Abbott <abbotti@mev.co.uk> - 2015-11-18 19:00 +0100
RE: [PATCH 1/8] staging: comedi: rearrange comedi_write() code Hartley Sweeten <HartleyS@visionengravers.com> - 2015-11-19 18:10 +0100
[PATCH 5/8] staging: comedi: allow buffer wraparound in comedi_write() Ian Abbott <abbotti@mev.co.uk> - 2015-11-18 19:00 +0100
[PATCH 8/8] staging: comedi: check for more errors for zero-length write Ian Abbott <abbotti@mev.co.uk> - 2015-11-18 19:00 +0100
[PATCH 4/8] staging: comedi: avoid bad truncation of a size_t in comedi_write() Ian Abbott <abbotti@mev.co.uk> - 2015-11-18 19:00 +0100
[PATCH 6/8] staging: comedi: return error on "write" if no command set up Ian Abbott <abbotti@mev.co.uk> - 2015-11-18 19:00 +0100
[PATCH 7/8] staging: comedi: simplify returned errors for comedi_write() Ian Abbott <abbotti@mev.co.uk> - 2015-11-18 19:00 +0100
RE: [PATCH 0/8] staging: comedi: some comedi_write() changes Hartley Sweeten <HartleyS@visionengravers.com> - 2015-11-19 18:40 +0100
csiph-web