Currently cache setting of a block device cannot be changed without restarting a running VM. Following patchset is for enabling dynamic change of cache setting for block devices through qemu monitor. Code changes are based on patches from Christoph Hellwig and Prerna Saxena.
This patchset introduces a. monitor command 'block_set_hostcache' using which host pagecache setting for a block device can be changed dynamically. b. a new option for setting host cache from qemu commandline option -drive "hostcache=on/off". c. BDRVReopenState, a generic structure which can be extended by each of the block drivers to reopen respective image files. Extension of this structure for drivers raw-posix is done here. d. 'hostcache and 'cache' options when used together, cache=xx will override hostcache=yy. v8: 1. Mandate implementation of all three reopen related functions by block drivers. 2. If 'cache=xx' and 'hostcache=yy' specified in cmdline, 'cache=' overrides 'hostcache='. v7: 1. Added structure BDRVReopenState to support safe reopening of image files. 2. Implemented reopen functions for raw-posix driver v6: 1. "block_set_hostcache" to replace "block_set" command v5: 1. Defined qerror class for incorrect command syntax. 2. Changed error_report() calls to qerror_report() v4: Added 'hostcache' option to '-drive' commandline option. v3: 1. Command "block_set" for changing various block params 2. Enhanced info-block to display hostcache setting 3. Added qmp interfaces for setting and querying hostcache v2: 1. Support of dynamic cache change only for hostcache. 2. Monitor command "hostcache_get" added to display cache setting 3. Backed off the changes for display of cache setting in "info block" v1: Dynamic cache change through monitor New block command added: "block_set_hostcache" -- Sets hostcache parameter for block device while guest is running. Usage: block_set_hostcache <device> <option> <device> = block device <option> = on/off New 'hostcache' option added to -drive: -drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]\n" .... " [,readonly=on|off][,hostcache=on|off]\n" qemu/block.c | 79 +++++++++++++++++++++++++++++++++++++++-------- qemu/block.h | 3 ++ qemu/block/raw-posix.c | 57 +++++++++++++++++++++++++++++++++++++++++ qemu/block/raw.c | 23 +++++++++++++++- qemu/block_int.h | 16 +++++++++++ qemu/blockdev.c | 7 +++++ qemu/qemu-common.h | 1 qemu/qemu-config.c | 4 ++ qemu/qemu-options.hx | 2 - qemu/qerror.c | 8 +++++ qemu/qerror.h | 6 ++++ qemu/qmp-commands.hx | 4 ++ 14 files changed, 194 insertions(+), 16 deletions(-) ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ "txt" 13L, 574C