File offsets, sizes and alignments should use QAPI type 'size' (uint64_t). blockdev-add parameters are 'int' (int64_t): BlockdevOptionsNull member @size; BlockdevOptionsQcow2 members @cache-size, @l2-cache-size, @refcount-cache-size; BlockdevOptionsNfs members @readahead-size, @page-cache-size; BlockdevOptionsCurlBase member @readahead; BlockdevOptionsRaw members @offset, @size.
The block drivers get their values with qemu_opt_get_size(), which returns uint64_t. They store them in uint64_t variables, except for the null driver, which stores in BDRVNullState member int64_t length. Change these BlockdevOptionsFOO members to 'size'. Change BDRVNullState member length to uint64_t. This moves the implicit conversion to int64_t from null_file_open() to null_getlength(). No worse than before. blockdev-add and -blockdev now accept values between 2^63 and 2^64-1. They accept negative values as before, because that's how the QObject input visitor works for backward compatibility. Values above 2^63 are unlikely to actually work; the block subsystem isn't prepared for them. Again, no worse than before. Aside: we call the same thing @readahead-size in one place, and @readahead in another place. Sad. Signed-off-by: Markus Armbruster <arm...@redhat.com> --- block/null.c | 2 +- qapi/block-core.json | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/block/null.c b/block/null.c index 876f909..2ab0e70 100644 --- a/block/null.c +++ b/block/null.c @@ -20,7 +20,7 @@ #define NULL_OPT_ZEROES "read-zeroes" typedef struct { - int64_t length; + uint64_t length; int64_t latency_ns; bool read_zeroes; } BDRVNullState; diff --git a/qapi/block-core.json b/qapi/block-core.json index 64b84a5..3482f8c 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -2189,7 +2189,7 @@ # Since: 2.9 ## { 'struct': 'BlockdevOptionsNull', - 'data': { '*size': 'int', '*latency-ns': 'uint64' } } + 'data': { '*size': 'size', '*latency-ns': 'uint64' } } ## # @BlockdevOptionsVVFAT: @@ -2421,9 +2421,9 @@ '*pass-discard-snapshot': 'bool', '*pass-discard-other': 'bool', '*overlap-check': 'Qcow2OverlapChecks', - '*cache-size': 'int', - '*l2-cache-size': 'int', - '*refcount-cache-size': 'int', + '*cache-size': 'size', + '*l2-cache-size': 'size', + '*refcount-cache-size': 'size', '*cache-clean-interval': 'int', '*encrypt': 'BlockdevQcow2Encryption' } } @@ -2568,9 +2568,9 @@ { 'struct': 'BlockdevOptionsBlkdebug', 'data': { 'image': 'BlockdevRef', '*config': 'str', - '*align': 'int', '*max-transfer': 'int32', - '*opt-write-zero': 'int32', '*max-write-zero': 'int32', - '*opt-discard': 'int32', '*max-discard': 'int32', + '*align': 'size', '*max-transfer': 'size', + '*opt-write-zero': 'size', '*max-write-zero': 'size', + '*opt-discard': 'size', '*max-discard': 'size', '*inject-error': ['BlkdebugInjectErrorOptions'], '*set-state': ['BlkdebugSetStateOptions'] } } @@ -2862,8 +2862,8 @@ '*user': 'int', '*group': 'int', '*tcp-syn-count': 'int', - '*readahead-size': 'int', - '*page-cache-size': 'int', + '*readahead-size': 'size', + '*page-cache-size': 'size', '*debug': 'int' } } ## @@ -2893,7 +2893,7 @@ ## { 'struct': 'BlockdevOptionsCurlBase', 'data': { 'url': 'str', - '*readahead': 'int', + '*readahead': 'size', '*timeout': 'int', '*username': 'str', '*password-secret': 'str', @@ -3001,7 +3001,7 @@ ## { 'struct': 'BlockdevOptionsRaw', 'base': 'BlockdevOptionsGenericFormat', - 'data': { '*offset': 'int', '*size': 'int' } } + 'data': { '*offset': 'size', '*size': 'size' } } ## # @BlockdevOptionsVxHS: -- 2.7.5