block: Use uint64_t for BdrvTrackedRequest byte fields

This matches the types used for bytes in the rest parts of block layer.
In the case of bdrv_co_truncate, new_bytes can be the image size which
probably doesn't fit in a 32 bit int.

Signed-off-by: Fam Zheng <famz@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Fam Zheng 2018-07-10 14:31:18 +08:00 committed by Kevin Wolf
parent 0b9fd3f467
commit 22931a1533
2 changed files with 7 additions and 5 deletions

View File

@ -601,9 +601,11 @@ static void tracked_request_end(BdrvTrackedRequest *req)
static void tracked_request_begin(BdrvTrackedRequest *req, static void tracked_request_begin(BdrvTrackedRequest *req,
BlockDriverState *bs, BlockDriverState *bs,
int64_t offset, int64_t offset,
unsigned int bytes, uint64_t bytes,
enum BdrvTrackedRequestType type) enum BdrvTrackedRequestType type)
{ {
assert(bytes <= INT64_MAX && offset <= INT64_MAX - bytes);
*req = (BdrvTrackedRequest){ *req = (BdrvTrackedRequest){
.bs = bs, .bs = bs,
.offset = offset, .offset = offset,
@ -625,7 +627,7 @@ static void tracked_request_begin(BdrvTrackedRequest *req,
static void mark_request_serialising(BdrvTrackedRequest *req, uint64_t align) static void mark_request_serialising(BdrvTrackedRequest *req, uint64_t align)
{ {
int64_t overlap_offset = req->offset & ~(align - 1); int64_t overlap_offset = req->offset & ~(align - 1);
unsigned int overlap_bytes = ROUND_UP(req->offset + req->bytes, align) uint64_t overlap_bytes = ROUND_UP(req->offset + req->bytes, align)
- overlap_offset; - overlap_offset;
if (!req->serialising) { if (!req->serialising) {
@ -683,7 +685,7 @@ static int bdrv_get_cluster_size(BlockDriverState *bs)
} }
static bool tracked_request_overlaps(BdrvTrackedRequest *req, static bool tracked_request_overlaps(BdrvTrackedRequest *req,
int64_t offset, unsigned int bytes) int64_t offset, uint64_t bytes)
{ {
/* aaaa bbbb */ /* aaaa bbbb */
if (offset >= req->overlap_offset + req->overlap_bytes) { if (offset >= req->overlap_offset + req->overlap_bytes) {

View File

@ -69,12 +69,12 @@ enum BdrvTrackedRequestType {
typedef struct BdrvTrackedRequest { typedef struct BdrvTrackedRequest {
BlockDriverState *bs; BlockDriverState *bs;
int64_t offset; int64_t offset;
unsigned int bytes; uint64_t bytes;
enum BdrvTrackedRequestType type; enum BdrvTrackedRequestType type;
bool serialising; bool serialising;
int64_t overlap_offset; int64_t overlap_offset;
unsigned int overlap_bytes; uint64_t overlap_bytes;
QLIST_ENTRY(BdrvTrackedRequest) list; QLIST_ENTRY(BdrvTrackedRequest) list;
Coroutine *co; /* owner, used for deadlock detection */ Coroutine *co; /* owner, used for deadlock detection */