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:
Richard Fitzgerald 2013-10-22 11:51:58 +01:00 committed by Eric Laurent
parent a85e245a09
commit ab9b85b430

View file

@ -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");
}