[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |