Re: [PATCH] zbd: Support finishing zones on Android

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

 



On 7/6/23 06:29, Bart Van Assche wrote:
> BLKFINISHZONE is missing from older versions of the Android NDK header
> files. Hence, define BLKFINISHZONE if it has not been defined and detect
> at runtime whether or not the kernel supports finishing zones.
> 
> Cc: Damien Le Moal <dlemoal@xxxxxxxxxx>
> Cc: Shin'ichiro Kawasaki <shinichiro.kawasaki@xxxxxxx>
> Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx>

Late as Jens already applied the patch, but anyway, looks good to me.

Reviewed-by: Damien Le Moal <dlemoal@xxxxxxxxxx>

> ---
>  oslib/linux-blkzoned.c | 24 ++++++++++++------------
>  1 file changed, 12 insertions(+), 12 deletions(-)
> 
> diff --git a/oslib/linux-blkzoned.c b/oslib/linux-blkzoned.c
> index c3130d0e2a1b..722e09925b3d 100644
> --- a/oslib/linux-blkzoned.c
> +++ b/oslib/linux-blkzoned.c
> @@ -22,6 +22,9 @@
>  #include "zbd_types.h"
>  
>  #include <linux/blkzoned.h>
> +#ifndef BLKFINISHZONE
> +#define BLKFINISHZONE _IOW(0x12, 136, struct blk_zone_range)
> +#endif
>  
>  /*
>   * If the uapi headers installed on the system lacks zone capacity support,
> @@ -312,7 +315,6 @@ int blkzoned_reset_wp(struct thread_data *td, struct fio_file *f,
>  int blkzoned_finish_zone(struct thread_data *td, struct fio_file *f,
>  			 uint64_t offset, uint64_t length)
>  {
> -#ifdef BLKFINISHZONE
>  	struct blk_zone_range zr = {
>  		.sector         = offset >> 9,
>  		.nr_sectors     = length >> 9,
> @@ -327,21 +329,19 @@ int blkzoned_finish_zone(struct thread_data *td, struct fio_file *f,
>  			return -errno;
>  	}
>  
> -	if (ioctl(fd, BLKFINISHZONE, &zr) < 0)
> +	if (ioctl(fd, BLKFINISHZONE, &zr) < 0) {
>  		ret = -errno;
> +		/*
> +		 * Kernel versions older than 5.5 do not support BLKFINISHZONE
> +		 * and return the ENOTTY error code. These old kernels only
> +		 * support block devices that close zones automatically.
> +		 */
> +		if (ret == ENOTTY)
> +			ret = 0;
> +	}
>  
>  	if (f->fd < 0)
>  		close(fd);
>  
>  	return ret;
> -#else
> -	/*
> -	 * Kernel versions older than 5.5 does not support BLKFINISHZONE. These
> -	 * old kernels assumed zones are closed automatically at max_open_zones
> -	 * limit. Also they did not support max_active_zones limit. Then there
> -	 * was no need to finish zones to avoid errors caused by max_open_zones
> -	 * or max_active_zones. For those old versions, just do nothing.
> -	 */
> -	return 0;
> -#endif
>  }

-- 
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