qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] Re: [PATCH 2/3] block: Do not cache device size for removab


From: Juan Quintela
Subject: [Qemu-devel] Re: [PATCH 2/3] block: Do not cache device size for removable media
Date: Wed, 23 Mar 2011 21:18:08 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.2 (gnu/linux)

Stefan Hajnoczi <address@hidden> wrote:
> The block layer caches the device size to avoid doing lseek(fd, 0,
> SEEK_END) every time this value is needed.  For removable media the
> device size becomes stale if a new medium is inserted.  This patch
> simply prevents device size caching for removable media.
>
> A smarter solution is to update the cached device size when a new medium
> is inserted.  Given that there are currently bugs with CD-ROM media
> change I do not want to implement that approach until we've gotten
> things correct first.
>
> Signed-off-by: Stefan Hajnoczi <address@hidden>
> ---
>  block.c |   12 +++++-------
>  1 files changed, 5 insertions(+), 7 deletions(-)
>
> diff --git a/block.c b/block.c
> index 8f224b4..89f6ded 100644
> --- a/block.c
> +++ b/block.c
> @@ -1153,14 +1153,12 @@ int64_t bdrv_getlength(BlockDriverState *bs)
>      if (!drv)
>          return -ENOMEDIUM;
>  
> -    /* Fixed size devices use the total_sectors value for speed instead of
> -       issuing a length query (like lseek) on each call.  Also, legacy block
> -       drivers don't provide a bdrv_getlength function and must use
> -       total_sectors. */
> -    if (!bs->growable || !drv->bdrv_getlength) {

       if (!bs->growable || !bs->removable|| !drv->bdrv_getlength) {

changing just the test don't give exactly the same result?

> -        return bs->total_sectors * BDRV_SECTOR_SIZE;
> -    }
> -    return drv->bdrv_getlength(bs);
> +    if (bs->growable || bs->removable) {
> +        if (drv->bdrv_getlength) {
> +            return drv->bdrv_getlength(bs);
> +        }
> +    }
> +    return bs->total_sectors * BDRV_SECTOR_SIZE;
>  }
>  
>  /* return 0 as number of sectors if no device present or error */




reply via email to

[Prev in Thread] Current Thread [Next in Thread]