mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 22:51:35 +00:00
dae5cd8118
Similar to log_recovery_delay, this delay occurs between the VFS superblock being initialised and the xfs_mount being fully initialised. It also poisons the per-ag radix tree node so that it can be used for triggering shrinker races during mount such as the following: <run memory pressure workload in background> $ cat dirty-mount.sh #! /bin/bash umount -f /dev/pmem0 mkfs.xfs -f /dev/pmem0 mount /dev/pmem0 /mnt/test rm -f /mnt/test/foo xfs_io -fxc "pwrite 0 4k" -c fsync -c "shutdown" /mnt/test/foo umount /dev/pmem0 # let's crash it now! echo 30 > /sys/fs/xfs/debug/mount_delay mount /dev/pmem0 /mnt/test echo 0 > /sys/fs/xfs/debug/mount_delay umount /dev/pmem0 $ sudo ./dirty-mount.sh ..... [ 60.378118] CPU: 3 PID: 3577 Comm: fs_mark Tainted: G D W 4.16.0-rc5-dgc #440 [ 60.378120] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1 04/01/2014 [ 60.378124] RIP: 0010:radix_tree_next_chunk+0x76/0x320 [ 60.378127] RSP: 0018:ffffc9000276f4f8 EFLAGS: 00010282 [ 60.383670] RAX: a5a5a5a5a5a5a5a4 RBX: 0000000000000010 RCX: 000000000000001a [ 60.385277] RDX: 0000000000000000 RSI: ffffc9000276f540 RDI: 0000000000000000 [ 60.386554] RBP: 0000000000000000 R08: 0000000000000000 R09: a5a5a5a5a5a5a5a5 [ 60.388194] R10: 0000000000000006 R11: 0000000000000001 R12: ffffc9000276f598 [ 60.389288] R13: 0000000000000040 R14: 0000000000000228 R15: ffff880816cd6458 [ 60.390827] FS: 00007f5c124b9740(0000) GS:ffff88083fc00000(0000) knlGS:0000000000000000 [ 60.392253] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 60.393423] CR2: 00007f5c11bba0b8 CR3: 000000035580e001 CR4: 00000000000606e0 [ 60.394519] Call Trace: [ 60.395252] radix_tree_gang_lookup_tag+0xc4/0x130 [ 60.395948] xfs_perag_get_tag+0x37/0xf0 [ 60.396522] xfs_reclaim_inodes_count+0x32/0x40 [ 60.397178] xfs_fs_nr_cached_objects+0x11/0x20 [ 60.397837] super_cache_count+0x35/0xc0 [ 60.399159] shrink_slab.part.66+0xb1/0x370 [ 60.400194] shrink_node+0x7e/0x1a0 [ 60.401058] try_to_free_pages+0x199/0x470 [ 60.402081] __alloc_pages_slowpath+0x3a1/0xd20 [ 60.403729] __alloc_pages_nodemask+0x1c3/0x200 [ 60.404941] cache_grow_begin+0x20b/0x2e0 [ 60.406164] fallback_alloc+0x160/0x200 [ 60.407088] kmem_cache_alloc+0x111/0x4e0 [ 60.408038] ? xfs_buf_rele+0x61/0x430 [ 60.408925] kmem_zone_alloc+0x61/0xe0 [ 60.409965] xfs_inode_alloc+0x24/0x1d0 ..... Signed-Off-By: Dave Chinner <dchinner@redhat.com> Reviewed-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
57 lines
1.9 KiB
C
57 lines
1.9 KiB
C
/*
|
|
* 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
|
|
*/
|
|
#include "xfs.h"
|
|
#include "xfs_sysctl.h"
|
|
|
|
/*
|
|
* Tunable XFS parameters. xfs_params is required even when CONFIG_SYSCTL=n,
|
|
* other XFS code uses these values. Times are measured in centisecs (i.e.
|
|
* 100ths of a second) with the exception of eofb_timer and cowb_timer, which
|
|
* are measured in seconds.
|
|
*/
|
|
xfs_param_t xfs_params = {
|
|
/* MIN DFLT MAX */
|
|
.sgid_inherit = { 0, 0, 1 },
|
|
.symlink_mode = { 0, 0, 1 },
|
|
.panic_mask = { 0, 0, 255 },
|
|
.error_level = { 0, 3, 11 },
|
|
.syncd_timer = { 1*100, 30*100, 7200*100},
|
|
.stats_clear = { 0, 0, 1 },
|
|
.inherit_sync = { 0, 1, 1 },
|
|
.inherit_nodump = { 0, 1, 1 },
|
|
.inherit_noatim = { 0, 1, 1 },
|
|
.xfs_buf_timer = { 100/2, 1*100, 30*100 },
|
|
.xfs_buf_age = { 1*100, 15*100, 7200*100},
|
|
.inherit_nosym = { 0, 0, 1 },
|
|
.rotorstep = { 1, 1, 255 },
|
|
.inherit_nodfrg = { 0, 1, 1 },
|
|
.fstrm_timer = { 1, 30*100, 3600*100},
|
|
.eofb_timer = { 1, 300, 3600*24},
|
|
.cowb_timer = { 1, 1800, 3600*24},
|
|
};
|
|
|
|
struct xfs_globals xfs_globals = {
|
|
.log_recovery_delay = 0, /* no delay by default */
|
|
.mount_delay = 0, /* no delay by default */
|
|
#ifdef XFS_ASSERT_FATAL
|
|
.bug_on_assert = true, /* assert failures BUG() */
|
|
#else
|
|
.bug_on_assert = false, /* assert failures WARN() */
|
|
#endif
|
|
};
|