On Mon, Jan 25, 2021 at 03:30:50PM +0000, Alessio Balsini wrote:
> OverlayFS implements its own function to translate iocb flags into rw
> flags, so that they can be passed into another vfs call.
> With commit ce71bfea207b4 ("fs: align IOCB_* flags with RWF_* flags")
> Jens created a 1:1 matching between the iocb flags and rw flags,
> simplifying the conversion.
> 
> Reduce the OverlayFS code by making the flag conversion function generic
> and reusable.
> 
> Signed-off-by: Alessio Balsini <bals...@android.com>
> ---
>  fs/overlayfs/file.c | 23 +++++------------------
>  include/linux/fs.h  |  5 +++++
>  2 files changed, 10 insertions(+), 18 deletions(-)
> 
> diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c
> index bd9dd38347ae..56be2ffc5a14 100644
> --- a/fs/overlayfs/file.c
> +++ b/fs/overlayfs/file.c
> @@ -15,6 +15,8 @@
>  #include <linux/fs.h>
>  #include "overlayfs.h"
>  
> +#define OVL_IOCB_MASK (IOCB_DSYNC | IOCB_HIPRI | IOCB_NOWAIT | IOCB_SYNC)
> +
>  struct ovl_aio_req {
>       struct kiocb iocb;
>       struct kiocb *orig_iocb;
> @@ -236,22 +238,6 @@ static void ovl_file_accessed(struct file *file)
>       touch_atime(&file->f_path);
>  }
>  
> -static rwf_t ovl_iocb_to_rwf(int ifl)
> -{
> -     rwf_t flags = 0;
> -
> -     if (ifl & IOCB_NOWAIT)
> -             flags |= RWF_NOWAIT;
> -     if (ifl & IOCB_HIPRI)
> -             flags |= RWF_HIPRI;
> -     if (ifl & IOCB_DSYNC)
> -             flags |= RWF_DSYNC;
> -     if (ifl & IOCB_SYNC)
> -             flags |= RWF_SYNC;
> -
> -     return flags;
> -}
> -
>  static void ovl_aio_cleanup_handler(struct ovl_aio_req *aio_req)
>  {
>       struct kiocb *iocb = &aio_req->iocb;
> @@ -299,7 +285,8 @@ static ssize_t ovl_read_iter(struct kiocb *iocb, struct 
> iov_iter *iter)
>       old_cred = ovl_override_creds(file_inode(file)->i_sb);
>       if (is_sync_kiocb(iocb)) {
>               ret = vfs_iter_read(real.file, iter, &iocb->ki_pos,
> -                                 ovl_iocb_to_rwf(iocb->ki_flags));
> +                                 iocb_to_rw_flags(iocb->ki_flags,
> +                                                  OVL_IOCB_MASK));
>       } else {
>               struct ovl_aio_req *aio_req;
>  
> @@ -356,7 +343,7 @@ static ssize_t ovl_write_iter(struct kiocb *iocb, struct 
> iov_iter *iter)
>       if (is_sync_kiocb(iocb)) {
>               file_start_write(real.file);
>               ret = vfs_iter_write(real.file, iter, &iocb->ki_pos,
> -                                  ovl_iocb_to_rwf(ifl));
> +                                  iocb_to_rw_flags(ifl, OVL_IOCB_MASK));
>               file_end_write(real.file);
>               /* Update size */
>               ovl_copyattr(ovl_inode_real(inode), inode);
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index fd47deea7c17..647c35423545 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -3275,6 +3275,11 @@ static inline int kiocb_set_rw_flags(struct kiocb *ki, 
> rwf_t flags)
>       return 0;
>  }
>  
> +static inline rwf_t iocb_to_rw_flags(int ifl, int iocb_mask)
> +{
> +     return ifl & iocb_mask;
> +}
> +
>  static inline ino_t parent_ino(struct dentry *dentry)
>  {
>       ino_t res;
> -- 
> 2.30.0.280.ga3ce27912f-goog
> 

For some reason lkml.org and lore.kernel.org are not showing this change
as part of the thread.
Let's see if replying to the email fixes the indexing.

Regards,
Alessio

Reply via email to