All of lore.kernel.org
 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 v6 3/9] block: add empty account cookie type
Date: Fri, 30 Nov 2018 14:47:20 +0000	[thread overview]
Message-ID: <20181130144705.77454-4-anton.nefedov@virtuozzo.com> (raw)
In-Reply-To: <20181130144705.77454-1-anton.nefedov@virtuozzo.com>

This adds some protection from accounting uninitialized 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 uninitialized 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-11-30 14:47 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-30 14:47 [Qemu-devel] [PATCH v6 0/9] discard blockstats Anton Nefedov
2018-11-30 14:47 ` [Qemu-devel] [PATCH v6 1/9] qapi: group BlockDeviceStats fields Anton Nefedov
2018-11-30 14:47 ` [Qemu-devel] [PATCH v6 2/9] qapi: add unmap to BlockDeviceStats Anton Nefedov
2018-11-30 14:47 ` Anton Nefedov [this message]
2018-11-30 14:47 ` [Qemu-devel] [PATCH v6 4/9] ide: account UNMAP (TRIM) operations Anton Nefedov
2018-11-30 14:47 ` [Qemu-devel] [PATCH v6 5/9] scsi: store unmap offset and nb_sectors in request struct Anton Nefedov
2018-11-30 14:47 ` [Qemu-devel] [PATCH v6 6/9] scsi: move unmap error checking to the complete callback Anton Nefedov
2018-11-30 14:47 ` [Qemu-devel] [PATCH v6 7/9] scsi: account unmap operations Anton Nefedov
2018-11-30 14:47 ` [Qemu-devel] [PATCH v6 8/9] file-posix: account discard operations Anton Nefedov
2018-11-30 14:47 ` [Qemu-devel] [PATCH v6 9/9] qapi: query-blockstat: add driver specific file-posix stats Anton Nefedov
2018-12-03 14:24   ` Vladimir Sementsov-Ogievskiy
2018-12-13 12:20   ` Markus Armbruster
2018-12-13 15:20     ` Anton Nefedov
2018-12-13 16:05       ` Markus Armbruster
2019-02-21 12:36       ` Markus Armbruster
2019-01-14 13:16 ` [Qemu-devel] [PATCH v6 0/9] discard blockstats Anton Nefedov
2019-02-21  8:02   ` 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=20181130144705.77454-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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.