From 32845f85c3a021d83bcefe23e4c9b620d6ff2221 Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Thu, 13 Nov 2025 15:28:41 -0800 Subject: [PATCH] Remove .aio_read and .aio_write methods. This removes two large duplicate code blocks. Signed-off-by: Auke Kok --- kmod/src/Makefile.kernelcompat | 11 --- kmod/src/data.c | 7 -- kmod/src/file.c | 128 --------------------------------- kmod/src/file.h | 7 -- 4 files changed, 153 deletions(-) diff --git a/kmod/src/Makefile.kernelcompat b/kmod/src/Makefile.kernelcompat index a203f3fd..f6ab5099 100644 --- a/kmod/src/Makefile.kernelcompat +++ b/kmod/src/Makefile.kernelcompat @@ -6,17 +6,6 @@ ccflags-y += -include $(src)/kernelcompat.h -# -# v4.0-rc7-1743-g8436318205b9 -# -# .aio_read and .aio_write no longer exist. All reads and writes now use the -# .read_iter and .write_iter methods, or must implement .read and .write (which -# we don't). -# -ifneq (,$(shell grep 'ssize_t.*aio_read' include/linux/fs.h)) -ccflags-y += -DKC_LINUX_HAVE_FOP_AIO_READ=1 -endif - # # rhel7 has a custom inode_operations_wrapper struct that is discarded # entirely in favor of upstream structure since rhel8. diff --git a/kmod/src/data.c b/kmod/src/data.c index 6afa224b..c0cc6591 100644 --- a/kmod/src/data.c +++ b/kmod/src/data.c @@ -2261,17 +2261,10 @@ const struct address_space_operations scoutfs_file_aops = { }; const struct file_operations scoutfs_file_fops = { -#ifdef KC_LINUX_HAVE_FOP_AIO_READ - .read = do_sync_read, - .write = do_sync_write, - .aio_read = scoutfs_file_aio_read, - .aio_write = scoutfs_file_aio_write, -#else .read_iter = scoutfs_file_read_iter, .write_iter = scoutfs_file_write_iter, .splice_read = generic_file_splice_read, .splice_write = iter_file_splice_write, -#endif .mmap = scoutfs_file_mmap, .unlocked_ioctl = scoutfs_ioctl, .fsync = scoutfs_file_fsync, diff --git a/kmod/src/file.c b/kmod/src/file.c index 15158a2b..0f2e7b83 100644 --- a/kmod/src/file.c +++ b/kmod/src/file.c @@ -30,133 +30,6 @@ #include "omap.h" #include "quota.h" -#ifdef KC_LINUX_HAVE_FOP_AIO_READ -/* - * Start a high level file read. We check for offline extents in the - * read region here so that we only check the extents once. We use the - * dio count to prevent releasing while we're reading after we've - * checked the extents. - */ -ssize_t scoutfs_file_aio_read(struct kiocb *iocb, const struct iovec *iov, - unsigned long nr_segs, loff_t pos) -{ - struct file *file = iocb->ki_filp; - struct inode *inode = file_inode(file); - struct scoutfs_inode_info *si = SCOUTFS_I(inode); - struct super_block *sb = inode->i_sb; - struct scoutfs_lock *scoutfs_inode_lock = NULL; - SCOUTFS_DECLARE_PER_TASK_ENTRY(pt_ent); - DECLARE_DATA_WAIT(dw); - int ret; - -retry: - /* protect checked extents from release */ - inode_lock(inode); - atomic_inc(&inode->i_dio_count); - inode_unlock(inode); - - ret = scoutfs_lock_inode(sb, SCOUTFS_LOCK_READ, - SCOUTFS_LKF_REFRESH_INODE, inode, &scoutfs_inode_lock); - if (ret) - goto out; - - if (scoutfs_per_task_add_excl(&si->pt_data_lock, &pt_ent, scoutfs_inode_lock)) { - ret = scoutfs_data_wait_check_iov(inode, iov, nr_segs, pos, - SEF_OFFLINE, - SCOUTFS_IOC_DWO_READ, - &dw, scoutfs_inode_lock); - if (ret != 0) - goto out; - } else { - WARN_ON_ONCE(true); - } - - ret = generic_file_aio_read(iocb, iov, nr_segs, pos); - -out: - inode_dio_done(inode); - scoutfs_per_task_del(&si->pt_data_lock, &pt_ent); - scoutfs_unlock(sb, scoutfs_inode_lock, SCOUTFS_LOCK_READ); - - if (scoutfs_data_wait_found(&dw)) { - ret = scoutfs_data_wait(inode, &dw); - if (ret == 0) - goto retry; - } - - return ret; -} - -ssize_t scoutfs_file_aio_write(struct kiocb *iocb, const struct iovec *iov, - unsigned long nr_segs, loff_t pos) -{ - struct file *file = iocb->ki_filp; - struct inode *inode = file_inode(file); - struct scoutfs_inode_info *si = SCOUTFS_I(inode); - struct super_block *sb = inode->i_sb; - struct scoutfs_lock *scoutfs_inode_lock = NULL; - SCOUTFS_DECLARE_PER_TASK_ENTRY(pt_ent); - DECLARE_DATA_WAIT(dw); - int ret; - - if (iocb->ki_left == 0) /* Does this even happen? */ - return 0; - -retry: - inode_lock(inode); - ret = scoutfs_lock_inode(sb, SCOUTFS_LOCK_WRITE, - SCOUTFS_LKF_REFRESH_INODE, inode, &scoutfs_inode_lock); - if (ret) - goto out; - - ret = scoutfs_inode_check_retention(inode); - if (ret < 0) - goto out; - - ret = scoutfs_complete_truncate(inode, scoutfs_inode_lock); - if (ret) - goto out; - - if (scoutfs_per_task_add_excl(&si->pt_data_lock, &pt_ent, scoutfs_inode_lock)) { - /* data_version is per inode, whole file must be online */ - ret = scoutfs_data_wait_check(inode, 0, i_size_read(inode), - SEF_OFFLINE, - SCOUTFS_IOC_DWO_WRITE, - &dw, scoutfs_inode_lock); - if (ret != 0) - goto out; - } - - ret = scoutfs_quota_check_data(sb, inode); - if (ret) - goto out; - - /* XXX: remove SUID bit */ - - ret = __generic_file_aio_write(iocb, iov, nr_segs, &iocb->ki_pos); - -out: - scoutfs_per_task_del(&si->pt_data_lock, &pt_ent); - scoutfs_unlock(sb, scoutfs_inode_lock, SCOUTFS_LOCK_WRITE); - inode_unlock(inode); - - if (scoutfs_data_wait_found(&dw)) { - ret = scoutfs_data_wait(inode, &dw); - if (ret == 0) - goto retry; - } - - if (ret > 0 || ret == -EIOCBQUEUED) { - ssize_t err; - - err = generic_write_sync(file, pos, ret); - if (err < 0 && ret > 0) - ret = err; - } - - return ret; -} -#else ssize_t scoutfs_file_read_iter(struct kiocb *iocb, struct iov_iter *to) { struct file *file = iocb->ki_filp; @@ -265,7 +138,6 @@ out: return ret; } -#endif int scoutfs_permission(KC_VFS_NS_DEF struct inode *inode, int mask) diff --git a/kmod/src/file.h b/kmod/src/file.h index 1009b11f..3b6651cc 100644 --- a/kmod/src/file.h +++ b/kmod/src/file.h @@ -1,15 +1,8 @@ #ifndef _SCOUTFS_FILE_H_ #define _SCOUTFS_FILE_H_ -#ifdef KC_LINUX_HAVE_FOP_AIO_READ -ssize_t scoutfs_file_aio_read(struct kiocb *iocb, const struct iovec *iov, - unsigned long nr_segs, loff_t pos); -ssize_t scoutfs_file_aio_write(struct kiocb *iocb, const struct iovec *iov, - unsigned long nr_segs, loff_t pos); -#else ssize_t scoutfs_file_read_iter(struct kiocb *, struct iov_iter *); ssize_t scoutfs_file_write_iter(struct kiocb *, struct iov_iter *); -#endif int scoutfs_permission(KC_VFS_NS_DEF struct inode *inode, int mask); loff_t scoutfs_file_llseek(struct file *file, loff_t offset, int whence);