[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel][PATCH]: Support dynamic resizing of vbds
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> >>> 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", §ors); >> + 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 Attachment:
online_resize_info.PATCH _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |