linux-stable/fs/xfs
Dave Chinner 8ebd3ba932 xfs: tail updates only need to occur when LSN changes
commit 8eb807bd83 upstream.

We currently wake anything waiting on the log tail to move whenever
the log item at the tail of the log is removed. Historically this
was fine behaviour because there were very few items at any given
LSN. But with delayed logging, there may be thousands of items at
any given LSN, and we can't move the tail until they are all gone.

Hence if we are removing them in near tail-first order, we might be
waking up processes waiting on the tail LSN to change (e.g. log
space waiters) repeatedly without them being able to make progress.
This also occurs with the new sync push waiters, and can result in
thousands of spurious wakeups every second when under heavy direct
reclaim pressure.

To fix this, check that the tail LSN has actually changed on the
AIL before triggering wakeups. This will reduce the number of
spurious wakeups when doing bulk AIL removal and make this code much
more efficient.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Allison Collins <allison.henderson@oracle.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Acked-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Chandan Babu R <chandan.babu@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2022-10-29 10:20:34 +02:00
..
libxfs xfs: remove the xfs_qoff_logitem_t typedef 2022-10-29 10:20:33 +02:00
scrub xfs: strengthen rmap record flags checking 2020-11-24 13:29:18 +01:00
Kconfig
kmem.c xfs: add kmem_alloc_io() 2019-08-26 17:43:15 -07:00
kmem.h xfs: add kmem_alloc_io() 2019-08-26 17:43:15 -07:00
Makefile xfs: move xfs_trans_inode.c to libxfs/ 2019-07-15 08:10:18 -07:00
mrlock.h
xfs.h
xfs_acl.c xfs: always log corruption errors 2022-09-28 11:04:10 +02:00
xfs_acl.h
xfs_aops.c for-linus-20190715 2019-07-15 21:20:52 -07:00
xfs_aops.h xfs: remove the unused xfs_count_page_state declaration 2019-06-30 09:05:17 -07:00
xfs_attr_inactive.c xfs: add a function to deal with corrupt buffers post-verifiers 2022-10-29 10:20:33 +02:00
xfs_attr_list.c xfs: add a function to deal with corrupt buffers post-verifiers 2022-10-29 10:20:33 +02:00
xfs_bio_io.c xfs: chain bios the right way around in xfs_rw_bdev 2019-07-10 10:04:16 -07:00
xfs_bmap_item.c xfs: always log corruption errors 2022-09-28 11:04:10 +02:00
xfs_bmap_item.h xfs: merge xfs_bud_init into xfs_trans_get_bud 2019-06-28 19:27:36 -07:00
xfs_bmap_util.c xfs: rework collapse range into an atomic operation 2022-10-29 10:20:33 +02:00
xfs_bmap_util.h
xfs_buf.c xfs: xfs_buf_corruption_error should take __this_address 2022-10-29 10:20:33 +02:00
xfs_buf.h xfs: add a function to deal with corrupt buffers post-verifiers 2022-10-29 10:20:33 +02:00
xfs_buf_item.c xfs: use bitops interface for buf log item AIL flag check 2022-09-28 11:04:11 +02:00
xfs_buf_item.h xfs: remove the xfs_log_item_t typedef 2019-06-28 19:27:33 -07:00
xfs_dir2_readdir.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_discard.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_discard.h
xfs_dquot.c xfs: remove the xfs_dq_logitem_t typedef 2022-10-29 10:20:33 +02:00
xfs_dquot.h xfs: remove the xfs_dq_logitem_t typedef 2022-10-29 10:20:33 +02:00
xfs_dquot_item.c xfs: fix unmount hang and memory leak on shutdown during quotaoff 2022-10-29 10:20:33 +02:00
xfs_dquot_item.h xfs: factor out quotaoff intent AIL removal and memory free 2022-10-29 10:20:33 +02:00
xfs_error.c xfs: xfs_buf_corruption_error should take __this_address 2022-10-29 10:20:33 +02:00
xfs_error.h xfs: xfs_buf_corruption_error should take __this_address 2022-10-29 10:20:33 +02:00
xfs_export.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_export.h
xfs_extent_busy.c fs: xfs: Remove KM_NOSLEEP and KM_SLEEP. 2019-08-26 12:06:22 -07:00
xfs_extent_busy.h
xfs_extfree_item.c xfs: always log corruption errors 2022-09-28 11:04:10 +02:00
xfs_extfree_item.h xfs: merge xfs_efd_init into xfs_trans_get_efd 2019-06-28 19:27:35 -07:00
xfs_file.c xfs: fix IOCB_NOWAIT handling in xfs_file_dio_aio_read 2022-10-07 09:16:56 +02:00
xfs_filestream.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_filestream.h
xfs_fsmap.c xfs: add missing assert in xfs_fsmap_owner_from_rmap 2022-09-28 11:04:09 +02:00
xfs_fsmap.h xfs: fix deadlock and streamline xfs_getfsmap performance 2020-10-29 09:57:48 +01:00
xfs_fsops.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_fsops.h
xfs_globals.c xfs: multithreaded iwalk implementation 2019-07-03 07:33:26 -07:00
xfs_health.c xfs: introduce new v5 bulkstat structure 2019-07-03 20:36:26 -07:00
xfs_icache.c xfs: Don't allow logging of XFS_ISTALE inodes 2020-09-03 11:26:44 +02:00
xfs_icache.h
xfs_icreate_item.c fs: xfs: Remove KM_NOSLEEP and KM_SLEEP. 2019-08-26 12:06:22 -07:00
xfs_icreate_item.h
xfs_inode.c xfs: add a function to deal with corrupt buffers post-verifiers 2022-10-29 10:20:33 +02:00
xfs_inode.h
xfs_inode_item.c xfs: tail updates only need to occur when LSN changes 2022-10-29 10:20:34 +02:00
xfs_inode_item.h xfs: remove the xfs_log_item_t typedef 2019-06-28 19:27:33 -07:00
xfs_ioctl.c xfs: map unwritten blocks in XFS_IOC_{ALLOC,FREE}SP just like fallocate 2022-01-11 15:23:32 +01:00
xfs_ioctl.h xfs: introduce v5 inode group structure 2019-07-03 20:36:27 -07:00
xfs_ioctl32.c xfs: clear kernel only flags in XFS_IOC_ATTRMULTI_BY_HANDLE 2020-03-05 16:43:51 +01:00
xfs_ioctl32.h xfs: remove various bulk request typedef usage 2019-07-03 20:36:25 -07:00
xfs_iomap.c xfs: attach dquots and reserve quota blocks during unwritten conversion 2022-09-28 11:04:10 +02:00
xfs_iomap.h
xfs_iops.c xfs: always log corruption errors 2022-09-28 11:04:10 +02:00
xfs_iops.h
xfs_itable.c xfs: remove all *_ITER_ABORT values 2019-08-29 21:22:41 -07:00
xfs_itable.h xfs: remove all *_ITER_ABORT values 2019-08-29 21:22:41 -07:00
xfs_iwalk.c xfs: remove all *_ITER_ABORT values 2019-08-29 21:22:41 -07:00
xfs_iwalk.h xfs: remove all *_ITER_CONTINUE values 2019-08-30 22:43:56 -07:00
xfs_linux.h xfs: use bios directly to read and write the log recovery buffers 2019-06-28 19:27:26 -07:00
xfs_log.c xfs: fix mount failure crash on invalid iclog memory access 2020-01-04 19:18:43 +01:00
xfs_log.h fs: xfs: xfs_log: Change return type from int to void 2019-07-03 08:21:58 -07:00
xfs_log_cil.c xfs: Throttle commits on delayed background CIL push 2022-10-29 10:20:34 +02:00
xfs_log_priv.h xfs: Throttle commits on delayed background CIL push 2022-10-29 10:20:34 +02:00
xfs_log_recover.c xfs: remove the xfs_disk_dquot_t and xfs_dquot_t 2022-10-29 10:20:33 +02:00
xfs_message.c xfs: constify the buffer pointer arguments to error functions 2022-09-28 11:04:10 +02:00
xfs_message.h xfs: constify the buffer pointer arguments to error functions 2022-09-28 11:04:10 +02:00
xfs_mount.c xfs: don't commit sunit/swidth updates to disk if that would cause repair failures 2022-09-28 11:04:11 +02:00
xfs_mount.h xfs: add kmem allocation trace points 2019-08-26 17:43:14 -07:00
xfs_mru_cache.c fs: xfs: Remove KM_NOSLEEP and KM_SLEEP. 2019-08-26 12:06:22 -07:00
xfs_mru_cache.h
xfs_ondisk.h xfs: wire up the v5 inumbers ioctl 2019-07-03 20:36:28 -07:00
xfs_pnfs.c xfs: slightly tweak an assert in xfs_fs_map_blocks 2022-09-28 11:04:09 +02:00
xfs_pnfs.h
xfs_pwork.c xfs: poll waiting for quotacheck 2019-07-03 08:21:58 -07:00
xfs_pwork.h xfs: poll waiting for quotacheck 2019-07-03 08:21:58 -07:00
xfs_qm.c xfs: preserve default grace interval during quotacheck 2022-10-29 10:20:33 +02:00
xfs_qm.h
xfs_qm_bhv.c xfs: remove the xfs_disk_dquot_t and xfs_dquot_t 2022-10-29 10:20:33 +02:00
xfs_qm_syscalls.c xfs: fix unmount hang and memory leak on shutdown during quotaoff 2022-10-29 10:20:33 +02:00
xfs_quota.h
xfs_quotaops.c xfs: Sanity check flags of Q_XQUOTARM call 2020-01-26 10:00:59 +01:00
xfs_refcount_item.c xfs: always log corruption errors 2022-09-28 11:04:10 +02:00
xfs_refcount_item.h xfs: merge xfs_cud_init into xfs_trans_get_cud 2019-06-28 19:27:35 -07:00
xfs_reflink.c xfs: introduce XFS_MAX_FILEOFF 2022-10-07 09:16:56 +02:00
xfs_reflink.h
xfs_rmap_item.c xfs: always log corruption errors 2022-09-28 11:04:10 +02:00
xfs_rmap_item.h xfs: merge xfs_rud_init into xfs_trans_get_rud 2019-06-28 19:27:36 -07:00
xfs_rtalloc.c xfs: fix realtime bitmap/summary file truncation when growing rt volume 2020-11-05 11:43:14 +01:00
xfs_rtalloc.h
xfs_stats.c xfs: Use scnprintf() for avoiding potential buffer overflow 2022-10-29 10:20:33 +02:00
xfs_stats.h
xfs_super.c xfs: fix s_maxbytes computation on 32-bit kernels 2022-10-07 09:16:56 +02:00
xfs_super.h xfs: include WARN, REPAIR build options in XFS_BUILD_OPTIONS 2019-06-12 08:37:40 -07:00
xfs_symlink.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_symlink.h
xfs_sysctl.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_sysctl.h xfs: multithreaded iwalk implementation 2019-07-03 07:33:26 -07:00
xfs_sysfs.c xfs: avoid unused to_mp() function warning 2019-09-24 09:40:19 -07:00
xfs_sysfs.h xfs: Fix UBSAN null-ptr-deref in xfs_sysfs_init 2020-08-26 10:40:58 +02:00
xfs_trace.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_trace.h xfs: Throttle commits on delayed background CIL push 2022-10-29 10:20:34 +02:00
xfs_trans.c xfs: prohibit fs freezing when using empty transactions 2020-10-01 13:17:49 +02:00
xfs_trans.h xfs: merge xfs_trans_bmap.c into xfs_bmap_item.c 2019-06-28 19:29:42 -07:00
xfs_trans_ail.c xfs: tail updates only need to occur when LSN changes 2022-10-29 10:20:34 +02:00
xfs_trans_buf.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_trans_dquot.c xfs: remove the xfs_qoff_logitem_t typedef 2022-10-29 10:20:33 +02:00
xfs_trans_priv.h xfs: tail updates only need to occur when LSN changes 2022-10-29 10:20:34 +02:00
xfs_xattr.c xfs: allocate xattr buffer on demand 2019-08-30 22:43:57 -07:00