From 04f5b343f9987f0cf67509c2a76ddf7ef46288e5 Mon Sep 17 00:00:00 2001 From: Ilya Dryomov Date: Fri, 1 Feb 2019 10:35:33 +0100 Subject: [PATCH] qa: update krbd tests for zeroout Discard no longer guarantees zeroing, use BLKZEROOUT and "fallocate -z" instead (blkdiscard(8) in xenial doesn't support -z). Signed-off-by: Ilya Dryomov --- ...e_object_discard.t => krbd_whole_object_zeroout.t} | 8 ++++---- ...ct_discard.yaml => krbd_whole_object_zeroout.yaml} | 2 +- src/test/librbd/fsx.cc | 11 +++++++---- 3 files changed, 12 insertions(+), 9 deletions(-) rename qa/rbd/{krbd_whole_object_discard.t => krbd_whole_object_zeroout.t} (96%) rename qa/suites/krbd/basic/tasks/{krbd_whole_object_discard.yaml => krbd_whole_object_zeroout.yaml} (50%) diff --git a/qa/rbd/krbd_whole_object_discard.t b/qa/rbd/krbd_whole_object_zeroout.t similarity index 96% rename from qa/rbd/krbd_whole_object_discard.t rename to qa/rbd/krbd_whole_object_zeroout.t index f5276074fcb..3530f93e600 100644 --- a/qa/rbd/krbd_whole_object_discard.t +++ b/qa/rbd/krbd_whole_object_zeroout.t @@ -21,7 +21,7 @@ cloneimg1: 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd * c800000 - $ blkdiscard -l 100M $DEV + $ fallocate -z -l 100M $DEV $ hexdump $DEV 0000000 0000 0000 0000 0000 0000 0000 0000 0000 * @@ -50,7 +50,7 @@ min((100M % 28M) / 512K, 7) = 7 objects in the last object set 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd * c800000 - $ blkdiscard -l 100M $DEV + $ fallocate -z -l 100M $DEV $ hexdump $DEV 0000000 0000 0000 0000 0000 0000 0000 0000 0000 * @@ -79,7 +79,7 @@ min((100M % 92M) / 512K, 23) = 16 objects in the last object set 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd * c800000 - $ blkdiscard -l 100M $DEV + $ fallocate -z -l 100M $DEV $ hexdump $DEV 0000000 0000 0000 0000 0000 0000 0000 0000 0000 * @@ -108,7 +108,7 @@ min((100M % 260M) / 512K, 65) = 65 objects in the last object set 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd * c800000 - $ blkdiscard -l 100M $DEV + $ fallocate -z -l 100M $DEV $ hexdump $DEV 0000000 0000 0000 0000 0000 0000 0000 0000 0000 * diff --git a/qa/suites/krbd/basic/tasks/krbd_whole_object_discard.yaml b/qa/suites/krbd/basic/tasks/krbd_whole_object_zeroout.yaml similarity index 50% rename from qa/suites/krbd/basic/tasks/krbd_whole_object_discard.yaml rename to qa/suites/krbd/basic/tasks/krbd_whole_object_zeroout.yaml index 9c558a3cd2a..3b0ff8d1efb 100644 --- a/qa/suites/krbd/basic/tasks/krbd_whole_object_discard.yaml +++ b/qa/suites/krbd/basic/tasks/krbd_whole_object_zeroout.yaml @@ -2,4 +2,4 @@ tasks: - cram: clients: client.0: - - qa/rbd/krbd_whole_object_discard.t + - qa/rbd/krbd_whole_object_zeroout.t diff --git a/src/test/librbd/fsx.cc b/src/test/librbd/fsx.cc index cc95976659b..e0b40937d31 100644 --- a/src/test/librbd/fsx.cc +++ b/src/test/librbd/fsx.cc @@ -1090,7 +1090,7 @@ krbd_discard(struct rbd_ctx *ctx, uint64_t off, uint64_t len) int ret; /* - * BLKDISCARD goes straight to disk and doesn't do anything + * BLKZEROOUT goes straight to disk and doesn't do anything * about dirty buffers. This means we need to flush so that * * write 0..3M @@ -1104,19 +1104,22 @@ krbd_discard(struct rbd_ctx *ctx, uint64_t off, uint64_t len) * * returns "data 0000 data" rather than "data data data" in * case 1..2M was cached. + * + * Note: These cache coherency issues are supposed to be fixed + * in recent kernels. */ ret = __krbd_flush(ctx, true); if (ret < 0) return ret; /* - * off and len must be 512-byte aligned, otherwise BLKDISCARD + * off and len must be 512-byte aligned, otherwise BLKZEROOUT * will fail with -EINVAL. This means that -K (enable krbd * mode) requires -h 512 or similar. */ - if (ioctl(ctx->krbd_fd, BLKDISCARD, &range) < 0) { + if (ioctl(ctx->krbd_fd, BLKZEROOUT, &range) < 0) { ret = -errno; - prt("BLKDISCARD(%llu, %llu) failed\n", off, len); + prt("BLKZEROOUT(%llu, %llu) failed\n", off, len); return ret; } -- 2.39.5