fio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Dmitry Fomichev <Dmitry.Fomichev@wdc.com>
To: "fio@vger.kernel.org" <fio@vger.kernel.org>,
	"axboe@kernel.dk" <axboe@kernel.dk>,
	Shinichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Cc: Damien Le Moal <Damien.LeMoal@wdc.com>,
	Niklas Cassel <Niklas.Cassel@wdc.com>
Subject: Re: [PATCH 3/4] engines/libzbc: Enable trim for libzbc I/O engine
Date: Tue, 3 Aug 2021 19:36:24 +0000	[thread overview]
Message-ID: <596b2e633684d7bdef9652854481096994b82149.camel@wdc.com> (raw)
In-Reply-To: <20210728104752.923770-4-shinichiro.kawasaki@wdc.com>

On Wed, 2021-07-28 at 19:47 +0900, Shin'ichiro Kawasaki wrote:
> The trim workload to zoned block devices is supported as zone reset,
> and
> this feature is available for I/O engines which support both zoned
> devices and trim workload. Libzbc I/O engine supports zoned but lacks
> trim workload support. To enable trim support with libzbc I/O engine,
> remove the check which inhibited trim from requests to libzbc I/O
> engine. Also set file open flags for trim same as write, and call
> zbd_do_io_u_trim() for trim I/O.
> 
> Of note is that libzbc I/O engine now can support trim to sequential
> write required zones, but still can not support os_trim() call and
> BLKDISCARD ioctl for the conventional zones. The trim I/Os to
> conventional zones are reported as an error.
> 
> Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
> ---
>  engines/libzbc.c | 16 ++++++++++------
>  1 file changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/engines/libzbc.c b/engines/libzbc.c
> index 7f2bc431..5b4c5e8e 100644
> --- a/engines/libzbc.c
> +++ b/engines/libzbc.c
> @@ -14,6 +14,7 @@
>  #include "fio.h"
>  #include "err.h"
>  #include "zbd_types.h"
> +#include "zbd.h"
>  
>  struct libzbc_data {
>         struct zbc_device       *zdev;
> @@ -63,7 +64,7 @@ static int libzbc_open_dev(struct thread_data *td,
> struct fio_file *f,
>                 return -EINVAL;
>         }
>  
> -       if (td_write(td)) {
> +       if (td_write(td) || td_trim(td)) {
>                 if (!read_only)
>                         flags |= O_RDWR;
>         } else if (td_read(td)) {
> @@ -71,10 +72,6 @@ static int libzbc_open_dev(struct thread_data *td,
> struct fio_file *f,
>                         flags |= O_RDWR;
>                 else
>                         flags |= O_RDONLY;
> -       } else if (td_trim(td)) {
> -               td_verror(td, EINVAL, "libzbc does not support
> trim");
> -               log_err("%s: libzbc does not support trim\n", f-
> >file_name);
> -               return -EINVAL;
>         }
>  
>         if (td->o.oatomic) {
> @@ -411,7 +408,14 @@ static enum fio_q_status libzbc_queue(struct
> thread_data *td, struct io_u *io_u)
>                 ret = zbc_flush(ld->zdev);
>                 if (ret)
>                         log_err("zbc_flush error %zd\n", ret);
> -       } else if (io_u->ddir != DDIR_TRIM) {
> +       } else if (io_u->ddir == DDIR_TRIM) {
> +               ret = zbd_do_io_u_trim(td, io_u);
> +               if (!ret) {
> +                       log_err("libzbc does not support trim to "
> +                               "conventional zones\n");
> +                       ret = EINVAL;

Wouldn't that be more appropriate to just call os_trim() here and avoid
this error? This way, any ZBD trim workload that succeeds without using
libzbc would also succeed with using this engine... not the case with
the code above.

> +               }
> +       } else {
>                 log_err("Unsupported operation %u\n", io_u->ddir);
>                 ret = -EINVAL;
>         }


  reply	other threads:[~2021-08-03 19:36 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-28 10:47 [PATCH 0/4] zbd: Support zone reset by trim Shin'ichiro Kawasaki
2021-07-28 10:47 ` [PATCH 1/4] zbd: Add min_bytes argument to zbd_find_zone() Shin'ichiro Kawasaki
2021-08-03 19:35   ` Dmitry Fomichev
2021-07-28 10:47 ` [PATCH 2/4] zbd: Support zone reset by trim Shin'ichiro Kawasaki
2021-08-03 19:36   ` Dmitry Fomichev
2021-08-04  6:32     ` Shinichiro Kawasaki
2021-08-04 19:23       ` Dmitry Fomichev
2021-07-28 10:47 ` [PATCH 3/4] engines/libzbc: Enable trim for libzbc I/O engine Shin'ichiro Kawasaki
2021-08-03 19:36   ` Dmitry Fomichev [this message]
2021-08-04  6:39     ` Shinichiro Kawasaki
2021-08-04 19:29       ` Dmitry Fomichev
2021-08-05  3:32         ` Shinichiro Kawasaki
2021-07-28 10:47 ` [PATCH 4/4] t/zbd: Add test #58 to test zone reset by trim workload Shin'ichiro Kawasaki
2021-08-03 19:36   ` Dmitry Fomichev
  -- strict thread matches above, loose matches on Subject: below --
2021-07-06  0:59 [PATCH 0/4] zbd: Support zone reset by trim Shin'ichiro Kawasaki
2021-07-06  0:59 ` [PATCH 3/4] engines/libzbc: Enable trim for libzbc I/O engine Shin'ichiro Kawasaki

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=596b2e633684d7bdef9652854481096994b82149.camel@wdc.com \
    --to=dmitry.fomichev@wdc.com \
    --cc=Damien.LeMoal@wdc.com \
    --cc=Niklas.Cassel@wdc.com \
    --cc=axboe@kernel.dk \
    --cc=fio@vger.kernel.org \
    --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 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).