[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 04/15] block: Do not cache device size for removable
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH 04/15] block: Do not cache device size for removable media |
Date: |
Thu, 7 Apr 2011 16:49:13 +0200 |
From: Stefan Hajnoczi <address@hidden>
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>
Signed-off-by: Kevin Wolf <address@hidden>
---
block.c | 12 +++++-------
1 files changed, 5 insertions(+), 7 deletions(-)
diff --git a/block.c b/block.c
index d8da3b0..f731c7a 100644
--- a/block.c
+++ b/block.c
@@ -1161,14 +1161,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) {
- 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 */
--
1.7.2.3
- [Qemu-devel] [PULL 00/15] Block patches, Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 02/15] Do not delete BlockDriverState when deleting the drive, Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 03/15] trace: Trace bdrv_set_locked(), Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 01/15] hw/xen_disk: ioreq not finished on error, Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 04/15] block: Do not cache device size for removable media,
Kevin Wolf <=
- [Qemu-devel] [PATCH 05/15] qemu-img: Initial progress printing support, Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 06/15] qemu-img rebase: Fix segfault if backing file can't be opened, Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 07/15] exit if -drive specified is invalid instead of ignoring the "wrong" -drive, Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 08/15] ide: consolidate drive_get(IF_IDE), Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 10/15] Set errno=ENOTSUP for attempts to use UNIX sockets on Windows platforms, Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 12/15] NBD device: Separate out parsing configuration and opening sockets., Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 14/15] Fix integer overflow in block migration bandwidth calculation, Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 11/15] NBD: Use qemu_socket functions to open TCP and UNIX sockets, Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 13/15] floppy: save and restore DIR register, Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 09/15] NBD library: whitespace changes, Kevin Wolf, 2011/04/07