diff options
author | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2003-10-11 08:05:28 +0000 |
---|---|---|
committer | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2003-10-11 08:05:28 +0000 |
commit | 6c03ade535f4445bf318c2b10eb4ff7684b17500 (patch) | |
tree | 9bc204daa51011f77bc8bec987794d7203dcddf9 | |
parent | 16c1819d6de9f52ef2b9de24318cc5cdb37cbf9d (diff) | |
download | xen-6c03ade535f4445bf318c2b10eb4ff7684b17500.tar.gz xen-6c03ade535f4445bf318c2b10eb4ff7684b17500.tar.bz2 xen-6c03ade535f4445bf318c2b10eb4ff7684b17500.zip |
bitkeeper revision 1.501.1.1 (3f87b9c8EzBW2E02feJeTxpF8raA7Q)
xl_block.c, Makefile, CommandVbdList.java:
Fix attach of vbds to an already running guest. Created xen_refresh_dev for this purpose.
-rw-r--r-- | tools/control/src/org/xenoserver/control/CommandVbdList.java | 2 | ||||
-rw-r--r-- | tools/misc/Makefile | 2 | ||||
-rw-r--r-- | xenolinux-2.4.22-sparse/arch/xeno/drivers/block/xl_block.c | 34 |
3 files changed, 27 insertions, 11 deletions
diff --git a/tools/control/src/org/xenoserver/control/CommandVbdList.java b/tools/control/src/org/xenoserver/control/CommandVbdList.java index 16fd1953c6..c25191113a 100644 --- a/tools/control/src/org/xenoserver/control/CommandVbdList.java +++ b/tools/control/src/org/xenoserver/control/CommandVbdList.java @@ -35,7 +35,7 @@ public class CommandVbdList extends Command { key = st.nextToken(); } if (st.hasMoreTokens()) { - if (Integer.parseInt(st.nextToken()) == 2) { + if (Integer.parseInt(st.nextToken()) == 1) { mode = Mode.READ_WRITE; } } diff --git a/tools/misc/Makefile b/tools/misc/Makefile index 62e1ab7fee..9e74d5bd93 100644 --- a/tools/misc/Makefile +++ b/tools/misc/Makefile @@ -7,7 +7,7 @@ HDRS = $(wildcard *.h) SRCS = $(wildcard *.c) OBJS = $(patsubst %.c,%.o,$(SRCS)) -TARGETS = xen_read_console +TARGETS = xen_read_console xen_refresh_dev INSTALL = $(TARGETS) xen-mkdevnodes xen-clone diff --git a/xenolinux-2.4.22-sparse/arch/xeno/drivers/block/xl_block.c b/xenolinux-2.4.22-sparse/arch/xeno/drivers/block/xl_block.c index 743ecd9be0..12e3657d6a 100644 --- a/xenolinux-2.4.22-sparse/arch/xeno/drivers/block/xl_block.c +++ b/xenolinux-2.4.22-sparse/arch/xeno/drivers/block/xl_block.c @@ -272,11 +272,9 @@ int xenolinux_block_revalidate(kdev_t dev) struct gendisk *gd = xldev_to_gendisk(dev); xl_disk_t *disk = xldev_to_xldisk(dev); unsigned long flags; - int i, partn_shift = PARTN_SHIFT(dev); - int xdev = dev & XENDEV_IDX_MASK; + int i, partn_shift = PARTN_SHIFT(dev), disk_nr = MINOR(dev) >> partn_shift; - DPRINTK("xenolinux_block_revalidate: %d %d %d\n", - dev, xdev, XENDEV_IDX_MASK); + DPRINTK("xenolinux_block_revalidate: %d\n", dev); spin_lock_irqsave(&io_request_lock, flags); if ( disk->usage > 1 ) @@ -286,14 +284,32 @@ int xenolinux_block_revalidate(kdev_t dev) } spin_unlock_irqrestore(&io_request_lock, flags); - for ( i = 0; i < (1 << partn_shift); i++ ) + for ( i = (1 << partn_shift) - 1; i >= 0; i-- ) { - invalidate_device(xdev + i, 1); - gd->part[xdev + i].start_sect = 0; - gd->part[xdev + i].nr_sects = 0; + invalidate_device(dev+i, 1); + gd->part[MINOR(dev+i)].start_sect = 0; + gd->part[MINOR(dev+i)].nr_sects = 0; } - grok_partitions(gd, MINOR(dev) >> partn_shift, + /* VBDs can change under our feet. Check if that has happened. */ + if ( MAJOR(dev) == XLVIRT_MAJOR ) + { + xen_disk_info_t *xdi = kmalloc(sizeof(*xdi), GFP_KERNEL); + if ( xdi != NULL ) + { + memset(xdi, 0, sizeof(*xdi)); + xenolinux_control_msg(XEN_BLOCK_PROBE_SEG, + (char *)xdi, sizeof(*xdi)); + for ( i = 0; i < xdi->count; i++ ) + if ( IS_VIRTUAL_XENDEV(xdi->disks[i].device) && + ((xdi->disks[i].device & XENDEV_IDX_MASK) == disk_nr) ) + ((xl_disk_t *)gd->real_devices)[disk_nr].capacity = + xdi->disks[i].capacity; + kfree(xdi); + } + } + + grok_partitions(gd, disk_nr, 1 << partn_shift, disk->capacity); return 0; |