* [PATCH] Btrfs: fix cur_offset in the error case for nocow
@ 2018-10-30 10:04 robbieko
2018-10-30 11:45 ` Filipe Manana
2018-10-30 16:31 ` David Sterba
0 siblings, 2 replies; 3+ messages in thread
From: robbieko @ 2018-10-30 10:04 UTC (permalink / raw)
To: linux-btrfs; +Cc: Robbie Ko
From: Robbie Ko <robbieko@synology.com>
When the cow_file_range fail, the related resources are
unlocked according to the range (start-end), so the unlock
cannot be repeated in run_delalloc_nocow.
In some cases (e.g. cur_offset <= end && cow_start!= -1),
cur_offset is not updated correctly, so move the cur_offset
update before cow_file_range.
------------[ cut here ]------------
kernel BUG at mm/page-writeback.c:2663!
Internal error: Oops - BUG: 0 [#1] SMP
CPU: 3 PID: 31525 Comm: kworker/u8:7 Tainted: P O
Hardware name: Realtek_RTD1296 (DT)
Workqueue: writeback wb_workfn (flush-btrfs-1)
task: ffffffc076db3380 ti: ffffffc02e9ac000 task.ti: ffffffc02e9ac000
PC is at clear_page_dirty_for_io+0x1bc/0x1e8
LR is at clear_page_dirty_for_io+0x14/0x1e8
pc : [<ffffffc00033c91c>] lr : [<ffffffc00033c774>] pstate: 40000145
sp : ffffffc02e9af4f0
Process kworker/u8:7 (pid: 31525, stack limit = 0xffffffc02e9ac020)
Call trace:
[<ffffffc00033c91c>] clear_page_dirty_for_io+0x1bc/0x1e8
[<ffffffbffc514674>] extent_clear_unlock_delalloc+0x1e4/0x210 [btrfs]
[<ffffffbffc4fb168>] run_delalloc_nocow+0x3b8/0x948 [btrfs]
[<ffffffbffc4fb948>] run_delalloc_range+0x250/0x3a8 [btrfs]
[<ffffffbffc514c0c>] writepage_delalloc.isra.21+0xbc/0x1d8 [btrfs]
[<ffffffbffc516048>] __extent_writepage+0xe8/0x248 [btrfs]
[<ffffffbffc51630c>] extent_write_cache_pages.isra.17+0x164/0x378 [btrfs]
[<ffffffbffc5185a8>] extent_writepages+0x48/0x68 [btrfs]
[<ffffffbffc4f5828>] btrfs_writepages+0x20/0x30 [btrfs]
[<ffffffc00033d758>] do_writepages+0x30/0x88
[<ffffffc0003ba0f4>] __writeback_single_inode+0x34/0x198
[<ffffffc0003ba6c4>] writeback_sb_inodes+0x184/0x3c0
[<ffffffc0003ba96c>] __writeback_inodes_wb+0x6c/0xc0
[<ffffffc0003bac20>] wb_writeback+0x1b8/0x1c0
[<ffffffc0003bb0f0>] wb_workfn+0x150/0x250
[<ffffffc0002b0014>] process_one_work+0x1dc/0x388
[<ffffffc0002b02f0>] worker_thread+0x130/0x500
[<ffffffc0002b6344>] kthread+0x10c/0x110
[<ffffffc000284590>] ret_from_fork+0x10/0x40
Code: d503201f a9025bb5 a90363b7 f90023b9 (d4210000)
---[ end trace 65fecee7c2296f25 ]---
Signed-off-by: Robbie Ko <robbieko@synology.com>
---
fs/btrfs/inode.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 181c58b..b62299b 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -1532,10 +1532,10 @@ static noinline int run_delalloc_nocow(struct inode *inode,
if (cur_offset <= end && cow_start == (u64)-1) {
cow_start = cur_offset;
- cur_offset = end;
}
if (cow_start != (u64)-1) {
+ cur_offset = end;
ret = cow_file_range(inode, locked_page, cow_start, end, end,
page_started, nr_written, 1, NULL);
if (ret)
--
1.9.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] Btrfs: fix cur_offset in the error case for nocow
2018-10-30 10:04 [PATCH] Btrfs: fix cur_offset in the error case for nocow robbieko
@ 2018-10-30 11:45 ` Filipe Manana
2018-10-30 16:31 ` David Sterba
1 sibling, 0 replies; 3+ messages in thread
From: Filipe Manana @ 2018-10-30 11:45 UTC (permalink / raw)
To: Robbie Ko; +Cc: linux-btrfs
On Tue, Oct 30, 2018 at 10:05 AM robbieko <robbieko@synology.com> wrote:
>
> From: Robbie Ko <robbieko@synology.com>
>
> When the cow_file_range fail, the related resources are
> unlocked according to the range (start-end), so the unlock
> cannot be repeated in run_delalloc_nocow.
>
> In some cases (e.g. cur_offset <= end && cow_start!= -1),
> cur_offset is not updated correctly, so move the cur_offset
> update before cow_file_range.
>
> ------------[ cut here ]------------
> kernel BUG at mm/page-writeback.c:2663!
> Internal error: Oops - BUG: 0 [#1] SMP
> CPU: 3 PID: 31525 Comm: kworker/u8:7 Tainted: P O
> Hardware name: Realtek_RTD1296 (DT)
> Workqueue: writeback wb_workfn (flush-btrfs-1)
> task: ffffffc076db3380 ti: ffffffc02e9ac000 task.ti: ffffffc02e9ac000
> PC is at clear_page_dirty_for_io+0x1bc/0x1e8
> LR is at clear_page_dirty_for_io+0x14/0x1e8
> pc : [<ffffffc00033c91c>] lr : [<ffffffc00033c774>] pstate: 40000145
> sp : ffffffc02e9af4f0
> Process kworker/u8:7 (pid: 31525, stack limit = 0xffffffc02e9ac020)
> Call trace:
> [<ffffffc00033c91c>] clear_page_dirty_for_io+0x1bc/0x1e8
> [<ffffffbffc514674>] extent_clear_unlock_delalloc+0x1e4/0x210 [btrfs]
> [<ffffffbffc4fb168>] run_delalloc_nocow+0x3b8/0x948 [btrfs]
> [<ffffffbffc4fb948>] run_delalloc_range+0x250/0x3a8 [btrfs]
> [<ffffffbffc514c0c>] writepage_delalloc.isra.21+0xbc/0x1d8 [btrfs]
> [<ffffffbffc516048>] __extent_writepage+0xe8/0x248 [btrfs]
> [<ffffffbffc51630c>] extent_write_cache_pages.isra.17+0x164/0x378 [btrfs]
> [<ffffffbffc5185a8>] extent_writepages+0x48/0x68 [btrfs]
> [<ffffffbffc4f5828>] btrfs_writepages+0x20/0x30 [btrfs]
> [<ffffffc00033d758>] do_writepages+0x30/0x88
> [<ffffffc0003ba0f4>] __writeback_single_inode+0x34/0x198
> [<ffffffc0003ba6c4>] writeback_sb_inodes+0x184/0x3c0
> [<ffffffc0003ba96c>] __writeback_inodes_wb+0x6c/0xc0
> [<ffffffc0003bac20>] wb_writeback+0x1b8/0x1c0
> [<ffffffc0003bb0f0>] wb_workfn+0x150/0x250
> [<ffffffc0002b0014>] process_one_work+0x1dc/0x388
> [<ffffffc0002b02f0>] worker_thread+0x130/0x500
> [<ffffffc0002b6344>] kthread+0x10c/0x110
> [<ffffffc000284590>] ret_from_fork+0x10/0x40
> Code: d503201f a9025bb5 a90363b7 f90023b9 (d4210000)
> ---[ end trace 65fecee7c2296f25 ]---
>
> Signed-off-by: Robbie Ko <robbieko@synology.com>
> ---
> fs/btrfs/inode.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
> index 181c58b..b62299b 100644
> --- a/fs/btrfs/inode.c
> +++ b/fs/btrfs/inode.c
> @@ -1532,10 +1532,10 @@ static noinline int run_delalloc_nocow(struct inode *inode,
>
> if (cur_offset <= end && cow_start == (u64)-1) {
> cow_start = cur_offset;
> - cur_offset = end;
> }
Also remove the { }
Other than that, it looks good to me and you can add:
Reviewed-by: Filipe Manana <fdmanana@suse.com>
thanks
>
> if (cow_start != (u64)-1) {
> + cur_offset = end;
> ret = cow_file_range(inode, locked_page, cow_start, end, end,
> page_started, nr_written, 1, NULL);
> if (ret)
> --
> 1.9.1
>
--
Filipe David Manana,
“Whether you think you can, or you think you can't — you're right.”
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Btrfs: fix cur_offset in the error case for nocow
2018-10-30 10:04 [PATCH] Btrfs: fix cur_offset in the error case for nocow robbieko
2018-10-30 11:45 ` Filipe Manana
@ 2018-10-30 16:31 ` David Sterba
1 sibling, 0 replies; 3+ messages in thread
From: David Sterba @ 2018-10-30 16:31 UTC (permalink / raw)
To: robbieko; +Cc: linux-btrfs
On Tue, Oct 30, 2018 at 06:04:04PM +0800, robbieko wrote:
> From: Robbie Ko <robbieko@synology.com>
>
> When the cow_file_range fail, the related resources are
> unlocked according to the range (start-end), so the unlock
> cannot be repeated in run_delalloc_nocow.
>
> In some cases (e.g. cur_offset <= end && cow_start!= -1),
> cur_offset is not updated correctly, so move the cur_offset
> update before cow_file_range.
>
> ------------[ cut here ]------------
> kernel BUG at mm/page-writeback.c:2663!
> Internal error: Oops - BUG: 0 [#1] SMP
> CPU: 3 PID: 31525 Comm: kworker/u8:7 Tainted: P O
> Hardware name: Realtek_RTD1296 (DT)
> Workqueue: writeback wb_workfn (flush-btrfs-1)
> task: ffffffc076db3380 ti: ffffffc02e9ac000 task.ti: ffffffc02e9ac000
> PC is at clear_page_dirty_for_io+0x1bc/0x1e8
> LR is at clear_page_dirty_for_io+0x14/0x1e8
> pc : [<ffffffc00033c91c>] lr : [<ffffffc00033c774>] pstate: 40000145
> sp : ffffffc02e9af4f0
> Process kworker/u8:7 (pid: 31525, stack limit = 0xffffffc02e9ac020)
> Call trace:
> [<ffffffc00033c91c>] clear_page_dirty_for_io+0x1bc/0x1e8
> [<ffffffbffc514674>] extent_clear_unlock_delalloc+0x1e4/0x210 [btrfs]
> [<ffffffbffc4fb168>] run_delalloc_nocow+0x3b8/0x948 [btrfs]
> [<ffffffbffc4fb948>] run_delalloc_range+0x250/0x3a8 [btrfs]
> [<ffffffbffc514c0c>] writepage_delalloc.isra.21+0xbc/0x1d8 [btrfs]
> [<ffffffbffc516048>] __extent_writepage+0xe8/0x248 [btrfs]
> [<ffffffbffc51630c>] extent_write_cache_pages.isra.17+0x164/0x378 [btrfs]
> [<ffffffbffc5185a8>] extent_writepages+0x48/0x68 [btrfs]
> [<ffffffbffc4f5828>] btrfs_writepages+0x20/0x30 [btrfs]
> [<ffffffc00033d758>] do_writepages+0x30/0x88
> [<ffffffc0003ba0f4>] __writeback_single_inode+0x34/0x198
> [<ffffffc0003ba6c4>] writeback_sb_inodes+0x184/0x3c0
> [<ffffffc0003ba96c>] __writeback_inodes_wb+0x6c/0xc0
> [<ffffffc0003bac20>] wb_writeback+0x1b8/0x1c0
> [<ffffffc0003bb0f0>] wb_workfn+0x150/0x250
> [<ffffffc0002b0014>] process_one_work+0x1dc/0x388
> [<ffffffc0002b02f0>] worker_thread+0x130/0x500
> [<ffffffc0002b6344>] kthread+0x10c/0x110
> [<ffffffc000284590>] ret_from_fork+0x10/0x40
> Code: d503201f a9025bb5 a90363b7 f90023b9 (d4210000)
> ---[ end trace 65fecee7c2296f25 ]---
>
> Signed-off-by: Robbie Ko <robbieko@synology.com>
As there's a reviewed-by I can fix the small issues at commit time, no
need to resend. Thanks.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-10-30 16:31 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-30 10:04 [PATCH] Btrfs: fix cur_offset in the error case for nocow robbieko
2018-10-30 11:45 ` Filipe Manana
2018-10-30 16:31 ` David Sterba
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.