compress: compress_wait() must return error if timed out
The caller must be certain that a return of 0 really means that compress is ready for more data, so when poll() returns 0 for a timeout we must report that as an error. Signed-off-by: Richard Fitzgerald <rf@opensource.wolfsonmicro.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
This commit is contained in:
parent
a85e245a09
commit
ab9b85b430
1 changed files with 10 additions and 8 deletions
18
compress.c
18
compress.c
|
@ -616,15 +616,17 @@ int compress_wait(struct compress *compress, int timeout_ms)
|
|||
fds.events = POLLOUT | POLLIN;
|
||||
|
||||
ret = poll(&fds, 1, timeout_ms);
|
||||
if (fds.revents & POLLERR) {
|
||||
return oops(compress, EIO, "poll returned error!");
|
||||
if (ret > 0) {
|
||||
if (fds.revents & POLLERR)
|
||||
return oops(compress, EIO, "poll returned error!");
|
||||
if (fds.revents & (POLLOUT | POLLIN))
|
||||
return 0;
|
||||
}
|
||||
/* A pause will cause -EBADFD or zero. */
|
||||
if ((ret < 0) && (ret != -EBADFD))
|
||||
if (ret == 0)
|
||||
return oops(compress, ETIME, "poll timed out");
|
||||
if (ret < 0)
|
||||
return oops(compress, errno, "poll error");
|
||||
if (fds.revents & (POLLOUT | POLLIN)) {
|
||||
return 0;
|
||||
}
|
||||
return ret;
|
||||
|
||||
return oops(compress, EIO, "poll signalled unhandled event");
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue