On 2020/06/18 2:27, Kanchan Joshi wrote:
> Introduce IOCB_CMD_ZONE_APPEND opcode for zone-append. On append
> completion zone-relative offset is returned using io_event->res2.
> 
> Signed-off-by: Kanchan Joshi <[email protected]>
> Signed-off-by: Arnav Dawn <[email protected]>
> Signed-off-by: SelvaKumar S <[email protected]>
> Signed-off-by: Nitesh Shetty <[email protected]>
> Signed-off-by: Javier Gonzalez <[email protected]>
> ---
>  fs/aio.c                     | 8 ++++++++
>  include/uapi/linux/aio_abi.h | 1 +
>  2 files changed, 9 insertions(+)
> 
> diff --git a/fs/aio.c b/fs/aio.c
> index 7ecddc2..8b10a55d 100644
> --- a/fs/aio.c
> +++ b/fs/aio.c
> @@ -1579,6 +1579,10 @@ static int aio_write(struct kiocb *req, const struct 
> iocb *iocb,
>                       __sb_start_write(file_inode(file)->i_sb, 
> SB_FREEZE_WRITE, true);
>                       __sb_writers_release(file_inode(file)->i_sb, 
> SB_FREEZE_WRITE);
>               }
> +#ifdef CONFIG_BLK_DEV_ZONED
> +             if (iocb->aio_lio_opcode == IOCB_CMD_ZONE_APPEND)
> +                     req->ki_flags |= IOCB_ZONE_APPEND;
> +#endif
>               req->ki_flags |= IOCB_WRITE;
>               aio_rw_done(req, call_write_iter(file, req, &iter));
>       }
> @@ -1846,6 +1850,10 @@ static int __io_submit_one(struct kioctx *ctx, const 
> struct iocb *iocb,
>               return aio_fsync(&req->fsync, iocb, true);
>       case IOCB_CMD_POLL:
>               return aio_poll(req, iocb);
> +#ifdef CONFIG_BLK_DEV_ZONED
> +     case IOCB_CMD_ZONE_APPEND:
> +             return aio_write(&req->rw, iocb, false, compat);
> +#endif
>       default:
>               pr_debug("invalid aio operation %d\n", iocb->aio_lio_opcode);
>               return -EINVAL;
> diff --git a/include/uapi/linux/aio_abi.h b/include/uapi/linux/aio_abi.h
> index 8387e0a..541d96a 100644
> --- a/include/uapi/linux/aio_abi.h
> +++ b/include/uapi/linux/aio_abi.h
> @@ -43,6 +43,7 @@ enum {
>       IOCB_CMD_NOOP = 6,
>       IOCB_CMD_PREADV = 7,
>       IOCB_CMD_PWRITEV = 8,
> +     IOCB_CMD_ZONE_APPEND = 9,
>  };
>  
>  /*
> 

No need for all the #ifdefs.

-- 
Damien Le Moal
Western Digital Research

Reply via email to