[media] lirc_zilog: error out if buffer read bytes != chunk size
authorJarod Wilson <jarod@redhat.com>
Fri, 4 Mar 2011 22:53:05 +0000 (19:53 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 22 Mar 2011 22:24:21 +0000 (19:24 -0300)
Give it a few tries, then exit. Prevents a possible endless loop
situation.

Signed-off-by: Jarod Wilson <jarod@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/staging/lirc/lirc_zilog.c

index 407d4b409a8bf5df7b78dd04d6d14b5423f56422..dd6a57c3c3a3149bac53eb36fd4ddeabed804050 100644 (file)
@@ -897,7 +897,7 @@ static ssize_t read(struct file *filep, char *outbuf, size_t n, loff_t *ppos)
        struct IR *ir = filep->private_data;
        struct IR_rx *rx;
        struct lirc_buffer *rbuf = ir->l.rbuf;
-       int ret = 0, written = 0;
+       int ret = 0, written = 0, retries = 0;
        unsigned int m;
        DECLARE_WAITQUEUE(wait, current);
 
@@ -950,6 +950,12 @@ static ssize_t read(struct file *filep, char *outbuf, size_t n, loff_t *ppos)
                                ret = copy_to_user((void *)outbuf+written, buf,
                                                   rbuf->chunk_size);
                                written += rbuf->chunk_size;
+                       } else {
+                               retries++;
+                       }
+                       if (retries >= 5) {
+                               zilog_error("Buffer read failed!\n");
+                               ret = -EIO;
                        }
                }
        }