Message ID | 20130326193805.GG28030@localhost.localdomain (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
HI, Am 26.03.2013 20:38, schrieb Josef Bacik: > On Tue, Mar 26, 2013 at 01:22:20PM -0600, Stefan Priebe wrote: >> Hi, >> >> but when i transfer big files i see now this one: >> [20368.784736] INFO: task rsync:14911 blocked for more than 120 seconds. >> [20368.821978] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" >> disables this message. >> [20368.895140] rsync D ffffffff8160f580 0 14911 1 >> 0x00000000 >> [20368.895148] ffff8801ca63fc78 0000000000000086 ffff8800c28f8198 >> ffff88022394f800 >> [20368.895158] ffff8801ca63ffd8 ffff8801ca63ffd8 ffff8801ca63ffd8 >> 0000000000012c40 >> [20368.895163] ffffffff81a11440 ffff8801c9d36340 ffff8801ca63fc88 >> ffff8801cefce130 >> [20368.895169] Call Trace: >> [20368.895180] [<ffffffff8151a774>] schedule+0x24/0x70 >> [20368.895207] [<ffffffffa0158c75>] >> wait_current_trans.isra.32+0x95/0x100 [btrfs] >> [20368.895214] [<ffffffff8106d4f0>] ? add_wait_queue+0x60/0x60 >> [20368.895236] [<ffffffffa015a45d>] >> start_transaction.part.33+0x13d/0x4d0 [btrfs] >> [20368.895252] [<ffffffff811420f3>] ? inode_permission+0x13/0x50 >> [20368.895271] [<ffffffffa015a814>] start_transaction+0x24/0x30 [btrfs] >> [20368.895287] [<ffffffffa015aae3>] btrfs_start_transaction+0x13/0x20 >> [btrfs] >> [20368.895302] [<ffffffffa015b2f0>] __unlink_start_trans+0x70/0x460 [btrfs] >> [20368.895307] [<ffffffff8150ee3e>] ? check_acl+0x5a/0x122 >> [20368.895312] [<ffffffff81055ff0>] ? ns_capable+0x30/0x60 >> [20368.895317] [<ffffffff811413bd>] ? generic_permission+0xbd/0x110 >> [20368.895336] [<ffffffffa0163f92>] btrfs_unlink+0x32/0xc0 [btrfs] >> [20368.895341] [<ffffffff8114186d>] vfs_unlink.part.61+0x6d/0xd0 >> [20368.895345] [<ffffffff81143ad7>] vfs_unlink+0x37/0x50 >> [20368.895349] [<ffffffff81143c8b>] do_unlinkat+0x19b/0x240 >> [20368.895354] [<ffffffff81146171>] sys_unlink+0x11/0x20 >> [20368.895359] [<ffffffff8151c2e9>] system_call_fastpath+0x16/0x1b >> >> Speed is just 100kb/s instead of 100MB/s. >> > > Hrm I wonder if 512 is too small for your case, can you add this patch to the > pile and see what dmesg says when you are having these problems? Thanks, No idea why but i can't reproduce... ;-( Stefan -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index 50767bb..d19c9f6 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -31,6 +31,7 @@ #include "inode-map.h" #include "volumes.h" #include "dev-replace.h" +#include "math.h" #define BTRFS_ROOT_TRANS_TAG 0 @@ -576,10 +577,19 @@ void btrfs_throttle(struct btrfs_root *root) static int should_end_transaction(struct btrfs_trans_handle *trans, struct btrfs_root *root) { - int ret; + struct btrfs_block_rsv *block_rsv = &root->fs_info->global_block_rsv; + u64 num_bytes = 0; + int ret = 1; - ret = btrfs_block_rsv_check(root, &root->fs_info->global_block_rsv, 5); - return ret ? 1 : 0; + spin_lock(&block_rsv->lock); + num_bytes = div_factor(block_rsv->size, 5); + if (block_rsv->reserved >= num_bytes) + ret = 0; + else + printk(KERN_ERR "we're pretty low, setting blocked, reserved %Lu, size %Lu, num %Lu\n", + block_rsv->reserved, block_rsv->size, num_bytes); + spin_unlock(&block_rsv->lock); + return ret; } int btrfs_should_end_transaction(struct btrfs_trans_handle *trans,