Re: [PATCH] Btrfs: fix handling of faults from btrfs_copy_from_user
From: Chris Mason <clm@fb.com>
Date: 2016-05-17 22:02:08
On Tue, May 17, 2016 at 11:57:07PM +0200, Adam Borowski wrote:
On Tue, May 17, 2016 at 05:00:49PM -0400, Chris Mason wrote:quoted
On Tue, May 17, 2016 at 10:47:27PM +0200, Adam Borowski wrote:quoted
quoted
Hmmm, some of your traces mentioned compression, do you have compression enabled?Yeah, I mount with noatime,compress=lzo.quoted
Also, if you can gdb your vmlinux (or btrfs.ko) and find this line: gdb> list *__btrfs_buffered_write+0x7480xffffffff8152eb78 is in __btrfs_buffered_write (fs/btrfs/file.c:1564). 1559 1560 reserve_metadata: 1561 ret = btrfs_delalloc_reserve_metadata(inode, reserve_bytes); 1562 if (ret) { 1563 if (!only_release_metadata) 1564 btrfs_free_reserved_data_space(inode, pos, 1565 write_bytes); 1566 else 1567 btrfs_end_write_no_snapshoting(root); 1568 break;Aha, so you're getting an enospc with compression on and the accounting doesn't line up. I should be able to trigger this.This partition was fully balanced just a few days ago so I didn't even think to look at df. [~]# df -h /dev/sda1 216G 161G 53G 76% / [~]# btrfs files df / Data, single: total=209.12GiB, used=156.46GiB System, single: total=32.00MiB, used=48.00KiB Metadata, single: total=6.00GiB, used=3.51GiB GlobalReserve, single: total=512.00MiB, used=0.00B However, after partially balancing it a bit: [~]# btrfs files df / Data, single: total=172.00GiB, used=156.03GiB System, single: total=32.00MiB, used=48.00KiB Metadata, single: total=5.00GiB, used=3.50GiB GlobalReserve, single: total=512.00MiB, used=0.00B I can't reproduce the failure anymore.
Yeah, I'm not sure yet if this is related to the page faulting problem, but Dave Jones triggered this error back in v4.4. I'll still fix it, it should be an alignment issue with write_bytes. -chris