[Top][All Lists]
[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 */
[Qemu-devel] [PATCH 1/3] trace: Trace bdrv_set_locked(), Stefan Hajnoczi, 2011/03/23