]> git.proxmox.com Git - qemu.git/commit - block.c
block: Cache total_sectors to reduce bdrv_getlength calls
authorStefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Mon, 19 Apr 2010 15:56:41 +0000 (16:56 +0100)
committerKevin Wolf <kwolf@redhat.com>
Mon, 3 May 2010 08:07:32 +0000 (10:07 +0200)
commit51762288b41f59d027073c404a29256fc4d4540e
treebd81fbd9db389001c8715a1f5a1fb3bc54574c83
parent4899d10d142e97eea8f64141a3507b2ee1a64f52
block: Cache total_sectors to reduce bdrv_getlength calls

The BlockDriver bdrv_getlength function is called from the I/O code path
when checking that the request falls within the device.  Unfortunately
this involves an lseek system call in the raw protocol; every read or
write request will incur this lseek cost.

Jan Kiszka <jan.kiszka@siemens.com> identified this issue and its
latency overhead.  This patch caches device length in the existing
total_sectors variable so lseek calls can be avoided for fixed size
devices.

Growable devices fall back to the full bdrv_getlength code path because
I have not added logic to detect extending the size of the device in a
write.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
block.c