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 <balsini@xxxxxxxxxxx> > --- > 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