qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Anton Nefedov <anton.nefedov@virtuozzo.com>
To: "qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Cc: "qemu-block@nongnu.org" <qemu-block@nongnu.org>,
	"kwolf@redhat.com" <kwolf@redhat.com>,
	"mreitz@redhat.com" <mreitz@redhat.com>,
	"armbru@redhat.com" <armbru@redhat.com>,
	"jsnow@redhat.com" <jsnow@redhat.com>,
	"pbonzini@redhat.com" <pbonzini@redhat.com>,
	"famz@redhat.com" <famz@redhat.com>,
	"eblake@redhat.com" <eblake@redhat.com>,
	Denis Lunev <den@virtuozzo.com>,
	"berto@igalia.com" <berto@igalia.com>,
	Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
	Anton Nefedov <anton.nefedov@virtuozzo.com>
Subject: [Qemu-devel] [PATCH v5 3/9] block: add empty account cookie type
Date: Wed, 31 Oct 2018 11:34:48 +0000	[thread overview]
Message-ID: <20181031113418.29796-4-anton.nefedov@virtuozzo.com> (raw)
In-Reply-To: <20181031113418.29796-1-anton.nefedov@virtuozzo.com>

This adds some protection from accounting unitialized cookie.
That is, block_acct_failed/done without previous block_acct_start;
in that case, cookie probably holds values from previous operation.

(Note: it might also be unitialized holding garbage value and there is
 still "< BLOCK_MAX_IOTYPE" assertion for that.
 So block_acct_failed/done without previous block_acct_start should be used
 with caution.)

Currently this is particularly useful in ide code where it's hard to
keep track whether the request started accounting or not. For example,
trim requests do the accounting separately.

Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com>
---
 include/block/accounting.h | 1 +
 block/accounting.c         | 6 ++++++
 2 files changed, 7 insertions(+)

diff --git a/include/block/accounting.h b/include/block/accounting.h
index ba8b04d572..878b4c3581 100644
--- a/include/block/accounting.h
+++ b/include/block/accounting.h
@@ -33,6 +33,7 @@ typedef struct BlockAcctTimedStats BlockAcctTimedStats;
 typedef struct BlockAcctStats BlockAcctStats;
 
 enum BlockAcctType {
+    BLOCK_ACCT_NONE = 0,
     BLOCK_ACCT_READ,
     BLOCK_ACCT_WRITE,
     BLOCK_ACCT_FLUSH,
diff --git a/block/accounting.c b/block/accounting.c
index 70a3d9a426..8d41c8a83a 100644
--- a/block/accounting.c
+++ b/block/accounting.c
@@ -195,6 +195,10 @@ static void block_account_one_io(BlockAcctStats *stats, BlockAcctCookie *cookie,
 
     assert(cookie->type < BLOCK_MAX_IOTYPE);
 
+    if (cookie->type == BLOCK_ACCT_NONE) {
+        return;
+    }
+
     qemu_mutex_lock(&stats->lock);
 
     if (failed) {
@@ -217,6 +221,8 @@ static void block_account_one_io(BlockAcctStats *stats, BlockAcctCookie *cookie,
     }
 
     qemu_mutex_unlock(&stats->lock);
+
+    cookie->type = BLOCK_ACCT_NONE;
 }
 
 void block_acct_done(BlockAcctStats *stats, BlockAcctCookie *cookie)
-- 
2.17.1

  parent reply	other threads:[~2018-10-31 11:35 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-31 11:34 [Qemu-devel] [PATCH v5 0/9] discard blockstats Anton Nefedov
2018-10-31 11:34 ` [Qemu-devel] [PATCH v5 1/9] qapi: group BlockDeviceStats fields Anton Nefedov
2018-11-12 15:40   ` Alberto Garcia
2018-11-23 17:18   ` Vladimir Sementsov-Ogievskiy
2018-10-31 11:34 ` [Qemu-devel] [PATCH v5 2/9] qapi: add unmap to BlockDeviceStats Anton Nefedov
2018-10-31 11:34 ` Anton Nefedov [this message]
2018-11-23 16:04   ` [Qemu-devel] [PATCH v5 3/9] block: add empty account cookie type Vladimir Sementsov-Ogievskiy
2018-11-26 12:18     ` Anton Nefedov
2018-10-31 11:34 ` [Qemu-devel] [PATCH v5 4/9] ide: account UNMAP (TRIM) operations Anton Nefedov
2018-11-23 17:46   ` Vladimir Sementsov-Ogievskiy
2018-10-31 11:34 ` [Qemu-devel] [PATCH v5 5/9] scsi: store unmap offset and nb_sectors in request struct Anton Nefedov
2018-10-31 11:34 ` [Qemu-devel] [PATCH v5 6/9] scsi: move unmap error checking to the complete callback Anton Nefedov
2018-10-31 11:34 ` [Qemu-devel] [PATCH v5 7/9] scsi: account unmap operations Anton Nefedov
2018-11-23 18:25   ` Vladimir Sementsov-Ogievskiy
2018-11-26 12:20     ` Anton Nefedov
2018-10-31 11:35 ` [Qemu-devel] [PATCH v5 8/9] file-posix: account discard operations Anton Nefedov
2018-11-23 18:34   ` Vladimir Sementsov-Ogievskiy
2018-10-31 11:35 ` [Qemu-devel] [PATCH v5 9/9] qapi: query-blockstat: add driver specific file-posix stats Anton Nefedov
2018-11-23 19:21   ` Vladimir Sementsov-Ogievskiy
2018-11-26 12:55     ` Anton Nefedov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181031113418.29796-4-anton.nefedov@virtuozzo.com \
    --to=anton.nefedov@virtuozzo.com \
    --cc=armbru@redhat.com \
    --cc=berto@igalia.com \
    --cc=den@virtuozzo.com \
    --cc=eblake@redhat.com \
    --cc=famz@redhat.com \
    --cc=jsnow@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=vsementsov@virtuozzo.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).