Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7808121b authored by Daniel De Graaf's avatar Daniel De Graaf Committed by Jeremy Fitzhardinge
Browse files

xenbus: avoid zero returns from read()



It is possible to get a zero return from read() in instances where the
queue is not empty but has no elements with data to deliver to the user.
Since a zero return from read is an error indicator, resume waiting or
return -EAGAIN (for a nonblocking fd) in this case.

Signed-off-by: default avatarDaniel De Graaf <dgdegra@tycho.nsa.gov>
Signed-off-by: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
parent 76ce7618
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -120,6 +120,7 @@ static ssize_t xenbus_file_read(struct file *filp,
	int ret;

	mutex_lock(&u->reply_mutex);
again:
	while (list_empty(&u->read_buffers)) {
		mutex_unlock(&u->reply_mutex);
		if (filp->f_flags & O_NONBLOCK)
@@ -158,6 +159,8 @@ static ssize_t xenbus_file_read(struct file *filp,
					struct read_buffer, list);
		}
	}
	if (i == 0)
		goto again;

out:
	mutex_unlock(&u->reply_mutex);