linux/fs/xfs
Darrick J. Wong 6d6ccedd76 xfs: only allocate memory for scrubbing attributes when we need it
In examining a flame graph of time spent running xfs_scrub on various
filesystems, I noticed that we spent nearly 7% of the total runtime on
allocating a zeroed 65k buffer for every SCRUB_TYPE_XATTR invocation.
We do this even if none of the attribute values were anywhere near 64k
in size, even if there were no attribute blocks to check space on, and
even if it just turns out there are no attributes at all.

Therefore, rearrange the xattr buffer setup code to support reallocating
with a bigger buffer and redistribute the callers of that function so
that we only allocate memory just prior to needing it, and only allocate
as much as we need.  If we can't get memory with the ILOCK held we'll
bail out with EDEADLOCK which will allocate the maximum memory.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
2019-07-05 10:29:56 -07:00
..
libxfs xfs: attribute scrub should use seen_enough to pass error values 2019-07-05 10:29:54 -07:00
scrub xfs: only allocate memory for scrubbing attributes when we need it 2019-07-05 10:29:56 -07:00
Kconfig treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
kmem.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
kmem.h xfs: make mem_to_page available outside of xfs_buf.c 2019-06-28 19:27:19 -07:00
Makefile xfs: multithreaded iwalk implementation 2019-07-03 07:33:26 -07:00
mrlock.h xfs: convert to SPDX license tags 2018-06-06 14:17:53 -07:00
xfs_acl.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_acl.h xfs: convert to SPDX license tags 2018-06-06 14:17:53 -07:00
xfs_aops.c xfs: remove XFS_TRANS_NOFS 2019-06-30 09:05:17 -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: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_attr_list.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_bio_io.c xfs: use bios directly to read and write the log recovery buffers 2019-06-28 19:27:26 -07:00
xfs_bmap_item.c xfs: remove unused header files 2019-06-28 19:30:43 -07: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: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_bmap_util.h xfs: flush removing page cache in xfs_reflink_remap_prep 2018-11-21 10:10:53 -08:00
xfs_buf_item.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_buf_item.h xfs: remove the xfs_log_item_t typedef 2019-06-28 19:27:33 -07:00
xfs_buf.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_buf.h xfs: add struct xfs_mount pointer to struct xfs_buf 2019-06-28 19:27:29 -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 License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
xfs_dquot_item.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_dquot_item.h xfs: remove the xfs_log_item_t typedef 2019-06-28 19:27:33 -07:00
xfs_dquot.c xfs: create iterator error codes 2019-07-02 09:40:05 -07:00
xfs_dquot.h xfs: remove the debug-only q_transp field from struct xfs_dquot 2019-06-12 08:59:59 -07:00
xfs_error.c xfs: add struct xfs_mount pointer to struct xfs_buf 2019-06-28 19:27:29 -07:00
xfs_error.h xfs: Introduce XFS_PTAG_VERIFIER_ERROR panic mask 2019-02-11 16:07:00 -08:00
xfs_export.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_export.h xfs: convert to SPDX license tags 2018-06-06 14:17:53 -07:00
xfs_extent_busy.c xfs: convert to SPDX license tags 2018-06-06 14:17:53 -07:00
xfs_extent_busy.h xfs: convert to SPDX license tags 2018-06-06 14:17:53 -07:00
xfs_extfree_item.c xfs: remove unused header files 2019-06-28 19:30:43 -07: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: remove XFS_TRANS_NOFS 2019-06-30 09:05:17 -07:00
xfs_filestream.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_filestream.h xfs: convert to SPDX license tags 2018-06-06 14:17:53 -07:00
xfs_fsmap.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_fsmap.h xfs: convert to SPDX license tags 2018-06-06 14:17:53 -07:00
xfs_fsops.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_fsops.h xfs: change some error-less functions to void types 2019-05-01 20:26:30 -07:00
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: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_icache.h xfs: rename the speculative block allocation reclaim toggle functions 2019-04-26 12:28:55 -07:00
xfs_icreate_item.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_icreate_item.h xfs: convert to SPDX license tags 2018-06-06 14:17:53 -07:00
xfs_inode_item.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_inode_item.h xfs: remove the xfs_log_item_t typedef 2019-06-28 19:27:33 -07:00
xfs_inode.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_inode.h xfs: widen inode delalloc block counter to 64-bits 2019-04-23 08:36:23 -07:00
xfs_ioctl32.c xfs: wire up the v5 inumbers ioctl 2019-07-03 20:36:28 -07:00
xfs_ioctl32.h xfs: remove various bulk request typedef usage 2019-07-03 20:36:25 -07:00
xfs_ioctl.c xfs: allow single bulkstat of special inodes 2019-07-04 07:52:24 -07:00
xfs_ioctl.h xfs: introduce v5 inode group structure 2019-07-03 20:36:27 -07:00
xfs_iomap.c xfs: remove XFS_TRANS_NOFS 2019-06-30 09:05:17 -07:00
xfs_iomap.h xfs: fix SEEK_DATA for speculative COW fork preallocation 2019-02-21 07:55:07 -08:00
xfs_iops.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_iops.h xfs: convert to SPDX license tags 2018-06-06 14:17:53 -07:00
xfs_itable.c xfs: specify AG in bulk req 2019-07-04 07:52:23 -07:00
xfs_itable.h xfs: specify AG in bulk req 2019-07-04 07:52:23 -07:00
xfs_iwalk.c xfs: specify AG in bulk req 2019-07-04 07:52:23 -07:00
xfs_iwalk.h xfs: specify AG in bulk req 2019-07-04 07:52:23 -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_cil.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_log_priv.h fs: xfs: xfs_log: Change return type from int to void 2019-07-03 08:21:58 -07:00
xfs_log_recover.c fs: xfs: xfs_log: Change return type from int to void 2019-07-03 08:21:58 -07:00
xfs_log.c fs: xfs: xfs_log: Change return type from int to void 2019-07-03 08:21:58 -07:00
xfs_log.h fs: xfs: xfs_log: Change return type from int to void 2019-07-03 08:21:58 -07:00
xfs_message.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_message.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
xfs_mount.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_mount.h xfs: move the log ioend workqueue to struct xlog 2019-06-28 19:27:25 -07:00
xfs_mru_cache.c xfs: convert to SPDX license tags 2018-06-06 14:17:53 -07:00
xfs_mru_cache.h xfs: convert to SPDX license tags 2018-06-06 14:17:53 -07:00
xfs_ondisk.h xfs: wire up the v5 inumbers ioctl 2019-07-03 20:36:28 -07:00
xfs_pnfs.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_pnfs.h xfs: prepare xfs_break_layouts() for another layout type 2018-05-22 07:19:08 -07:00
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_bhv.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_qm_syscalls.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_qm.c xfs: specify AG in bulk req 2019-07-04 07:52:23 -07:00
xfs_qm.h xfs: widen quota block counters to 64-bit integers 2019-04-23 08:36:23 -07:00
xfs_quota.h xfs: kill the xfs_dqtrx_t typedef 2019-04-23 08:36:23 -07:00
xfs_quotaops.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_refcount_item.c xfs: remove unused header files 2019-06-28 19:30:43 -07: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: remove XFS_TRANS_NOFS 2019-06-30 09:05:17 -07:00
xfs_reflink.h xfs: don't pass iomap flags to xfs_reflink_allocate_cow 2019-02-25 09:04:31 -08:00
xfs_rmap_item.c xfs: remove unused header files 2019-06-28 19:30:43 -07: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: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_rtalloc.h xfs: convert to SPDX license tags 2018-06-06 14:17:53 -07:00
xfs_stats.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_stats.h xfs: use offsetof() in place of offset macros for __xfsstats 2018-10-18 17:21:39 +11:00
xfs_super.c xfs: remove unused header files 2019-06-28 19:30:43 -07: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: convert to SPDX license tags 2018-06-06 14:17:53 -07:00
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: multithreaded iwalk implementation 2019-07-03 07:33:26 -07:00
xfs_sysfs.h xfs: convert to SPDX license tags 2018-06-06 14:17:53 -07:00
xfs_trace.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_trace.h xfs: multithreaded iwalk implementation 2019-07-03 07:33:26 -07:00
xfs_trans_ail.c xfs: remove the xfs_log_item_t typedef 2019-06-28 19:27:33 -07:00
xfs_trans_buf.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_trans_dquot.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_trans_inode.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs_trans_priv.h xfs: don't use xfs_trans_free_items in the commit path 2019-06-28 19:27:31 -07:00
xfs_trans.c xfs: remove XFS_TRANS_NOFS 2019-06-30 09:05:17 -07:00
xfs_trans.h xfs: merge xfs_trans_bmap.c into xfs_bmap_item.c 2019-06-28 19:29:42 -07:00
xfs_xattr.c xfs: remove unused header files 2019-06-28 19:30:43 -07:00
xfs.h xfs: remove b_last_holder & associated macros 2018-08-12 08:37:31 -07:00