mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-27 19:29:37 +00:00
![Dave Chinner](/assets/img/avatar_default.png)
Lots of the dir code now goes through switches to determine what is the correct on-disk format to parse. It generally involves a "xfs_sbversion_hasfoo" check, deferencing the superblock version and feature fields and hence touching several cache lines per operation in the process. Some operations do multiple checks because they nest conditional operations and they don't pass the information in a direct fashion between each other. Hence, add an ops vector to the xfs_inode structure that is configured when the inode is initialised to point to all the correct decode and encoding operations. This will significantly reduce the branchiness and cacheline footprint of the directory object decoding and encoding. This is the first patch in a series of conversion patches. It will introduce the ops structure, the setup of it and add the first operation to the vector. Subsequent patches will convert directory ops one at a time to keep the changes simple and obvious. Just this patch shows the benefit of such an approach on code size. Just converting the two shortform dir operations as this patch does decreases the built binary size by ~1500 bytes: $ size fs/xfs/xfs.o.orig fs/xfs/xfs.o.p1 text data bss dec hex filename 794490 96802 1096 892388 d9de4 fs/xfs/xfs.o.orig 792986 96802 1096 890884 d9804 fs/xfs/xfs.o.p1 $ That's a significant decrease in the instruction cache footprint of the directory code for such a simple change, and indicates that this approach is definitely worth pursuing further. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Ben Myers <bpm@sgi.com>
116 lines
3 KiB
Makefile
116 lines
3 KiB
Makefile
#
|
|
# Copyright (c) 2000-2005 Silicon Graphics, Inc.
|
|
# All Rights Reserved.
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License as
|
|
# published by the Free Software Foundation.
|
|
#
|
|
# This program is distributed in the hope that it would be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write the Free Software Foundation,
|
|
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
#
|
|
|
|
ccflags-y += -I$(src) # needed for trace events
|
|
|
|
ccflags-$(CONFIG_XFS_DEBUG) += -g
|
|
|
|
obj-$(CONFIG_XFS_FS) += xfs.o
|
|
|
|
# this one should be compiled first, as the tracing macros can easily blow up
|
|
xfs-y += xfs_trace.o
|
|
|
|
# highlevel code
|
|
xfs-y += xfs_aops.o \
|
|
xfs_attr_inactive.o \
|
|
xfs_attr_list.o \
|
|
xfs_bit.o \
|
|
xfs_bmap_util.o \
|
|
xfs_buf.o \
|
|
xfs_dir2_readdir.o \
|
|
xfs_discard.o \
|
|
xfs_error.o \
|
|
xfs_export.o \
|
|
xfs_extent_busy.o \
|
|
xfs_file.o \
|
|
xfs_filestream.o \
|
|
xfs_fsops.o \
|
|
xfs_globals.o \
|
|
xfs_icache.o \
|
|
xfs_ioctl.o \
|
|
xfs_iomap.o \
|
|
xfs_iops.o \
|
|
xfs_itable.o \
|
|
xfs_message.o \
|
|
xfs_mount.o \
|
|
xfs_mru_cache.o \
|
|
xfs_super.o \
|
|
xfs_symlink.o \
|
|
xfs_trans.o \
|
|
xfs_xattr.o \
|
|
kmem.o \
|
|
uuid.o
|
|
|
|
# code shared with libxfs
|
|
xfs-y += xfs_alloc.o \
|
|
xfs_alloc_btree.o \
|
|
xfs_attr.o \
|
|
xfs_attr_leaf.o \
|
|
xfs_attr_remote.o \
|
|
xfs_bmap.o \
|
|
xfs_bmap_btree.o \
|
|
xfs_btree.o \
|
|
xfs_da_btree.o \
|
|
xfs_da_format.o \
|
|
xfs_dir2.o \
|
|
xfs_dir2_block.o \
|
|
xfs_dir2_data.o \
|
|
xfs_dir2_leaf.o \
|
|
xfs_dir2_node.o \
|
|
xfs_dir2_sf.o \
|
|
xfs_dquot_buf.o \
|
|
xfs_ialloc.o \
|
|
xfs_ialloc_btree.o \
|
|
xfs_icreate_item.o \
|
|
xfs_inode.o \
|
|
xfs_inode_fork.o \
|
|
xfs_inode_buf.o \
|
|
xfs_log_recover.o \
|
|
xfs_log_rlimit.o \
|
|
xfs_sb.o \
|
|
xfs_symlink_remote.o \
|
|
xfs_trans_resv.o
|
|
|
|
# low-level transaction/log code
|
|
xfs-y += xfs_log.o \
|
|
xfs_log_cil.o \
|
|
xfs_buf_item.o \
|
|
xfs_extfree_item.o \
|
|
xfs_inode_item.o \
|
|
xfs_trans_ail.o \
|
|
xfs_trans_buf.o \
|
|
xfs_trans_extfree.o \
|
|
xfs_trans_inode.o \
|
|
|
|
# optional features
|
|
xfs-$(CONFIG_XFS_QUOTA) += xfs_dquot.o \
|
|
xfs_dquot_item.o \
|
|
xfs_trans_dquot.o \
|
|
xfs_qm_syscalls.o \
|
|
xfs_qm_bhv.o \
|
|
xfs_qm.o \
|
|
xfs_quotaops.o
|
|
|
|
# xfs_rtbitmap is shared with libxfs
|
|
xfs-$(CONFIG_XFS_RT) += xfs_rtalloc.o \
|
|
xfs_rtbitmap.o
|
|
|
|
xfs-$(CONFIG_XFS_POSIX_ACL) += xfs_acl.o
|
|
xfs-$(CONFIG_PROC_FS) += xfs_stats.o
|
|
xfs-$(CONFIG_SYSCTL) += xfs_sysctl.o
|
|
xfs-$(CONFIG_COMPAT) += xfs_ioctl32.o
|