[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v5 5/7] xen/9pfs: send requests to the backend



On Tue, 21 Mar 2017, Juergen Gross wrote:
> On 20/03/17 18:59, Stefano Stabellini wrote:
> > Implement struct p9_trans_module create and close functions by looking
> > at the available Xen 9pfs frontend-backend connections. We don't expect
> > many frontend-backend connections, thus walking a list is OK.
> > 
> > Send requests to the backend by copying each request to one of the
> > available rings (each frontend-backend connection comes with multiple
> > rings). Handle the ring and notifications following the 9pfs
> > specification. If there are not enough free bytes on the ring for the
> > request, wait on the wait_queue: the backend will send a notification
> > after consuming more requests.
> > 
> > Signed-off-by: Stefano Stabellini <stefano@xxxxxxxxxxx>
> > Reviewed-by: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx>
> > CC: groug@xxxxxxxx
> > CC: jgross@xxxxxxxx
> > CC: Eric Van Hensbergen <ericvh@xxxxxxxxx>
> > CC: Ron Minnich <rminnich@xxxxxxxxxx>
> > CC: Latchesar Ionkov <lucho@xxxxxxxxxx>
> > CC: v9fs-developer@xxxxxxxxxxxxxxxxxxxxx
> > ---
> >  net/9p/trans_xen.c | 91 
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++--
> >  1 file changed, 89 insertions(+), 2 deletions(-)
> > 
> > diff --git a/net/9p/trans_xen.c b/net/9p/trans_xen.c
> > index 5279ae0..e51edac 100644
> > --- a/net/9p/trans_xen.c
> > +++ b/net/9p/trans_xen.c
> 
> > +static int p9_xen_write_todo(struct xen_9pfs_dataring *ring, RING_IDX size)
> > +{
> > +   RING_IDX cons, prod;
> > +
> > +   cons = ring->intf->out_cons;
> > +   prod = ring->intf->out_prod;
> > +   virt_mb();
> > +
> > +   if (XEN_9PFS_RING_SIZE - xen_9pfs_queued(prod, cons,
> > +                                            XEN_9PFS_RING_SIZE) >= size)
> > +           return 1;
> > +   else
> > +           return 0;
> >  }
> 
> Make return type of function bool and use:
> 
> return XEN_9PFS_RING_SIZE - xen_9pfs_queued(prod, cons,
>                                             XEN_9PFS_RING_SIZE) >= size;
> 
> and further below ...

Good idea


> >  
> >  static int p9_xen_request(struct p9_client *client, struct p9_req_t 
> > *p9_req)
> >  {
> > +   struct xen_9pfs_front_priv *priv = NULL;
> > +   RING_IDX cons, prod, masked_cons, masked_prod;
> > +   unsigned long flags;
> > +   u32 size = p9_req->tc->size;
> > +   struct xen_9pfs_dataring *ring;
> > +   int num;
> > +
> > +   read_lock(&xen_9pfs_lock);
> > +   list_for_each_entry(priv, &xen_9pfs_devs, list) {
> > +           if (priv->client == client)
> > +                   break;
> > +   }
> > +   read_unlock(&xen_9pfs_lock);
> > +   if (!priv || priv->client != client)
> > +           return -EINVAL;
> > +
> > +   num = p9_req->tc->tag % priv->num_rings;
> > +   ring = &priv->rings[num];
> > +
> > +again:
> > +   while (wait_event_interruptible(ring->wq,
> > +                                   p9_xen_write_todo(ring, size) > 0) != 0)
> 
> ... you can omit the "> 0".

I'll do that

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.