Here is a patch that special cases tap/aio during validation.
I am not taking into account qcow and qcow2 as I hear they are broken with tap
and shouldn't be used for that reason.
Signed-off-by: Kamala Narasimhan <kamala.narasimhan@xxxxxxxxxx>
Kamala
diff -r 67d5b8004947 tools/libxl/libxl.c
--- a/tools/libxl/libxl.c Wed Jan 26 11:58:45 2011 +0000
+++ b/tools/libxl/libxl.c Wed Jan 26 12:07:54 2011 -0500
@@ -836,22 +836,26 @@ static int validate_virtual_disk(libxl_c
static int validate_virtual_disk(libxl_ctx *ctx, char *file_name,
libxl_disk_phystype disk_type)
{
struct stat stat_buf;
+ int count = 0;
if ( (file_name[0] == '\0') && (disk_type == PHYSTYPE_EMPTY) )
return 0;
- if ( stat(file_name, &stat_buf) != 0 ) {
- LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "failed to stat %s",
file_name);
+ if ( disk_type == PHYSTYPE_AIO )
+ count = strlen("vhd:");
+
+ if ( stat(&file_name[count], &stat_buf) != 0 ) {
+ LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "failed to stat %s",
&file_name[count]);
return ERROR_INVAL;
}
if ( disk_type == PHYSTYPE_PHY ) {
if ( !(S_ISBLK(stat_buf.st_mode)) ) {
LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Virtual disk %s is not a block
device!\n",
- file_name);
+ &file_name[count]);
return ERROR_INVAL;
}
} else if ( S_ISREG(stat_buf.st_mode) && stat_buf.st_size == 0 ) {
- LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Virtual disk %s size is 0!\n",
file_name);
+ LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Virtual disk %s size is 0!\n",
&file_name[count]);
return ERROR_INVAL;
}
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|