[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel][PATCH][ioemu] strip tap subtype prefix from image name (restyled)



I already checked in an appropriate fix following Christoph's comments.

 -- Keir

On 30/1/08 16:24, "Pat Campbell" <plc@xxxxxxxxxx> wrote:

> Christoph Egger wrote:
>> On Wednesday 30 January 2008 15:14:24 Pat Campbell wrote:
>>   
>>> More readable version
>>> 
>>> Currently I am not able to mount or boot from an HVM CDROM when it is
>>> configured for 'tap:aio' instead of 'file'.
>>> 
>>> disk=[ 'tap:aio:/var/lib/xen/images/sles10-sp2-fv/disk0,hda,w', '
>>>        tap:aio:/home/iso/sles/SLES10.iso,hdc:cdrom,r', ]
>>> 
>>> With the attached patch I am able to boot from the CDROM and or mount it.
>>> 
>>> Patch changes xenstore.c:xenstore_process_event() to strip the tap subtype
>>> prefix from the image name.
>>> 
>>> Please apply to xen-unstable tip.
>>> 
>>> Signed-off-by: Pat Campbell <plc@xxxxxxxxxx>
>>>     
>> 
>> That looks much better.
>> See inline for comments.
>> 
>>   
>>> xen-blktab-subtype-strip.patch
>>> diff -r 1c826ea72a80 tools/ioemu/xenstore.c
>>> --- a/tools/ioemu/xenstore.c    Wed Jan 23 15:42:52 2008 +0000
>>> +++ b/tools/ioemu/xenstore.c    Wed Jan 30 07:06:12 2008 -0700
>>> @@ -418,7 +418,7 @@ void xenstore_record_dm_state(char *stat
>>>  
>>> void xenstore_process_event(void *opaque)
>>>  {
>>> -    char **vec, *image = NULL;
>>> +    char **vec, *offset, *bpath = NULL, *buf = NULL, *drv = NULL, *image =
>>>     
>> NULL;
>>   
>>>      unsigned int len, num, hd_index;
>>>  
>>>      vec = xs_read_watch(xsh, &num);
>>> @@ -440,8 +440,28 @@ void xenstore_process_event(void *opaque
>>>          goto out;
>>>      hd_index = vec[XS_WATCH_TOKEN][2] - 'a';
>>>      image = xs_read(xsh, XBT_NULL, vec[XS_WATCH_PATH], &len);
>>> -    if (image == NULL || !strcmp(image, bs_table[hd_index]->filename))
>>> -        goto out;  /* gone or identical */
>>> +    if (image == NULL)
>>> +        goto out;  /* gone */
>>> +
>>> +    /* Strip off blktap sub-type prefix */
>>> +    bpath = strdup(vec[XS_WATCH_PATH]);
>>> +    if (bpath)
>>>     
>> 
>> I think, you mean if (!bpath)  here.
>>   
> You are right, missed that in my recode.
>>   
>>> +        goto out;
>>> +    if ((offset = strrchr(bpath, '/')) != NULL)
>>> +        *offset = '\0';
>>> +    if (pasprintf(&buf, "%s/type", bpath) == -1)
>>> +        goto out;
>>> +    drv = xs_read(xsh, XBT_NULL, buf, &len);
>>> +    if (drv) {
>>>     
>> 
>> I think, you mean  "if (!drv) goto out;" here.
>>   
> My thinking was, if we read the type we want to check for tap, otherwise
> we want to fall thru and do the normal image compare.  Failure to read
> type is not be an error condition.
> 
> It can be viewed as an error condition I suppose.  Will change that to.
>>   
>>> +        if (!strcmp(drv, "tap")) {
>>> +            offset = strchr(image, ':');
>>> +            if (offset)
>>> +                memmove(image, offset+1, strlen(offset+1)+1 );
>>> +        }
>>> +    }
>>> +
>>> +    if (!strcmp(image, bs_table[hd_index]->filename))
>>> +        goto out;  /* identical */
>>>  
>>>      do_eject(0, vec[XS_WATCH_TOKEN]);
>>>      bs_table[hd_index]->filename[0] = 0;
>>> @@ -456,6 +476,9 @@ void xenstore_process_event(void *opaque
>>>      }
>>>  
>>>   out:
>>> +    free(drv);
>>> +    free(buf);
>>> +    free(bpath);
>>>      free(image);
>>>      free(vec);
>>>     
>> 
>> That doesn't work. If strdup() fails, then drv and buf are NULL here.
>> Analagous counts for the other failures.
>> You need to check for != NULL before calling free().
>> 
>>   
> It appears this code style relies on free dealing with a NULL.  Just
> trying to fit it :-)
>>>  }
>>>     
>> 
>> 
>>   
> Thanks for taking the time.
> 
> _______________________________________________
> 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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.