• Qu Wenruo's avatar
    btrfs: dump all space infos if we abort transaction due to ENOSPC · 8e327b9c
    Qu Wenruo authored
    We have hit some transaction abort due to -ENOSPC internally.
    
    Normally we should always reserve enough space for metadata for every
    transaction, thus hitting -ENOSPC should really indicate some cases we
    didn't expect.
    
    But unfortunately current error reporting will only give a kernel
    warning and stack trace, not really helpful to debug what's causing the
    problem.
    
    And mount option debug_enospc can only help when user can reproduce the
    problem, but under most cases, such transaction abort by -ENOSPC is
    really hard to reproduce.
    
    So this patch will dump all space infos (data, metadata, system) when we
    abort the first transaction with -ENOSPC.
    
    This should at least provide some clue to us.
    
    The example of a dump would look like this:
    
      BTRFS: Transaction aborted (error -28)
      WARNING: CPU: 8 PID: 3366 at fs/btrfs/transaction.c:2137 btrfs_commit_transaction+0xf81/0xfb0 [btrfs]
      <call trace skipped>
      ---[ end trace 0000000000000000 ]---
      BTRFS info (device dm-1: state A): dumping space info:
      BTRFS info (device dm-1: state A): space_info DATA has 6791168 free, is not full
      BTRFS info (device dm-1: state A): space_info total=8388608, used=1597440, pinned=0, reserved=0, may_use=0, readonly=0 zone_unusable=0
      BTRFS info (device dm-1: state A): space_info METADATA has 257114112 free, is not full
      BTRFS info (device dm-1: state A): space_info total=268435456, used=131072, pinned=180224, reserved=65536, may_use=10878976, readonly=65536 zone_unusable=0
      BTRFS info (device dm-1: state A): space_info SYSTEM has 8372224 free, is not full
      BTRFS info (device dm-1: state A): space_info total=8388608, used=16384, pinned=0, reserved=0, may_use=0, readonly=0 zone_unusable=0
      BTRFS info (device dm-1: state A): global_block_rsv: size 3670016 reserved 3670016
      BTRFS info (device dm-1: state A): trans_block_rsv: size 0 reserved 0
      BTRFS info (device dm-1: state A): chunk_block_rsv: size 0 reserved 0
      BTRFS info (device dm-1: state A): delayed_block_rsv: size 4063232 reserved 4063232
      BTRFS info (device dm-1: state A): delayed_refs_rsv: size 3145728 reserved 3145728
      BTRFS: error (device dm-1: state A) in btrfs_commit_transaction:2137: errno=-28 No space left
      BTRFS info (device dm-1: state EA): forced readonly
    Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    8e327b9c
space-info.h 5.12 KB