All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dmitry Fomichev <dmitry.fomichev@wdc.com>
To: Jens Axboe <axboe@kernel.dk>,
	fio@vger.kernel.org, Aravind Ramesh <aravind.ramesh@wdc.com>,
	Bart Van Assche <bvanassche@acm.org>,
	Naohiro Aota <naohiro.aota@wdc.com>,
	Niklas Cassel <niklas.cassel@wdc.com>
Cc: Damien Le Moal <damien.lemoal@wdc.com>,
	Shinichiro Kawasaki <shinichiro.kawasaki@wdc.com>,
	Dmitry Fomichev <dmitry.fomichev@wdc.com>
Subject: [PATCH v2 13/36] zbd: initialize min_zone and max_zone for all zone types
Date: Thu, 24 Dec 2020 11:11:56 +0900	[thread overview]
Message-ID: <20201224021219.189727-14-dmitry.fomichev@wdc.com> (raw)
In-Reply-To: <20201224021219.189727-1-dmitry.fomichev@wdc.com>

From: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>

The function zbd_verify_sizes() checks if the given I/O range includes
write pointer zones. When all zones in the I/O range are conventional,
it skips checks for size options and leaves min_zone and max_zone in
struct fio_file with zero values. These uninitialized min_zone and
max_zone fields trigger unexpected behaviors such as unset
sectors_with_data.

Fix this by moving min_zone and max_zone set up from zbd_verify_sizes()
to zbd_setup_files(). This allows for setting up the values regardless
of zone types in I/O range.

Bypass the assertion to ensure that max_zone is larger than min_zone if
all zones in the I/O range are conventional. In this case, io_size
can be smaller than zone size and, consequently, min_zone may become
the same as max_zone.

Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Signed-off-by: Dmitry Fomichev <dmitry.fomichev@wdc.com>
---
 zbd.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/zbd.c b/zbd.c
index 757e72d5..563f941b 100644
--- a/zbd.c
+++ b/zbd.c
@@ -324,10 +324,6 @@ static bool zbd_verify_sizes(void)
 					 (unsigned long long) new_end - f->file_offset);
 				f->io_size = new_end - f->file_offset;
 			}
-
-			f->min_zone = zbd_zone_idx(f, f->file_offset);
-			f->max_zone = zbd_zone_idx(f, f->file_offset + f->io_size);
-			assert(f->min_zone < f->max_zone);
 		}
 	}
 
@@ -680,6 +676,18 @@ int zbd_setup_files(struct thread_data *td)
 		if (!zbd)
 			continue;
 
+		f->min_zone = zbd_zone_idx(f, f->file_offset);
+		f->max_zone = zbd_zone_idx(f, f->file_offset + f->io_size);
+
+		/*
+		 * When all zones in the I/O range are conventional, io_size
+		 * can be smaller than zone size, making min_zone the same
+		 * as max_zone. This is why the assert below needs to be made
+		 * conditional.
+		 */
+		if (zbd_is_seq_job(f))
+			assert(f->min_zone < f->max_zone);
+
 		zbd->max_open_zones = zbd->max_open_zones ?: ZBD_MAX_OPEN_ZONES;
 
 		if (td->o.max_open_zones > 0 &&
-- 
2.28.0



  parent reply	other threads:[~2020-12-24  2:11 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-24  2:11 [PATCH v2 00/36] ZBD fixes and improvements Dmitry Fomichev
2020-12-24  2:11 ` [PATCH v2 01/36] zbd: return ENOMEM if zone buffer allocation fails Dmitry Fomichev
2020-12-24  2:11 ` [PATCH v2 02/36] zbd: use zbd_zone_nr() more actively in the code Dmitry Fomichev
2020-12-24  2:11 ` [PATCH v2 03/36] zbd: add get_zone() helper function Dmitry Fomichev
2020-12-24  2:11 ` [PATCH v2 04/36] zbd: introduce zone_unlock() Dmitry Fomichev
2020-12-24  2:11 ` [PATCH v2 05/36] zbd: engines/libzbc: don't fail on assert for offline zones Dmitry Fomichev
2020-12-24  2:11 ` [PATCH v2 06/36] zbd: remove dependency on zone type during i/o Dmitry Fomichev
2020-12-24  2:11 ` [PATCH v2 07/36] zbd: skip offline zones in zbd_convert_to_open_zone() Dmitry Fomichev
2020-12-24  2:11 ` [PATCH v2 08/36] zbd: avoid zone buffer overrun Dmitry Fomichev
2020-12-24  2:11 ` [PATCH v2 09/36] zbd: don't unlock zone mutex after verify replay Dmitry Fomichev
2020-12-24  2:11 ` [PATCH v2 10/36] zbd: do not lock conventional zones on I/O adjustment Dmitry Fomichev
2020-12-24  2:11 ` [PATCH v2 11/36] zbd: do not set zbd handlers for conventional zones Dmitry Fomichev
2020-12-24  2:11 ` [PATCH v2 12/36] zbd: count sectors with data for write pointer zones Dmitry Fomichev
2020-12-24  2:11 ` Dmitry Fomichev [this message]
2020-12-24  2:11 ` [PATCH v2 14/36] zbd: initialize sectors with data at start time Dmitry Fomichev
2020-12-24  2:11 ` [PATCH v2 15/36] zbd: use zone_lock() in zbd_process_swd() Dmitry Fomichev
2020-12-24  2:11 ` [PATCH v2 16/36] zbd: disable crossing from conventional to sequential zones Dmitry Fomichev
2020-12-24  2:12 ` [PATCH v2 17/36] zbd: don't log "zone nnnn is not open" message Dmitry Fomichev
2020-12-24  2:12 ` [PATCH v2 18/36] zbd: handle conventional start zone in zbd_convert_to_open_zone() Dmitry Fomichev
2020-12-24  2:12 ` [PATCH v2 19/36] zbd: improve replay range validation Dmitry Fomichev
2020-12-24  2:12 ` [PATCH v2 20/36] zbd: set thread errors in zbd_adjust_block() Dmitry Fomichev
2020-12-24  2:12 ` [PATCH v2 21/36] t/zbd: check for error in test #2 Dmitry Fomichev
2020-12-24  2:12 ` [PATCH v2 22/36] t/zbd: add run-tests-against-nullb script Dmitry Fomichev
2020-12-24  2:12 ` [PATCH v2 23/36] t/zbd: add -t option to run-tests-against-nullb Dmitry Fomichev
2020-12-24  2:12 ` [PATCH v2 24/36] t/zbd: skip tests when test prerequisites are not met Dmitry Fomichev
2020-12-24  2:12 ` [PATCH v2 25/36] t/zbd: skip tests that need too many sequential zones Dmitry Fomichev
2020-12-24  2:12 ` [PATCH v2 26/36] t/zbd: test that conventional zones are not locked during random i/o Dmitry Fomichev
2020-12-24  2:12 ` [PATCH v2 27/36] t/zbd: test that zone_reset_threshold calculation is correct Dmitry Fomichev
2020-12-24  2:12 ` [PATCH v2 28/36] t/zbd: test random I/O direction in all-conventional case Dmitry Fomichev
2020-12-24  2:12 ` [PATCH v2 29/36] t/zbd: fix wrong units in test case #37 Dmitry Fomichev
2020-12-24  2:12 ` [PATCH v2 30/36] t/zbd: add an option to bail on a failed test Dmitry Fomichev
2020-12-24  2:12 ` [PATCH v2 31/36] t/zbd: prevent test #31 from looping Dmitry Fomichev
2020-12-24  2:12 ` [PATCH v2 32/36] t/zbd: add checks for offline zone condition Dmitry Fomichev
2020-12-29  5:38   ` Shinichiro Kawasaki
2020-12-24  2:12 ` [PATCH v2 33/36] t/zbd: add test #54 to exercise ZBD verification Dmitry Fomichev
2020-12-29  5:42   ` Shinichiro Kawasaki
2021-01-04 23:58     ` Dmitry Fomichev
2020-12-24  2:12 ` [PATCH v2 34/36] t/zbd: show elapsed time in test-zbd-support Dmitry Fomichev
2020-12-24  2:12 ` [PATCH v2 35/36] t/zbd: increase timeout in test #48 Dmitry Fomichev
2020-12-24  2:12 ` [PATCH v2 36/36] t/zbd: avoid looping on invalid command line options Dmitry Fomichev

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=20201224021219.189727-14-dmitry.fomichev@wdc.com \
    --to=dmitry.fomichev@wdc.com \
    --cc=aravind.ramesh@wdc.com \
    --cc=axboe@kernel.dk \
    --cc=bvanassche@acm.org \
    --cc=damien.lemoal@wdc.com \
    --cc=fio@vger.kernel.org \
    --cc=naohiro.aota@wdc.com \
    --cc=niklas.cassel@wdc.com \
    --cc=shinichiro.kawasaki@wdc.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.