|
|
|
|
|
|
|
|
|
|
xen-devel
[Xen-devel] Re: [PATCH] xenbus: avoid zero returns from read()
On 09/09/2010 05:27 AM, Jun Zhu (Intern) wrote:
> Is it related to the following patch? The following patch fixes the problem
> of queue deletion.
Yes, this would have caused a zero return due to an empty item being left
in the queue. It's likely my patch is not needed with this one applied; we
are already careful to avoid adding zero-length elements to the queue,
which was my original idea for the cause.
> diff --git a/drivers/xen/xenfs/xenbus.c b/drivers/xen/xenfs/xenbus.c
> index 64b3be4..763e90d 100644
> --- a/drivers/xen/xenfs/xenbus.c
> +++ b/drivers/xen/xenfs/xenbus.c
> @@ -143,7 +143,7 @@ static ssize_t xenbus_file_read(struct file *filp,
> i += sz - ret;
> rb->cons += sz - ret;
>
> - if (ret != sz) {
> + if (ret != 0) {
> if (i == 0)
> i = -EFAULT;
> goto out;
>
> Jun Zhu
> Citrix Systems UK
> ________________________________________
> From: Daniel De Graaf [dgdegra@xxxxxxxxxxxxx]
> Sent: 08 September 2010 18:10
> To: Jeremy Fitzhardinge
> Cc: xen-devel; Jun Zhu (Intern)
> Subject: [PATCH] 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: Daniel De Graaf <dgdegra@xxxxxxxxxxxxx>
>
> ---
> diff --git a/drivers/xen/xenfs/xenbus.c b/drivers/xen/xenfs/xenbus.c
> index 88c87c9..0ddef43 100644
> --- a/drivers/xen/xenfs/xenbus.c
> +++ b/drivers/xen/xenfs/xenbus.c
> @@ -121,6 +121,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)
> @@ -159,6 +160,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);
--
Daniel De Graaf
National Security Agency
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|