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

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

 



On 2021/06/07 18:08, Niklas Cassel wrote:
> 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.

Indeed. You are right.

> 
> 
> Kind regards,
> Niklas
> 


-- 
Damien Le Moal
Western Digital Research




[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