From 0e0c39e2beb9c55db1394c61c054078666a716cc Mon Sep 17 00:00:00 2001 From: Richard Fitzgerald Date: Wed, 5 Jun 2013 13:11:44 +0100 Subject: [PATCH] compress: do not poll if enough space to write remaining data Changes the poll logic in compress_write() to prevent it polling if there is enough available space to write all remaining data. Previously the logic always polled for an entire fragment to become available before starting the first write. This change allows short writes of < frag_size, which is likely at the end of a stream. Signed-off-by: Richard Fitzgerald Signed-off-by: Vinod Koul --- compress.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/compress.c b/compress.c index 373de85..bb68fa6 100644 --- a/compress.c +++ b/compress.c @@ -368,12 +368,10 @@ int compress_write(struct compress *compress, const void *buf, unsigned int size if (ioctl(compress->fd, SNDRV_COMPRESS_AVAIL, &avail)) return oops(compress, errno, "cannot get avail"); - if ( (avail.avail < frag_size) - || ((to_write != 0) && (avail.avail < size)) ) { - /* not enough space for one fragment, or we have done - * a short write and there isn't enough space for all - * the remaining data - */ + /* We can write if we have at least one fragment available + * or there is enough space for all remaining data + */ + if ((avail.avail < frag_size) && (avail.avail < size)) { ret = poll(&fds, 1, compress->max_poll_wait_ms); /* A pause will cause -EBADFD or zero. * This is not an error, just stop writing */ -- 2.47.3