[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] blktap: factor out linux specific code
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1200406642 0 # Node ID b6cc74f275fd8bf7d3fb82e4a7d01d08cf903112 # Parent 973221f4d9c76b3efa3ce42dae97a41b03273737 blktap: factor out linux specific code Signed-off-by: Christoph Egger <Christoph.Egger@xxxxxxx> --- tools/blktap/drivers/Makefile | 23 ++++++++++---------- tools/blktap/drivers/blk.h | 3 ++ tools/blktap/drivers/blk_linux.c | 42 ++++++++++++++++++++++++++++++++++++++ tools/blktap/drivers/block-aio.c | 25 +++++++--------------- tools/blktap/drivers/block-qcow.c | 16 +++++++++----- tools/blktap/drivers/block-ram.c | 30 +++++++++------------------ tools/blktap/drivers/block-sync.c | 25 +++++++--------------- tools/blktap/drivers/block-vmdk.c | 6 ++++- tools/blktap/drivers/img2qcow.c | 27 ++++++++---------------- tools/blktap/drivers/qcow2raw.c | 26 ++++++++++++++--------- tools/blktap/drivers/tapdisk.h | 4 +-- 11 files changed, 126 insertions(+), 101 deletions(-) diff -r 973221f4d9c7 -r b6cc74f275fd tools/blktap/drivers/Makefile --- a/tools/blktap/drivers/Makefile Tue Jan 15 11:29:15 2008 +0000 +++ b/tools/blktap/drivers/Makefile Tue Jan 15 14:17:22 2008 +0000 @@ -28,28 +28,29 @@ LIBS += -L$(XEN_XENSTORE) -lxenstor AIOLIBS := $(LIBAIO_DIR)/libaio.a -BLK-OBJS := block-aio.o -BLK-OBJS += block-sync.o -BLK-OBJS += block-vmdk.o -BLK-OBJS += block-ram.o -BLK-OBJS += block-qcow.o -BLK-OBJS += aes.o -BLK-OBJS += tapaio.o +BLK-OBJS-y := block-aio.o +BLK-OBJS-y += block-sync.o +BLK-OBJS-y += block-vmdk.o +BLK-OBJS-y += block-ram.o +BLK-OBJS-y += block-qcow.o +BLK-OBJS-y += aes.o +BLK-OBJS-y += tapaio.o +BLK-OBJS-$(CONFIG_Linux) += blk_linux.c all: $(IBIN) qcow-util blktapctrl: blktapctrl.c $(CC) $(CFLAGS) -o blktapctrl $(LIBS) blktapctrl.c -tapdisk: $(BLK-OBJS) tapdisk.c - $(CC) $(CFLAGS) -o tapdisk $(BLK-OBJS) tapdisk.c \ +tapdisk: $(BLK-OBJS-y) tapdisk.c + $(CC) $(CFLAGS) -o tapdisk $(BLK-OBJS-y) tapdisk.c \ $(AIOLIBS) $(LIBS) .PHONY: qcow-util qcow-util: img2qcow qcow2raw qcow-create -img2qcow qcow2raw qcow-create: %: $(BLK-OBJS) - $(CC) $(CFLAGS) -o $* $(BLK-OBJS) $*.c $(AIOLIBS) $(LIBS) +img2qcow qcow2raw qcow-create: %: $(BLK-OBJS-y) + $(CC) $(CFLAGS) -o $* $(BLK-OBJS-y) $*.c $(AIOLIBS) $(LIBS) install: all $(INSTALL_PROG) $(IBIN) $(QCOW_UTIL) $(VHD_UTIL) $(DESTDIR)$(INST_DIR) diff -r 973221f4d9c7 -r b6cc74f275fd tools/blktap/drivers/blk.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/blktap/drivers/blk.h Tue Jan 15 14:17:22 2008 +0000 @@ -0,0 +1,3 @@ + +int blk_getimagesize(int fd, uint64_t *size); +int blk_getsectorsize(int fd, uint64_t *sector_size); diff -r 973221f4d9c7 -r b6cc74f275fd tools/blktap/drivers/blk_linux.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/blktap/drivers/blk_linux.c Tue Jan 15 14:17:22 2008 +0000 @@ -0,0 +1,42 @@ +#include <inttypes.h> +#include <sys/ioctl.h> +#include <linux/fs.h> +#include "tapdisk.h" +#include "blk.h" + +int blk_getimagesize(int fd, uint64_t *size) +{ + int rc; + + *size = 0; + rc = ioctl(fd, BLKGETSIZE, size); + if (rc) { + DPRINTF("ERR: BLKGETSIZE failed, couldn't stat image"); + return -EINVAL; + } + + return 0; +} + +int blk_getsectorsize(int fd, uint64_t *sector_size) +{ +#if defined(BLKSSZGET) + int rc; + + *sector_size = DEFAULT_SECTOR_SIZE; + rc = ioctl(fd, BLKSSZGET, sector_size); + if (rc) { + DPRINTF("ERR: BLKSSZGET failed. Falling back to use default sector size"); + *sector_size = DEFAULT_SECTOR_SIZE; + } + + if (*sector_size != DEFAULT_SECTOR_SIZE) + DPRINTF("Note: sector size is %"PRIu64" (not %u)\n", + *sector_size, DEFAULT_SECTOR_SIZE); +#else + *sector_size = DEFAULT_SECTOR_SIZE; +#endif + + return 0; +} + diff -r 973221f4d9c7 -r b6cc74f275fd tools/blktap/drivers/block-aio.c --- a/tools/blktap/drivers/block-aio.c Tue Jan 15 11:29:15 2008 +0000 +++ b/tools/blktap/drivers/block-aio.c Tue Jan 15 14:17:22 2008 +0000 @@ -41,11 +41,16 @@ #include <sys/statvfs.h> #include <sys/stat.h> #include <sys/ioctl.h> -#include <linux/fs.h> #include "tapdisk.h" #include "tapaio.h" +#include "blk.h" #define MAX_AIO_REQS (MAX_REQUESTS * MAX_SEGMENTS_PER_REQ) + +/* *BSD has no O_LARGEFILE */ +#ifndef O_LARGEFILE +#define O_LARGEFILE 0 +#endif struct pending_aio { td_callback_t cb; @@ -87,11 +92,8 @@ static int get_image_info(struct td_stat if (S_ISBLK(stat.st_mode)) { /*Accessing block device directly*/ - s->size = 0; - if (ioctl(fd,BLKGETSIZE,&s->size)!=0) { - DPRINTF("ERR: BLKGETSIZE failed, couldn't stat image"); + if (blk_getimagesize(fd, &s->size) != 0) return -EINVAL; - } DPRINTF("Image size: \n\tpre sector_shift [%llu]\n\tpost " "sector_shift [%llu]\n", @@ -99,19 +101,8 @@ static int get_image_info(struct td_stat (long long unsigned)s->size); /*Get the sector size*/ -#if defined(BLKSSZGET) - { - int arg; + if (blk_getsectorsize(fd, &s->sector_size) != 0) s->sector_size = DEFAULT_SECTOR_SIZE; - ioctl(fd, BLKSSZGET, &s->sector_size); - - if (s->sector_size != DEFAULT_SECTOR_SIZE) - DPRINTF("Note: sector size is %ld (not %d)\n", - s->sector_size, DEFAULT_SECTOR_SIZE); - } -#else - s->sector_size = DEFAULT_SECTOR_SIZE; -#endif } else { /*Local file? try fstat instead*/ diff -r 973221f4d9c7 -r b6cc74f275fd tools/blktap/drivers/block-qcow.c --- a/tools/blktap/drivers/block-qcow.c Tue Jan 15 11:29:15 2008 +0000 +++ b/tools/blktap/drivers/block-qcow.c Tue Jan 15 14:17:22 2008 +0000 @@ -29,7 +29,6 @@ #include <sys/statvfs.h> #include <sys/stat.h> #include <sys/ioctl.h> -#include <linux/fs.h> #include <string.h> #include <zlib.h> #include <inttypes.h> @@ -39,6 +38,12 @@ #include "aes.h" #include "tapdisk.h" #include "tapaio.h" +#include "blk.h" + +/* *BSD has no O_LARGEFILE */ +#ifndef O_LARGEFILE +#define O_LARGEFILE 0 +#endif #if 1 #define ASSERT(_p) \ @@ -284,8 +289,7 @@ static int get_filesize(char *filename, fd = open(filename, O_RDONLY); if (fd < 0) return -1; - if (ioctl(fd,BLKGETSIZE,size)!=0) { - printf("Unable to get Block device size\n"); + if (blk_getimagesize(fd, size) != 0) { close(fd); return -1; } @@ -990,8 +994,8 @@ int tdqcow_open (struct disk_driver *dd, if (!final_cluster) s->fd_end = s->l1_table_offset + l1_table_size; else { - s->fd_end = lseek64(fd, 0, SEEK_END); - if (s->fd_end == (off64_t)-1) + s->fd_end = lseek(fd, 0, SEEK_END); + if (s->fd_end == (off_t)-1) goto fail; } @@ -1230,7 +1234,7 @@ int qcow_create(const char *filename, ui DPRINTF("Qcow_create: size %llu\n",(long long unsigned)total_size); fd = open(filename, - O_WRONLY | O_CREAT | O_TRUNC | O_BINARY | O_LARGEFILE, + O_WRONLY | O_CREAT | O_TRUNC | O_BINARY | O_LARGEFILE, 0644); if (fd < 0) return -1; diff -r 973221f4d9c7 -r b6cc74f275fd tools/blktap/drivers/block-ram.c --- a/tools/blktap/drivers/block-ram.c Tue Jan 15 11:29:15 2008 +0000 +++ b/tools/blktap/drivers/block-ram.c Tue Jan 15 14:17:22 2008 +0000 @@ -33,15 +33,21 @@ #include <fcntl.h> #include <stdio.h> #include <stdlib.h> +#include <inttypes.h> #include <unistd.h> #include <sys/statvfs.h> #include <sys/stat.h> #include <sys/ioctl.h> -#include <linux/fs.h> #include <string.h> #include "tapdisk.h" +#include "blk.h" #define MAX_DISK_SIZE 1024000 /*500MB disk limit*/ + +/* *BSD has no O_LARGEFILE */ +#ifndef O_LARGEFILE +#define O_LARGEFILE 0 +#endif char *img; long int disksector_size; @@ -71,11 +77,8 @@ static int get_image_info(struct td_stat if (S_ISBLK(stat.st_mode)) { /*Accessing block device directly*/ - s->size = 0; - if (ioctl(fd,BLKGETSIZE,&s->size)!=0) { - DPRINTF("ERR: BLKGETSIZE failed, couldn't stat image"); + if (blk_getimagesize(fd, &s->size) != 0) return -EINVAL; - } DPRINTF("Image size: \n\tpre sector_shift [%llu]\n\tpost " "sector_shift [%llu]\n", @@ -83,19 +86,8 @@ static int get_image_info(struct td_stat (long long unsigned)s->size); /*Get the sector size*/ -#if defined(BLKSSZGET) - { - int arg; + if (blk_getsectorsize(fd, &s->sector_size) != 0) s->sector_size = DEFAULT_SECTOR_SIZE; - ioctl(fd, BLKSSZGET, &s->sector_size); - - if (s->sector_size != DEFAULT_SECTOR_SIZE) - DPRINTF("Note: sector size is %ld (not %d)\n", - s->sector_size, DEFAULT_SECTOR_SIZE); - } -#else - s->sector_size = DEFAULT_SECTOR_SIZE; -#endif } else { /*Local file? try fstat instead*/ @@ -117,7 +109,7 @@ static int get_image_info(struct td_stat disksector_size = s->sector_size; disksize = s->size; diskinfo = s->info; - DPRINTF("Image sector_size: \n\t[%lu]\n", + DPRINTF("Image sector_size: \n\t[%"PRIu64"]\n", s->sector_size); return 0; @@ -159,7 +151,7 @@ int tdram_open (struct disk_driver *dd, "sector_shift [%llu]\n", (long long unsigned)(s->size << SECTOR_SHIFT), (long long unsigned)s->size); - DPRINTF("Image sector_size: \n\t[%lu]\n", + DPRINTF("Image sector_size: \n\t[%"PRIu64"]\n", s->sector_size); prv->fd = -1; diff -r 973221f4d9c7 -r b6cc74f275fd tools/blktap/drivers/block-sync.c --- a/tools/blktap/drivers/block-sync.c Tue Jan 15 11:29:15 2008 +0000 +++ b/tools/blktap/drivers/block-sync.c Tue Jan 15 14:17:22 2008 +0000 @@ -37,8 +37,13 @@ #include <sys/statvfs.h> #include <sys/stat.h> #include <sys/ioctl.h> -#include <linux/fs.h> #include "tapdisk.h" +#include "blk.h" + +/* *BSD has no O_LARGEFILE */ +#ifndef O_LARGEFILE +#define O_LARGEFILE 0 +#endif struct tdsync_state { int fd; @@ -62,11 +67,8 @@ static int get_image_info(struct td_stat if (S_ISBLK(stat.st_mode)) { /*Accessing block device directly*/ - s->size = 0; - if (ioctl(fd,BLKGETSIZE,&s->size)!=0) { - DPRINTF("ERR: BLKGETSIZE failed, couldn't stat image"); + if (blk_getimagesize(fd, &s->size) != 0) return -EINVAL; - } DPRINTF("Image size: \n\tpre sector_shift [%llu]\n\tpost " "sector_shift [%llu]\n", @@ -74,19 +76,8 @@ static int get_image_info(struct td_stat (long long unsigned)s->size); /*Get the sector size*/ -#if defined(BLKSSZGET) - { - int arg; + if (blk_getsectorsize(fd, &s->sector_size) != 0) s->sector_size = DEFAULT_SECTOR_SIZE; - ioctl(fd, BLKSSZGET, &s->sector_size); - - if (s->sector_size != DEFAULT_SECTOR_SIZE) - DPRINTF("Note: sector size is %ld (not %d)\n", - s->sector_size, DEFAULT_SECTOR_SIZE); - } -#else - s->sector_size = DEFAULT_SECTOR_SIZE; -#endif } else { /*Local file? try fstat instead*/ diff -r 973221f4d9c7 -r b6cc74f275fd tools/blktap/drivers/block-vmdk.c --- a/tools/blktap/drivers/block-vmdk.c Tue Jan 15 11:29:15 2008 +0000 +++ b/tools/blktap/drivers/block-vmdk.c Tue Jan 15 14:17:22 2008 +0000 @@ -42,10 +42,14 @@ #include <sys/statvfs.h> #include <sys/stat.h> #include <sys/ioctl.h> -#include <linux/fs.h> #include <string.h> #include "tapdisk.h" #include "bswap.h" + +/* *BSD has no O_LARGEFILE */ +#ifndef O_LARGEFILE +#define O_LARGEFILE 0 +#endif #define safer_free(_x) \ do { \ diff -r 973221f4d9c7 -r b6cc74f275fd tools/blktap/drivers/img2qcow.c --- a/tools/blktap/drivers/img2qcow.c Tue Jan 15 11:29:15 2008 +0000 +++ b/tools/blktap/drivers/img2qcow.c Tue Jan 15 14:17:22 2008 +0000 @@ -37,15 +37,21 @@ #include <sys/statvfs.h> #include <sys/stat.h> #include <sys/ioctl.h> -#include <linux/fs.h> #include <string.h> #include "tapdisk.h" +#include "blk.h" #if 1 #define DFPRINTF(_f, _a...) fprintf ( stderr, _f , ## _a ) #else #define DFPRINTF(_f, _a...) ((void)0) #endif + +/* *BSD has no O_LARGEFILE */ +#ifndef O_LARGEFILE +#define O_LARGEFILE 0 +#endif + #define TAPDISK 1 #define BLOCK_PROCESSSZ 4096 @@ -109,12 +115,8 @@ static int get_image_info(struct td_stat if (S_ISBLK(stat.st_mode)) { /*Accessing block device directly*/ - s->size = 0; - if (ioctl(fd,BLKGETSIZE,&s->size)!=0) { - DFPRINTF("ERR: BLKGETSIZE failed, " - "couldn't stat image"); + if (blk_getimagesize(fd, &s->size) != 0) return -EINVAL; - } DFPRINTF("Image size: \n\tpre sector_shift [%llu]\n\tpost " "sector_shift [%llu]\n", @@ -122,19 +124,8 @@ static int get_image_info(struct td_stat (long long unsigned)s->size); /*Get the sector size*/ -#if defined(BLKSSZGET) - { - int arg; + if (blk_getsectorsize(fd, &s->sector_size) != 0) s->sector_size = DEFAULT_SECTOR_SIZE; - ioctl(fd, BLKSSZGET, &s->sector_size); - - if (s->sector_size != DEFAULT_SECTOR_SIZE) - DFPRINTF("Note: sector size is %ld (not %d)\n", - s->sector_size, DEFAULT_SECTOR_SIZE); - } -#else - s->sector_size = DEFAULT_SECTOR_SIZE; -#endif } else { /*Local file? try fstat instead*/ diff -r 973221f4d9c7 -r b6cc74f275fd tools/blktap/drivers/qcow2raw.c --- a/tools/blktap/drivers/qcow2raw.c Tue Jan 15 11:29:15 2008 +0000 +++ b/tools/blktap/drivers/qcow2raw.c Tue Jan 15 14:17:22 2008 +0000 @@ -33,18 +33,25 @@ #include <fcntl.h> #include <stdio.h> #include <stdlib.h> +#include <inttypes.h> #include <unistd.h> #include <sys/statvfs.h> #include <sys/stat.h> #include <sys/ioctl.h> -#include <linux/fs.h> #include <string.h> #include "tapdisk.h" +#include "blk.h" #if 1 #define DFPRINTF(_f, _a...) fprintf ( stderr, _f , ## _a ) #else #define DFPRINTF(_f, _a...) ((void)0) +#endif + + +/* *BSD has no O_LARGEFILE */ +#ifndef O_LARGEFILE +#define O_LARGEFILE 0 #endif #define TAPDISK 1 @@ -142,7 +149,7 @@ int main(int argc, char *argv[]) int main(int argc, char *argv[]) { int ret = -1, fd, len,input; - long int size; + uint64_t size; fd_set readfds; struct timeval timeout; uint64_t i; @@ -227,16 +234,15 @@ int main(int argc, char *argv[]) } if (S_ISBLK(finfo.st_mode)) { - if(ioctl(fd,BLKGETSIZE,&size)!=0) { - DFPRINTF("ERROR: BLKGETSIZE failed, " - "couldn't stat image [%s]\n", - argv[1]); - close(fd); - exit(-1); - } + if (blk_getimagesize(fd, &size) != 0) { + close(fd); + return -1; + } + if (size < ddqcow.td_state->size<<9) { DFPRINTF("ERROR: Not enough space on device " - "%s (%lu bytes available, %llu bytes required\n", + "%s (%"PRIu64" bytes available, " + "%llu bytes required\n", argv[1], size, (long long unsigned)ddqcow.td_state->size<<9); close(fd); diff -r 973221f4d9c7 -r b6cc74f275fd tools/blktap/drivers/tapdisk.h --- a/tools/blktap/drivers/tapdisk.h Tue Jan 15 11:29:15 2008 +0000 +++ b/tools/blktap/drivers/tapdisk.h Tue Jan 15 14:17:22 2008 +0000 @@ -108,8 +108,8 @@ struct td_state { void *image; void *ring_info; void *fd_entry; - unsigned long sector_size; - unsigned long long size; + uint64_t sector_size; + uint64_t size; unsigned int info; }; _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |