f2fs: use inode_lock_shared instead of inode_lock in f2fs_seek_block()
authorzhangxirui <xirui.zhang@vivo.com>
Sat, 21 Oct 2023 12:19:07 +0000 (06:19 -0600)
committerJaegeuk Kim <jaegeuk@kernel.org>
Fri, 17 Nov 2023 17:30:53 +0000 (09:30 -0800)
inode_lock_shared() -> down_read(&inode->i_rwsem)
       inode_lock() -> down_write(&inode->i_rwsem)

Inode is not updated in f2fs_seek_block(), so there is no need
to hold write lock, use read lock for more efficiency.

Signed-off-by: zhangxirui <xirui.zhang@vivo.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/file.c

index e50363583f019a227ce3280ddb3ecd85760f8226..325dab01a29d2e00aaec3f20b31a207a851070b0 100644 (file)
@@ -418,7 +418,7 @@ static loff_t f2fs_seek_block(struct file *file, loff_t offset, int whence)
        loff_t isize;
        int err = 0;
 
-       inode_lock(inode);
+       inode_lock_shared(inode);
 
        isize = i_size_read(inode);
        if (offset >= isize)
@@ -483,10 +483,10 @@ static loff_t f2fs_seek_block(struct file *file, loff_t offset, int whence)
 found:
        if (whence == SEEK_HOLE && data_ofs > isize)
                data_ofs = isize;
-       inode_unlock(inode);
+       inode_unlock_shared(inode);
        return vfs_setpos(file, data_ofs, maxbytes);
 fail:
-       inode_unlock(inode);
+       inode_unlock_shared(inode);
        return -ENXIO;
 }