• Dave Chinner's avatar
    xfs: add mount delay debug option · dae5cd81
    Dave Chinner authored
    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: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarBrian Foster <bfoster@redhat.com>
    Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    dae5cd81
xfs_sysfs.c 13.4 KB