diff options
author | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2003-10-11 08:12:56 +0000 |
---|---|---|
committer | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2003-10-11 08:12:56 +0000 |
commit | 2856e6bf918a12e36a5f853020521b4738ea0aab (patch) | |
tree | f78ed208b77a59f8a7ede63fb73f1c0dff2b860d | |
parent | 6d406d9392364e76c9f77452c8698b5d9ee6a8aa (diff) | |
parent | a80f7fc9097ba24759ebf724cd9da531cf34ca95 (diff) | |
download | xen-2856e6bf918a12e36a5f853020521b4738ea0aab.tar.gz xen-2856e6bf918a12e36a5f853020521b4738ea0aab.tar.bz2 xen-2856e6bf918a12e36a5f853020521b4738ea0aab.zip |
bitkeeper revision 1.503 (3f87bb888GFs_glucvd8TfB69He-BQ)
Manual merge
-rw-r--r-- | .rootkeys | 1 | ||||
-rw-r--r-- | extras/mini-os/Makefile | 1 | ||||
-rw-r--r-- | tools/control/src/org/xenoserver/control/CommandVbdList.java | 2 | ||||
-rw-r--r-- | tools/misc/xen_refresh_dev.c | 49 | ||||
-rw-r--r-- | xenolinux-2.4.22-sparse/arch/xeno/drivers/block/xl_block.c | 34 |
5 files changed, 77 insertions, 10 deletions
@@ -186,6 +186,7 @@ 3f13d81eQ9Vz-h-6RDGFkNR9CRP95g tools/misc/xen_nat_enable 3f13d81e6Z6806ihYYUw8GVKNkYnuw tools/misc/xen_nat_enable.README 3f1668d4F29Jsw0aC0bJEIkOBiagiQ tools/misc/xen_read_console.c +3f87ba90EUVPQLVOlFG0sW89BCwouQ tools/misc/xen_refresh_dev.c 3f72f1bdJPsV3JCnBqs9ddL9tr6D2g xen/COPYING 3f841450eJvqAD1Dldc0_aOweGiglQ xen/GUEST_CHANGES 3ddb79bcbOVHh38VJzc97-JEGD4dJQ xen/Makefile diff --git a/extras/mini-os/Makefile b/extras/mini-os/Makefile index f437cf2f58..18ae585db7 100644 --- a/extras/mini-os/Makefile +++ b/extras/mini-os/Makefile @@ -35,6 +35,7 @@ $(TARGET): hypervisor-ifs head.o $(OBJS) clean: find . -type f -name '*.o' | xargs rm -f rm -f *.o *~ core $(TARGET).elf $(TARGET).raw $(TARGET) $(TARGET).gz + find . -type l | xargs rm -f %.o: %.c $(HDRS) Makefile $(CC) $(CFLAGS) -c $< -o $@ 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/xen_refresh_dev.c b/tools/misc/xen_refresh_dev.c new file mode 100644 index 0000000000..b9ea025c1f --- /dev/null +++ b/tools/misc/xen_refresh_dev.c @@ -0,0 +1,49 @@ +/****************************************************************************** + * xen_refresh_dev.c + * + * Refresh our view of a block device by rereading its partition table. This + * is necessary to synchronise with VBD attaches and unattaches in Xen. + * Currently there's no automatic plumbing of attach/unattach requests. + * + * Copyright (c) 2003, K A Fraser + */ + +#include <stdio.h> +#include <stdlib.h> +#include <sys/ioctl.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <fcntl.h> +#include <string.h> +#include <errno.h> +#include <unistd.h> +#include <sys/mount.h> /* BLKRRPART */ + +int main(int argc, char **argv) +{ + int fd; + + if ( argc != 2 ) + { + fprintf(stderr, "xen_refresh_dev <blkdev>\ne.g., /dev/xvda\n"); + return 1; + } + + if ( (fd = open(argv[1], O_RDWR)) == -1 ) + { + fprintf(stderr, "Error opening %s: %s (%d)\n", + argv[1], strerror(errno), errno); + return 1; + } + + if ( ioctl(fd, BLKRRPART) == -1 ) + { + fprintf(stderr, "Error executing BLKRRPART on %s: %s (%d)\n", + argv[1], strerror(errno), errno); + return 1; + } + + close(fd); + + return 0; +} 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; |