WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel][PATCH]: Support dynamic resizing of vbds / print additio

To: Ky Srinivasan <ksrinivasan@xxxxxxxxxx>
Subject: Re: [Xen-devel][PATCH]: Support dynamic resizing of vbds / print additional information patch
From: Pasi Kärkkäinen <pasik@xxxxxx>
Date: Sun, 15 Aug 2010 19:20:49 +0300
Cc: Jeremy Fitzhardinge <jeremy@xxxxxxxx>, "J. Roeleveld" <joost@xxxxxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Sun, 15 Aug 2010 09:20:32 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <4C5029CC020000300008A3D0@xxxxxxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <4B96456B0200003000080E91@xxxxxxxxxxxxxxxxxxxxxxxxx> <20100720185017.GS17817@xxxxxxxxxxx> <4C459C0B0200003000089AEB@xxxxxxxxxxxxxxxxxxxxxxxxx> <201007202100.40466.joost@xxxxxxxxxxxx> <20100720190656.GT17817@xxxxxxxxxxx> <4C5029CC020000300008A3D0@xxxxxxxxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.18 (2008-05-17)
On Wed, Jul 28, 2010 at 12:59:56PM -0600, Ky Srinivasan wrote:
> Pasi,
> 
> I am attaching a patch that prints additional information when a vbd is 
> resized. Note that on the domu side, the generic block layer already prints 
> information on the device that is being resized.
> 
> Signed-off-by: K. Y. Srinivasan <ksrinivasan@xxxxxxxxxx>
> 

Thanks.

Jeremy: Please merge this patch.

-- Pasi

> 
> >>> On 7/20/2010 at  3:06 PM, in message 
> >>> <20100720190656.GT17817@xxxxxxxxxxx>, Pasi
> Kärkkäinen<pasik@xxxxxx> wrote: 
> > On Tue, Jul 20, 2010 at 09:00:39PM +0200, J. Roeleveld wrote:
> >> > >
> >> > > Hmm.. I don't seem to be able to find them.
> >> > > Care to send them again?
> >> > >
> >> > > -- Pasi
> >> > 
> >> > I will dig this up and send it out.
> >> > 
> >> > Regards,
> >> > 
> >> > K. Y
> >> > 
> >> 
> >> 
> >> found this in my archives:
> >> 
> > 
> > Thanks, but unfortunately this is not the patch that adds useful 
> > status/resize information printing..
> > 
> > The patch you attached is already merged into Jeremy's xen.git kernel trees.
> > 
> > -- Pasi
> > 
> >> 
> >> The attached patch supports dynamic resizing of vbds. This patch fixes a 
> >> bug 
> > in 
> >> the previous version of this patch that was sent out. With this patch you 
> > can 
> >> perform "online" resizing of  file systems that support online resizing.
> >> 
> >> Signed-off-by: K. Y. Srinivasan <ksrinivasan@xxxxxxxxxx>
> > 
> >> Subject: Propagate changed size of VBDs
> >> References: bnc#583677
> >> Patch-mainline: n/a
> >> 
> >> Support dynamic resizing of virtual block devices. This patch supports
> >> both file backed block devices as well as physical devices that can be
> >> dynamically resized on the host side.
> >> 
> >> Signed-off-by: K. Y. Srinivasan <ksrinivasan@xxxxxxxxxx>
> >> 
> >> Index: linux/drivers/xen/blkback/blkback.c
> >> ===================================================================
> >> --- linux.orig/drivers/xen/blkback/blkback.c       2010-03-18 
> >> 14:17:28.000000000 -0600
> >> +++ linux/drivers/xen/blkback/blkback.c    2010-03-18 14:17:33.000000000 
> >> -0600
> >> @@ -209,6 +209,7 @@ static void print_stats(blkif_t *blkif)
> >>  int blkif_schedule(void *arg)
> >>  {
> >>    blkif_t *blkif = arg;
> >> +  struct vbd *vbd = &blkif->vbd;
> >>  
> >>    blkif_get(blkif);
> >>  
> >> @@ -218,6 +219,8 @@ int blkif_schedule(void *arg)
> >>    while (!kthread_should_stop()) {
> >>            if (try_to_freeze())
> >>                    continue;
> >> +          if (unlikely(vbd->size != vbd_size(vbd)))
> >> +                  vbd_resize(blkif);
> >>  
> >>            wait_event_interruptible(
> >>                    blkif->wq,
> >> Index: linux/drivers/xen/blkback/vbd.c
> >> ===================================================================
> >> --- linux.orig/drivers/xen/blkback/vbd.c   2010-03-18 14:17:28.000000000 
> >> -0600
> >> +++ linux/drivers/xen/blkback/vbd.c        2010-03-18 14:17:33.000000000 
> >> -0600
> >> @@ -73,6 +73,7 @@ int vbd_create(blkif_t *blkif, blkif_vde
> >>    }
> >>  
> >>    vbd->bdev = bdev;
> >> +  vbd->size = vbd_size(vbd);
> >>  
> >>    if (vbd->bdev->bd_disk == NULL) {
> >>            DPRINTK("vbd_creat: device %08x doesn't exist.\n",
> >> @@ -120,3 +121,45 @@ int vbd_translate(struct phys_req *req,
> >>   out:
> >>    return rc;
> >>  }
> >> +
> >> +void vbd_resize(blkif_t *blkif)
> >> +{
> >> +  struct vbd *vbd = &blkif->vbd;
> >> +  struct xenbus_transaction xbt;
> >> +  int err;
> >> +  struct xenbus_device *dev = blkif->be->dev;
> >> +  unsigned long long new_size = vbd_size(vbd);
> >> +
> >> +  printk(KERN_INFO "VBD Resize: new size %Lu\n", new_size);
> >> +  vbd->size = new_size;
> >> +again:
> >> +  err = xenbus_transaction_start(&xbt);
> >> +  if (err) {
> >> +          printk(KERN_WARNING "Error starting transaction");
> >> +          return;
> >> +  }
> >> +  err = xenbus_printf(xbt, dev->nodename, "sectors", "%Lu",
> >> +                      vbd_size(vbd));
> >> +  if (err) {
> >> +          printk(KERN_WARNING "Error writing new size");
> >> +          goto abort;
> >> +  }
> >> +  /*
> >> +   * Write the current state; we will use this to synchronize
> >> +   * the front-end. If the current state is "connected" the
> >> +   * front-end will get the new size information online.
> >> +   */
> >> +  err = xenbus_printf(xbt, dev->nodename, "state", "%d", dev->state);
> >> +  if (err) {
> >> +          printk(KERN_WARNING "Error writing the state");
> >> +          goto abort;
> >> +  }
> >> +
> >> +  err = xenbus_transaction_end(xbt, 0);
> >> +  if (err == -EAGAIN)
> >> +          goto again;
> >> +  if (err)
> >> +          printk(KERN_WARNING "Error ending transaction");
> >> +abort:
> >> +  xenbus_transaction_end(xbt, 1);
> >> +}
> >> Index: linux/drivers/xen/blkback/common.h
> >> ===================================================================
> >> --- linux.orig/drivers/xen/blkback/common.h        2010-03-18 
> >> 14:17:28.000000000 -0600
> >> +++ linux/drivers/xen/blkback/common.h     2010-03-18 14:17:33.000000000 
> >> -0600
> >> @@ -56,6 +56,7 @@ struct vbd {
> >>    unsigned char  type;        /* VDISK_xxx */
> >>    u32            pdevice;     /* phys device that this vbd maps to */
> >>    struct block_device *bdev;
> >> +  sector_t       size;        /* Cached size parameter */
> >>  };
> >>  
> >>  struct backend_info;
> >> @@ -116,6 +117,7 @@ blkif_t *blkif_alloc(domid_t domid);
> >>  void blkif_disconnect(blkif_t *blkif);
> >>  void blkif_free(blkif_t *blkif);
> >>  int blkif_map(blkif_t *blkif, unsigned long shared_page, unsigned int 
> > evtchn);
> >> +void vbd_resize(blkif_t *blkif);
> >>  
> >>  #define blkif_get(_b) (atomic_inc(&(_b)->refcnt))
> >>  #define blkif_put(_b)                                     \
> >> Index: linux/drivers/xen/blkfront/blkfront.c
> >> ===================================================================
> >> --- linux.orig/drivers/xen/blkfront/blkfront.c     2010-03-18 
> >> 14:17:28.000000000 -0600
> >> +++ linux/drivers/xen/blkfront/blkfront.c  2010-03-18 14:17:33.000000000 
> >> -0600
> >> @@ -328,9 +328,25 @@ static void connect(struct blkfront_info
> >>    unsigned int binfo;
> >>    int err;
> >>  
> >> -  if ((info->connected == BLKIF_STATE_CONNECTED) ||
> >> -      (info->connected == BLKIF_STATE_SUSPENDED) )
> >> +  switch (info->connected) {
> >> +  case BLKIF_STATE_CONNECTED:
> >> +          /*
> >> +           * Potentially, the back-end may be signalling
> >> +           * a capacity change; update the capacity.
> >> +           */
> >> +          err = xenbus_scanf(XBT_NIL, info->xbdev->otherend,
> >> +                             "sectors", "%Lu", &sectors);
> >> +          if (XENBUS_EXIST_ERR(err))
> >> +                  return;
> >> +          printk(KERN_INFO "Setting capacity to %Lu\n",
> >> +                 sectors);
> >> +          set_capacity(info->gd, sectors);
> >> +          revalidate_disk(info->gd);
> >> +
> >> +          /* fall through */
> >> +  case BLKIF_STATE_SUSPENDED:
> >>            return;
> >> +  }
> >>  
> >>    DPRINTK("blkfront.c:connect:%s.\n", info->xbdev->otherend);
> >>  
> > 
> >> _______________________________________________
> >> Xen-devel mailing list
> >> Xen-devel@xxxxxxxxxxxxxxxxxxx
> >> http://lists.xensource.com/xen-devel
> > 
> > 
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@xxxxxxxxxxxxxxxxxxx
> > http://lists.xensource.com/xen-devel
> 

> Subject: Print additional information when a vbd is resized.
> 
> Signed-off-by: K. Y. Srinivasan <ksrinivasan@xxxxxxxxxx>
> 
> 
> Index: linux/drivers/xen/blkback/vbd.c
> ===================================================================
> --- linux.orig/drivers/xen/blkback/vbd.c      2010-05-20 04:07:00.000000000 
> -0600
> +++ linux/drivers/xen/blkback/vbd.c   2010-07-28 11:26:06.000000000 -0600
> @@ -130,6 +130,8 @@ void vbd_resize(blkif_t *blkif)
>       struct xenbus_device *dev = blkif->be->dev;
>       unsigned long long new_size = vbd_size(vbd);
>  
> +     printk(KERN_INFO "VBD Resize: Domid: %d, Device: (%d, %d)\n",
> +             blkif->domid, MAJOR(vbd->pdevice), MINOR(vbd->pdevice));
>       printk(KERN_INFO "VBD Resize: new size %Lu\n", new_size);
>       vbd->size = new_size;
>  again:
> Index: linux/drivers/xen/blkfront/blkfront.c
> ===================================================================
> --- linux.orig/drivers/xen/blkfront/blkfront.c        2010-05-20 
> 04:07:00.000000000 -0600
> +++ linux/drivers/xen/blkfront/blkfront.c     2010-07-28 12:10:26.000000000 
> -0600
> @@ -340,7 +340,7 @@ static void connect(struct blkfront_info
>                                  "sectors", "%Lu", &sectors);
>               if (XENBUS_EXIST_ERR(err))
>                       return;
> -             printk(KERN_INFO "Setting capacity to %Lu\n",
> +             printk(KERN_INFO "Changing capacity to %Lu sectors\n",
>                      sectors);
>               set_capacity(info->gd, sectors);
>               revalidate_disk(info->gd);


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>