block: Add more types for tracked request

We'll track more request types besides read and write, change the
boolean field to an enum.

Signed-off-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Message-id: 1447064214-29930-2-git-send-email-famz@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
master
Fam Zheng 2015-11-09 18:16:46 +08:00 committed by Kevin Wolf
parent 17e50a72a3
commit ebde595ce6
2 changed files with 14 additions and 5 deletions

View File

@ -348,13 +348,14 @@ 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, bool is_write) unsigned int bytes,
enum BdrvTrackedRequestType type)
{ {
*req = (BdrvTrackedRequest){ *req = (BdrvTrackedRequest){
.bs = bs, .bs = bs,
.offset = offset, .offset = offset,
.bytes = bytes, .bytes = bytes,
.is_write = is_write, .type = type,
.co = qemu_coroutine_self(), .co = qemu_coroutine_self(),
.serialising = false, .serialising = false,
.overlap_offset = offset, .overlap_offset = offset,
@ -971,7 +972,7 @@ static int coroutine_fn bdrv_co_do_preadv(BlockDriverState *bs,
bytes = ROUND_UP(bytes, align); bytes = ROUND_UP(bytes, align);
} }
tracked_request_begin(&req, bs, offset, bytes, false); tracked_request_begin(&req, bs, offset, bytes, BDRV_TRACKED_READ);
ret = bdrv_aligned_preadv(bs, &req, offset, bytes, align, ret = bdrv_aligned_preadv(bs, &req, offset, bytes, align,
use_local_qiov ? &local_qiov : qiov, use_local_qiov ? &local_qiov : qiov,
flags); flags);
@ -1292,7 +1293,7 @@ static int coroutine_fn bdrv_co_do_pwritev(BlockDriverState *bs,
* Pad qiov with the read parts and be sure to have a tracked request not * Pad qiov with the read parts and be sure to have a tracked request not
* only for bdrv_aligned_pwritev, but also for the reads of the RMW cycle. * only for bdrv_aligned_pwritev, but also for the reads of the RMW cycle.
*/ */
tracked_request_begin(&req, bs, offset, bytes, true); tracked_request_begin(&req, bs, offset, bytes, BDRV_TRACKED_WRITE);
if (!qiov) { if (!qiov) {
ret = bdrv_co_do_zero_pwritev(bs, offset, bytes, flags, &req); ret = bdrv_co_do_zero_pwritev(bs, offset, bytes, flags, &req);

View File

@ -60,11 +60,19 @@
#define BLOCK_PROBE_BUF_SIZE 512 #define BLOCK_PROBE_BUF_SIZE 512
enum BdrvTrackedRequestType {
BDRV_TRACKED_READ,
BDRV_TRACKED_WRITE,
BDRV_TRACKED_FLUSH,
BDRV_TRACKED_IOCTL,
BDRV_TRACKED_DISCARD,
};
typedef struct BdrvTrackedRequest { typedef struct BdrvTrackedRequest {
BlockDriverState *bs; BlockDriverState *bs;
int64_t offset; int64_t offset;
unsigned int bytes; unsigned int bytes;
bool is_write; enum BdrvTrackedRequestType type;
bool serialising; bool serialising;
int64_t overlap_offset; int64_t overlap_offset;