On  9.03.2018 17:04, Martin Svec wrote:
> Nobody knows?
> 
> I'm particularly interested why debug space_info 4 shows negative (unsigned 
> 18446744072120172544)
> value as free metadata space, please see the original report. Is it a bug in 
> dump_space_info(), or
> metadata reservations can temporarily exceed the total space, or is it an 
> indication of a damaged
> filesystem? Also note that rebuilding free space cache doesn't help.

It's a bug in dump_space_info, mainly caused by the fact that when you
add may_use_bytes to the curently used space i.e. used + pinned +
may_use + reserved it usually is larger than total.

As I said in my reply to Alex Adriaanse (I assume you work on the same
system) what transpires is that you are running out of space in a
context which essentially doesn't allow to free any more space.


> 
> Thank you.
> 
> Martin
> 
> Dne 23.2.2018 v 15:28 Martin Svec napsal(a):
>> Hello,
>>
>> we have a btrfs-based backup system using btrfs snapshots and rsync. 
>> Sometimes,
>> we hit ENOSPC bug and the filesystem is remounted read-only. However, 
>> there's 
>> still plenty of unallocated space according to "btrfs fi usage". So I think 
>> this
>> isn't another edge condition when btrfs runs out of space due to fragmented 
>> chunks,
>> but a bug in disk space allocation code. It suffices to umount the 
>> filesystem and
>> remount it back and it works fine again. The frequency of ENOSPC seems to be
>> dependent on metadata chunks usage. When there's a lot of free space in 
>> existing
>> metadata chunks, the bug doesn't happen for months. If most metadata chunks 
>> are
>> above ~98%, we hit the bug every few days. Below are details regarding the 
>> backup
>> server and btrfs.
>>
>> The backup works as follows: 
>>
>>   * Every night, we create a btrfs snapshot on the backup server and rsync 
>> data
>>     from a production server into it. This snapshot is then marked read-only 
>> and
>>     will be used as a base subvolume for the next backup snapshot.
>>   * Every day, expired snapshots are removed and their space is freed. 
>> Cleanup
>>     is scheduled in such a way that it doesn't interfere with the backup 
>> window.
>>   * Multiple production servers are backed up in parallel to one backup 
>> server.
>>   * The backed up servers are mostly webhosting servers and mail servers, 
>> i.e.
>>     hundreds of billions of small files. (Yes, we push btrfs to the limits 
>> :-))
>>   * Backup server contains ~1080 snapshots, Zlib compression is enabled.
>>   * Rsync is configured to use whole file copying.
>>
>> System configuration:
>>
>> Debian Stretch, vanilla stable 4.14.20 kernel with one custom btrfs patch 
>> (see below) and
>> Nikolay's patch 1b816c23e9 (btrfs: Add enospc_debug printing in 
>> metadata_reserve_bytes)
>>
>> btrfs mount options: 
>> noatime,compress=zlib,enospc_debug,space_cache=v2,commit=15
>>
>> $ btrfs fi df /backup:
>>
>> Data, single: total=28.05TiB, used=26.37TiB
>> System, single: total=32.00MiB, used=3.53MiB
>> Metadata, single: total=255.00GiB, used=250.73GiB
>> GlobalReserve, single: total=512.00MiB, used=0.00B
>>
>> $ btrfs fi show /backup:
>>
>> Label: none  uuid: a52501a9-651c-4712-a76b-7b4238cfff63
>>         Total devices 2 FS bytes used 26.62TiB
>>         devid    1 size 416.62GiB used 255.03GiB path /dev/sdb
>>         devid    2 size 36.38TiB used 28.05TiB path /dev/sdc
>>
>> $ btrfs fi usage /backup:
>>
>> Overall:
>>     Device size:                  36.79TiB
>>     Device allocated:             28.30TiB
>>     Device unallocated:            8.49TiB
>>     Device missing:                  0.00B
>>     Used:                         26.62TiB
>>     Free (estimated):             10.17TiB      (min: 10.17TiB)
>>     Data ratio:                       1.00
>>     Metadata ratio:                   1.00
>>     Global reserve:              512.00MiB      (used: 0.00B)
>>
>> Data,single: Size:28.05TiB, Used:26.37TiB
>>    /dev/sdc       28.05TiB
>>
>> Metadata,single: Size:255.00GiB, Used:250.73GiB
>>    /dev/sdb      255.00GiB
>>
>> System,single: Size:32.00MiB, Used:3.53MiB
>>    /dev/sdb       32.00MiB
>>
>> Unallocated:
>>    /dev/sdb      161.59GiB
>>    /dev/sdc        8.33TiB
>>
>> Btrfs filesystem uses two logical drives in single mode, backed by
>> hardware RAID controller PERC H710; /dev/sdb is HW RAID1 consisting
>> of two SATA SSDs and /dev/sdc is HW RAID6 SATA volume.
>>
>> Please note that we have a simple custom patch in btrfs which ensures
>> that metadata chunks are allocated preferably on SSD volume and data
>> chunks are allocated only on SATA volume. The patch slightly modifies
>> __btrfs_alloc_chunk() so that its loop over devices ignores rotating
>> devices when a metadata chunk is requested and vice versa. However, 
>> I'm quite sure that this patch doesn't cause the reported bug because
>> we log every call of the modified code and there're no __btrfs_alloc_chunk()
>> calls when ENOSPC is triggered. Moreover, we observed the same bug before
>> we developed the patch. (IIRC, Chris Mason mentioned that they work on
>> a similar feature in facebook, but I've found no official patches yet.)
>>
>> Dmesg dump:
>>
>> [285167.750763] use_block_rsv: 62468 callbacks suppressed
>> [285167.750764] BTRFS: block rsv returned -28
>> [285167.750789] ------------[ cut here ]------------
>> [285167.750822] WARNING: CPU: 5 PID: 443 at fs/btrfs/extent-tree.c:8463 
>> btrfs_alloc_tree_block+0x39b/0x4c0 [btrfs]
>> [285167.750823] Modules linked in: binfmt_misc xt_comment xt_tcpudp 
>> iptable_filter nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack iptable_raw 
>> ip6table_filter iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 
>> nf_nat nf_conntr
>> [285167.750853]  zstd_compress xxhash raid6_pq sd_mod crc32c_intel psmouse 
>> uhci_hcd ehci_pci ehci_hcd megaraid_sas usbcore scsi_mod bnx2
>> [285167.750861] CPU: 5 PID: 443 Comm: btrfs-transacti Tainted: G        W I  
>>    4.14.20-znr1+ #69
>> [285167.750862] Hardware name: Dell Inc. PowerEdge R510/0DPRKF, BIOS 1.6.3 
>> 02/01/2011
>> [285167.750863] task: ffff9c4a1740e280 task.stack: ffffba48c1ecc000
>> [285167.750878] RIP: 0010:btrfs_alloc_tree_block+0x39b/0x4c0 [btrfs]
>> [285167.750879] RSP: 0018:ffffba48c1ecf958 EFLAGS: 00010282
>> [285167.750880] RAX: 000000000000001d RBX: ffff9c4a1c2ce128 RCX: 
>> 0000000000000006
>> [285167.750881] RDX: 0000000000000000 RSI: 0000000000000096 RDI: 
>> ffff9c4a2fd566f0
>> [285167.750882] RBP: 0000000000004000 R08: 0000000000000001 R09: 
>> 00000000000003dc
>> [285167.750883] R10: 0000000000000001 R11: 00000000000003dc R12: 
>> ffff9c4a1c2ce000
>> [285167.750883] R13: ffff9c4a17692800 R14: 0000000000000001 R15: 
>> 00000000ffffffe4
>> [285167.750885] FS:  0000000000000000(0000) GS:ffff9c4a2fd40000(0000) 
>> knlGS:0000000000000000
>> [285167.750885] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>> [285167.750886] CR2: 000056250e55bfd0 CR3: 000000000ee0a003 CR4: 
>> 00000000000206e0
>> [285167.750887] Call Trace:
>> [285167.750903]  __btrfs_cow_block+0x125/0x5c0 [btrfs]
>> [285167.750917]  btrfs_cow_block+0xcb/0x1b0 [btrfs]
>> [285167.750929]  btrfs_search_slot+0x1fd/0x9e0 [btrfs]
>> [285167.750943]  lookup_inline_extent_backref+0x105/0x610 [btrfs]
>> [285167.750961]  ? set_extent_bit+0x19/0x20 [btrfs]
>> [285167.750974]  __btrfs_free_extent.isra.61+0xf5/0xd30 [btrfs]
>> [285167.750992]  ? btrfs_merge_delayed_refs+0x63/0x560 [btrfs]
>> [285167.751006]  __btrfs_run_delayed_refs+0x516/0x12a0 [btrfs]
>> [285167.751021]  btrfs_run_delayed_refs+0x7a/0x270 [btrfs]
>> [285167.751037]  btrfs_commit_transaction+0x3e1/0x950 [btrfs]
>> [285167.751053]  ? start_transaction+0x89/0x410 [btrfs]
>> [285167.751068]  transaction_kthread+0x195/0x1b0 [btrfs]
>> [285167.751071]  kthread+0xfc/0x130
>> [285167.751087]  ? btrfs_cleanup_transaction+0x580/0x580 [btrfs]
>> [285167.751088]  ? kthread_create_on_node+0x70/0x70
>> [285167.751091]  ret_from_fork+0x35/0x40
>> [285167.751092] Code: ff 48 c7 c6 28 d7 44 c0 48 c7 c7 a0 21 4a c0 e8 3c a5 
>> 4b cb 85 c0 0f 84 1c fd ff ff 44 89 fe 48 c7 c7 c0 4c 45 c0 e8 80 fd f1 ca 
>> <0f> ff e9 06 fd ff ff 4c 63 e8 31 d2 48 89 ee 48 89 df e8 4e eb
>> [285167.751114] ---[ end trace 8721883b5af677ec ]---
>> [285169.096630] BTRFS info (device sdb): space_info 4 has 
>> 18446744072120172544 free, is not full
>> [285169.096633] BTRFS info (device sdb): space_info total=273804165120, 
>> used=269218267136, pinned=3459629056, reserved=52396032, may_use=2663120896, 
>> readonly=131072
>> [285169.096638] BTRFS: Transaction aborted (error -28)
>> [285169.096664] ------------[ cut here ]------------
>> [285169.096691] WARNING: CPU: 7 PID: 443 at fs/btrfs/extent-tree.c:3089 
>> btrfs_run_delayed_refs+0x259/0x270 [btrfs]
>> [285169.096692] Modules linked in: binfmt_misc xt_comment xt_tcpudp 
>> iptable_filter nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack iptable_raw 
>> ip6table_filter iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 
>> nf_nat nf_conntr
>> [285169.096722]  zstd_compress xxhash raid6_pq sd_mod crc32c_intel psmouse 
>> uhci_hcd ehci_pci ehci_hcd megaraid_sas usbcore scsi_mod bnx2
>> [285169.096729] CPU: 7 PID: 443 Comm: btrfs-transacti Tainted: G        W I  
>>    4.14.20-znr1+ #69
>> [285169.096730] Hardware name: Dell Inc. PowerEdge R510/0DPRKF, BIOS 1.6.3 
>> 02/01/2011
>> [285169.096731] task: ffff9c4a1740e280 task.stack: ffffba48c1ecc000
>> [285169.096745] RIP: 0010:btrfs_run_delayed_refs+0x259/0x270 [btrfs]
>> [285169.096746] RSP: 0018:ffffba48c1ecfde0 EFLAGS: 00010282
>> [285169.096747] RAX: 0000000000000026 RBX: ffff9c47990c0780 RCX: 
>> 0000000000000006
>> [285169.096748] RDX: 0000000000000000 RSI: 0000000000000082 RDI: 
>> ffff9c4a2fdd66f0
>> [285169.096749] RBP: ffff9c493d509b68 R08: 0000000000000001 R09: 
>> 0000000000000403
>> [285169.096749] R10: ffff9c49731d6620 R11: 0000000000000403 R12: 
>> ffff9c4a1c2ce000
>> [285169.096750] R13: ffff9c4a1c2cf1f0 R14: ffffffffffffffff R15: 
>> 0000000000000000
>> [285169.096751] FS:  0000000000000000(0000) GS:ffff9c4a2fdc0000(0000) 
>> knlGS:0000000000000000
>> [285169.096752] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>> [285169.096753] CR2: 000055e70555bfe0 CR3: 000000000ee0a005 CR4: 
>> 00000000000206e0
>> [285169.096754] Call Trace:
>> [285169.096774]  btrfs_commit_transaction+0x3e1/0x950 [btrfs]
>> [285169.096790]  ? start_transaction+0x89/0x410 [btrfs]
>> [285169.096806]  transaction_kthread+0x195/0x1b0 [btrfs]
>> [285169.096809]  kthread+0xfc/0x130
>> [285169.096825]  ? btrfs_cleanup_transaction+0x580/0x580 [btrfs]
>> [285169.096826]  ? kthread_create_on_node+0x70/0x70
>> [285169.096828]  ret_from_fork+0x35/0x40
>> [285169.096830] Code: c7 c6 20 d8 44 c0 48 89 df 44 89 04 24 e8 19 bb 09 00 
>> 44 8b 04 24 eb 86 44 89 c6 48 c7 c7 30 48 45 c0 44 89 04 24 e8 d2 40 f2 ca 
>> <0f> ff 44 8b 04 24 eb c4 0f 1f 44 00 00 66 2e 0f 1f 84 00 00 00
>> [285169.096852] ---[ end trace 8721883b5af677ed ]---
>> [285169.096918] BTRFS: error (device sdb) in btrfs_run_delayed_refs:3089: 
>> errno=-28 No space left
>> [285169.096976] BTRFS info (device sdb): forced readonly
>> [285169.096979] BTRFS warning (device sdb): Skipping commit of aborted 
>> transaction.
>> [285169.096981] BTRFS: error (device sdb) in cleanup_transaction:1873: 
>> errno=-28 No space left
>>
>>
>> How can I help you to fix this issue?
>>
>> Regards,
>>
>> Martin Svec
>>
>>
>>
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
>> the body of a message to majord...@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to