mei: fix read after read scenario

mei read always has to be preceded by write but
'write write read read' scenario should work as well.
In this case the offset is not zero but new read should
be initiated

Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Tomas Winkler 2013-05-29 20:09:30 +03:00 committed by Greg Kroah-Hartman
parent 7131799b14
commit 139aacf757

View file

@ -214,19 +214,21 @@ static ssize_t mei_read(struct file *file, char __user *ubuf,
goto out;
}
if (cl->read_cb && cl->read_cb->buf_idx > *offset) {
if (cl->read_cb) {
cb = cl->read_cb;
/* read what left */
if (cb->buf_idx > *offset)
goto copy_buffer;
} else if (cl->read_cb && cl->read_cb->buf_idx > 0 &&
cl->read_cb->buf_idx <= *offset) {
cb = cl->read_cb;
/* offset is beyond buf_idx we have no more data return 0 */
if (cb->buf_idx > 0 && cb->buf_idx <= *offset) {
rets = 0;
goto free;
} else if ((!cl->read_cb || !cl->read_cb->buf_idx) && *offset > 0) {
/*Offset needs to be cleaned for contiguous reads*/
}
/* Offset needs to be cleaned for contiguous reads*/
if (cb->buf_idx == 0 && *offset > 0)
*offset = 0;
} else if (*offset > 0) {
*offset = 0;
rets = 0;
goto out;
}
err = mei_cl_read_start(cl, length);