Thread (9 messages) 9 messages, 2 authors, 2016-05-19

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+0x748
0xffffffff8152eb78 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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help