From dac3f056a5ac350f0128973c5efcb6f217fab2ee Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Tue, 9 May 2023 15:47:19 -0400 Subject: [PATCH] inode->i_mutex has been replaced with inode->i_rwsem. Since v4.6-rc3-27-g9902af79c01a, inode->i_mutex has been replaced with ->i_rwsem. However, long since whenever, inode_lock() and related functions already worked as intended and provided fully exclusive locking to the inode. To avoid a name clash on pre-rhel8 kernels, we have to rename a stack variable in `src/file.c`. Signed-off-by: Auke Kok --- kmod/src/data.c | 12 ++++++------ kmod/src/file.c | 30 +++++++++++++++--------------- kmod/src/inode.c | 4 ++-- kmod/src/ioctl.c | 16 ++++++++-------- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/kmod/src/data.c b/kmod/src/data.c index c93d7cf8..54009404 100644 --- a/kmod/src/data.c +++ b/kmod/src/data.c @@ -307,7 +307,7 @@ int scoutfs_data_truncate_items(struct super_block *sb, struct inode *inode, LIST_HEAD(ind_locks); s64 ret = 0; - WARN_ON_ONCE(inode && !mutex_is_locked(&inode->i_mutex)); + WARN_ON_ONCE(inode && !inode_is_locked(inode)); /* clamp last to the last possible block? */ if (last > SCOUTFS_BLOCK_SM_MAX) @@ -558,7 +558,7 @@ static int scoutfs_get_block(struct inode *inode, sector_t iblock, u64 offset; int ret; - WARN_ON_ONCE(create && !mutex_is_locked(&inode->i_mutex)); + WARN_ON_ONCE(create && !inode_is_locked(inode)); /* make sure caller holds a cluster lock */ lock = scoutfs_per_task_get(&si->pt_data_lock); @@ -1057,7 +1057,7 @@ long scoutfs_fallocate(struct file *file, int mode, loff_t offset, loff_t len) goto out; } - mutex_lock(&inode->i_mutex); + inode_lock(inode); ret = scoutfs_lock_inode(sb, SCOUTFS_LOCK_WRITE, SCOUTFS_LKF_REFRESH_INODE, inode, &lock); @@ -1118,7 +1118,7 @@ out_extent: up_write(&si->extent_sem); out_mutex: scoutfs_unlock(sb, lock, SCOUTFS_LOCK_WRITE); - mutex_unlock(&inode->i_mutex); + inode_unlock(inode); out: trace_scoutfs_data_fallocate(sb, ino, mode, offset, len, ret); @@ -1529,7 +1529,7 @@ int scoutfs_data_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, if (ret) goto out; - mutex_lock(&inode->i_mutex); + inode_lock(inode); down_read(&si->extent_sem); ret = scoutfs_lock_inode(sb, SCOUTFS_LOCK_READ, 0, inode, &lock); @@ -1583,7 +1583,7 @@ int scoutfs_data_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, unlock: scoutfs_unlock(sb, lock, SCOUTFS_LOCK_READ); up_read(&si->extent_sem); - mutex_unlock(&inode->i_mutex); + inode_unlock(inode); out: if (ret == 1) diff --git a/kmod/src/file.c b/kmod/src/file.c index 586d77fd..08058592 100644 --- a/kmod/src/file.c +++ b/kmod/src/file.c @@ -42,27 +42,27 @@ ssize_t scoutfs_file_aio_read(struct kiocb *iocb, const struct iovec *iov, struct inode *inode = file_inode(file); struct scoutfs_inode_info *si = SCOUTFS_I(inode); struct super_block *sb = inode->i_sb; - struct scoutfs_lock *inode_lock = NULL; + 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 */ - mutex_lock(&inode->i_mutex); + inode_lock(inode); atomic_inc(&inode->i_dio_count); - mutex_unlock(&inode->i_mutex); + inode_unlock(inode); ret = scoutfs_lock_inode(sb, SCOUTFS_LOCK_READ, - SCOUTFS_LKF_REFRESH_INODE, inode, &inode_lock); + SCOUTFS_LKF_REFRESH_INODE, inode, &scoutfs_inode_lock); if (ret) goto out; - if (scoutfs_per_task_add_excl(&si->pt_data_lock, &pt_ent, inode_lock)) { + 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, inode_lock); + &dw, scoutfs_inode_lock); if (ret != 0) goto out; } else { @@ -74,7 +74,7 @@ retry: out: inode_dio_done(inode); scoutfs_per_task_del(&si->pt_data_lock, &pt_ent); - scoutfs_unlock(sb, inode_lock, SCOUTFS_LOCK_READ); + scoutfs_unlock(sb, scoutfs_inode_lock, SCOUTFS_LOCK_READ); if (scoutfs_data_wait_found(&dw)) { ret = scoutfs_data_wait(inode, &dw); @@ -92,7 +92,7 @@ ssize_t scoutfs_file_aio_write(struct kiocb *iocb, const struct iovec *iov, struct inode *inode = file_inode(file); struct scoutfs_inode_info *si = SCOUTFS_I(inode); struct super_block *sb = inode->i_sb; - struct scoutfs_lock *inode_lock = NULL; + struct scoutfs_lock *scoutfs_inode_lock = NULL; SCOUTFS_DECLARE_PER_TASK_ENTRY(pt_ent); DECLARE_DATA_WAIT(dw); int ret; @@ -101,22 +101,22 @@ ssize_t scoutfs_file_aio_write(struct kiocb *iocb, const struct iovec *iov, return 0; retry: - mutex_lock(&inode->i_mutex); + inode_lock(inode); ret = scoutfs_lock_inode(sb, SCOUTFS_LOCK_WRITE, - SCOUTFS_LKF_REFRESH_INODE, inode, &inode_lock); + SCOUTFS_LKF_REFRESH_INODE, inode, &scoutfs_inode_lock); if (ret) goto out; - ret = scoutfs_complete_truncate(inode, inode_lock); + ret = scoutfs_complete_truncate(inode, scoutfs_inode_lock); if (ret) goto out; - if (scoutfs_per_task_add_excl(&si->pt_data_lock, &pt_ent, inode_lock)) { + 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, inode_lock); + &dw, scoutfs_inode_lock); if (ret != 0) goto out; } @@ -127,8 +127,8 @@ retry: out: scoutfs_per_task_del(&si->pt_data_lock, &pt_ent); - scoutfs_unlock(sb, inode_lock, SCOUTFS_LOCK_WRITE); - mutex_unlock(&inode->i_mutex); + scoutfs_unlock(sb, scoutfs_inode_lock, SCOUTFS_LOCK_WRITE); + inode_unlock(inode); if (scoutfs_data_wait_found(&dw)) { ret = scoutfs_data_wait(inode, &dw); diff --git a/kmod/src/inode.c b/kmod/src/inode.c index 6741bda7..0149602a 100644 --- a/kmod/src/inode.c +++ b/kmod/src/inode.c @@ -496,9 +496,9 @@ retry: scoutfs_unlock(sb, lock, SCOUTFS_LOCK_WRITE); /* XXX callee locks instead? */ - mutex_unlock(&inode->i_mutex); + inode_unlock(inode); ret = scoutfs_data_wait(inode, &dw); - mutex_lock(&inode->i_mutex); + inode_lock(inode); if (ret == 0) goto retry; diff --git a/kmod/src/ioctl.c b/kmod/src/ioctl.c index 3bc9c546..964db6f4 100644 --- a/kmod/src/ioctl.c +++ b/kmod/src/ioctl.c @@ -302,7 +302,7 @@ static long scoutfs_ioc_release(struct file *file, unsigned long arg) if (ret) return ret; - mutex_lock(&inode->i_mutex); + inode_lock(inode); ret = scoutfs_lock_inode(sb, SCOUTFS_LOCK_WRITE, SCOUTFS_LKF_REFRESH_INODE, inode, &lock); @@ -351,7 +351,7 @@ static long scoutfs_ioc_release(struct file *file, unsigned long arg) out: scoutfs_unlock(sb, lock, SCOUTFS_LOCK_WRITE); - mutex_unlock(&inode->i_mutex); + inode_unlock(inode); mnt_drop_write_file(file); trace_scoutfs_ioc_release_ret(sb, scoutfs_ino(inode), ret); @@ -393,7 +393,7 @@ static long scoutfs_ioc_data_wait_err(struct file *file, unsigned long arg) goto out; } - mutex_lock(&inode->i_mutex); + inode_lock(inode); ret = scoutfs_lock_inode(sb, SCOUTFS_LOCK_READ, SCOUTFS_LKF_REFRESH_INODE, inode, &lock); @@ -411,7 +411,7 @@ static long scoutfs_ioc_data_wait_err(struct file *file, unsigned long arg) scoutfs_unlock(sb, lock, SCOUTFS_LOCK_READ); unlock: - mutex_unlock(&inode->i_mutex); + inode_unlock(inode); iput(inode); out: return ret; @@ -489,7 +489,7 @@ static long scoutfs_ioc_stage(struct file *file, unsigned long arg) if (ret) return ret; - mutex_lock(&inode->i_mutex); + inode_lock(inode); ret = scoutfs_lock_inode(sb, SCOUTFS_LOCK_WRITE, SCOUTFS_LKF_REFRESH_INODE, inode, &lock); @@ -533,7 +533,7 @@ static long scoutfs_ioc_stage(struct file *file, unsigned long arg) out: scoutfs_per_task_del(&si->pt_data_lock, &pt_ent); scoutfs_unlock(sb, lock, SCOUTFS_LOCK_WRITE); - mutex_unlock(&inode->i_mutex); + inode_unlock(inode); mnt_drop_write_file(file); trace_scoutfs_ioc_stage_ret(sb, scoutfs_ino(inode), ret); @@ -652,7 +652,7 @@ static long scoutfs_ioc_setattr_more(struct file *file, unsigned long arg) if (ret) goto out; - mutex_lock(&inode->i_mutex); + inode_lock(inode); ret = scoutfs_lock_inode(sb, SCOUTFS_LOCK_WRITE, SCOUTFS_LKF_REFRESH_INODE, inode, &lock); @@ -696,7 +696,7 @@ static long scoutfs_ioc_setattr_more(struct file *file, unsigned long arg) unlock: scoutfs_inode_index_unlock(sb, &ind_locks); scoutfs_unlock(sb, lock, SCOUTFS_LOCK_WRITE); - mutex_unlock(&inode->i_mutex); + inode_unlock(inode); mnt_drop_write_file(file); out: