mirror of https://github.com/proxmox/mirror_qemu
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
parent
17e50a72a3
commit
ebde595ce6
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue