Re: [PATCH 3/4] zbd: remove zbd_zoned_model ZBD_IGNORE

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Jun 05, 2021 at 12:48:31AM +0000, Damien Le Moal wrote:
> On 2021/06/04 21:18, Niklas Cassel wrote:
> > From: Niklas Cassel <niklas.cassel@xxxxxxx>
> > 
> > For a job with zonemode=zbd, we do not want any file to be ignored.
> > Each file's file type in that job should be supported by either zbd.c
> > or the ioengine. If not, we should return an error.
> > This way, ZBD_IGNORE becomes redundant and can be removed.
> > 
> > By removing ZBD_IGNORE, we know that all files belonging to a job that
> > has zonemode=zbd set, will either be a zoned block device, or emulate
> > a zoned block device.
> > 
> > This means that for jobs that have zonemode=zbd, f->zbd_info will always
> > be non-NULL. This will make the zbd code slightly easier to reason about
> > and to maintain.
> > 
> > When removing zbd_zoned_model ZBD_IGNORE, define the new first enum value
> > as 0x1, so that we avoid potential ABI problems with existing binaries.
> > 
> > Signed-off-by: Niklas Cassel <niklas.cassel@xxxxxxx>
> > ---
> >  engines/libzbc.c            | 3 +--
> >  engines/skeleton_external.c | 1 -
> >  oslib/linux-blkzoned.c      | 3 +--
> >  zbd.c                       | 3 +--
> >  zbd_types.h                 | 7 +++----
> >  5 files changed, 6 insertions(+), 11 deletions(-)
> > 
> > diff --git a/engines/libzbc.c b/engines/libzbc.c
> > index 3dde93db..c3551bec 100644
> > --- a/engines/libzbc.c
> > +++ b/engines/libzbc.c
> > @@ -181,8 +181,7 @@ static int libzbc_get_zoned_model(struct thread_data *td, struct fio_file *f,
> >  	int ret;
> >  
> >  	if (f->filetype != FIO_TYPE_BLOCK && f->filetype != FIO_TYPE_CHAR) {
> > -		*model = ZBD_IGNORE;
> > -		return 0;
> > +		return -EINVAL;
> >  	}
> 
> Please drop the curly brackets.
> 
> >  
> >  	ret = libzbc_open_dev(td, f, &ld);
> > diff --git a/engines/skeleton_external.c b/engines/skeleton_external.c
> > index c79b6f11..cff83a10 100644
> > --- a/engines/skeleton_external.c
> > +++ b/engines/skeleton_external.c
> > @@ -156,7 +156,6 @@ static int fio_skeleton_close(struct thread_data *td, struct fio_file *f)
> >  /*
> >   * Hook for getting the zoned model of a zoned block device for zonemode=zbd.
> >   * The zoned model can be one of (see zbd_types.h):
> > - * - ZBD_IGNORE: skip regular files
> >   * - ZBD_NONE: regular block device (zone emulation will be used)
> >   * - ZBD_HOST_AWARE: host aware zoned block device
> >   * - ZBD_HOST_MANAGED: host managed zoned block device
> > diff --git a/oslib/linux-blkzoned.c b/oslib/linux-blkzoned.c
> > index 6f89ec6f..8cb9c53a 100644
> > --- a/oslib/linux-blkzoned.c
> > +++ b/oslib/linux-blkzoned.c
> > @@ -141,8 +141,7 @@ int blkzoned_get_zoned_model(struct thread_data *td, struct fio_file *f,
> >  	char *model_str = NULL;
> >  
> >  	if (f->filetype != FIO_TYPE_BLOCK) {
> > -		*model = ZBD_IGNORE;
> > -		return 0;
> > +		return -EINVAL;
> >  	}
> 
> Please drop the curly brackets.
> 
> Also, missing in this patch: zbd_verify_sizes() has a "if (!f->zbd_info)" check
> which I think should be changed into an assert.

Hello Damien,

zbd_verify_sizes()
does a:

	for_each_td() {
		for_each_file() {
			if (!f->zbd_info)
				continue;		
		}
	}

Considering that this is a for_each_td(), which will iterate over all
threads in the job file, I disagree with this comment.

A job file can have one job with
zonemode=zbd

and in the same job file, another job without zonemode=zbd, which targets
a completely different device, so I do think that we need to keep the
continue here.


Kind regards,
Niklas



[Index of Archives]     [Linux Kernel]     [Linux SCSI]     [Linux IDE]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux