linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCHv5 1/1] ext4: mballoc: Use raw_cpu_ptr instead of this_cpu_ptr
@ 2020-06-02 13:47 Ritesh Harjani
  2020-06-03 10:18 ` [PATCH " Ritesh Harjani
       [not found] ` <CGME20200603102422eucas1p109e0d0140e8fc61dc3e57957f2ccf700@eucas1p1.samsung.com>
  0 siblings, 2 replies; 5+ messages in thread
From: Ritesh Harjani @ 2020-06-02 13:47 UTC (permalink / raw)
  To: linux-ext4
  Cc: linux-fsdevel, Jan Kara, tytso, linux-kernel, adilger.kernel,
	sfr, linux-next, syzkaller-bugs, syzbot+82f324bb69744c5f6969,
	Ritesh Harjani

It doesn't really matter in ext4_mb_new_blocks() about whether the code
is rescheduled on any other cpu due to preemption. Because we care
about discard_pa_seq only when the block allocation fails and then too
we add the seq counter of all the cpus against the initial sampled one
to check if anyone has freed any blocks while we were doing allocation.

So just use raw_cpu_ptr instead of this_cpu_ptr to avoid this BUG.

BUG: using smp_processor_id() in preemptible [00000000] code: syz-fuzzer/6927
caller is ext4_mb_new_blocks+0xa4d/0x3b70 fs/ext4/mballoc.c:4711
CPU: 1 PID: 6927 Comm: syz-fuzzer Not tainted 5.7.0-next-20200602-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Call Trace:
 __dump_stack lib/dump_stack.c:77 [inline]
 dump_stack+0x18f/0x20d lib/dump_stack.c:118
 check_preemption_disabled+0x20d/0x220 lib/smp_processor_id.c:48
 ext4_mb_new_blocks+0xa4d/0x3b70 fs/ext4/mballoc.c:4711
 ext4_ext_map_blocks+0x201b/0x33e0 fs/ext4/extents.c:4244
 ext4_map_blocks+0x4cb/0x1640 fs/ext4/inode.c:626
 ext4_getblk+0xad/0x520 fs/ext4/inode.c:833
 ext4_bread+0x7c/0x380 fs/ext4/inode.c:883
 ext4_append+0x153/0x360 fs/ext4/namei.c:67
 ext4_init_new_dir fs/ext4/namei.c:2757 [inline]
 ext4_mkdir+0x5e0/0xdf0 fs/ext4/namei.c:2802
 vfs_mkdir+0x419/0x690 fs/namei.c:3632
 do_mkdirat+0x21e/0x280 fs/namei.c:3655
 do_syscall_64+0x60/0xe0 arch/x86/entry/common.c:359
 entry_SYSCALL_64_after_hwframe+0x44/0xa9

Signed-off-by: Ritesh Harjani <riteshh@linux.ibm.com>
Reported-by: syzbot+82f324bb69744c5f6969@syzkaller.appspotmail.com
---
 fs/ext4/mballoc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
index a9083113a8c0..b79b32dbe3ea 100644
--- a/fs/ext4/mballoc.c
+++ b/fs/ext4/mballoc.c
@@ -4708,7 +4708,7 @@ ext4_fsblk_t ext4_mb_new_blocks(handle_t *handle,
 	}
 
 	ac->ac_op = EXT4_MB_HISTORY_PREALLOC;
-	seq = *this_cpu_ptr(&discard_pa_seq);
+	seq = *raw_cpu_ptr(&discard_pa_seq);
 	if (!ext4_mb_use_preallocated(ac)) {
 		ac->ac_op = EXT4_MB_HISTORY_ALLOC;
 		ext4_mb_normalize_request(ac, ar);
-- 
2.21.3


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 1/1] ext4: mballoc: Use raw_cpu_ptr instead of this_cpu_ptr
  2020-06-02 13:47 [PATCHv5 1/1] ext4: mballoc: Use raw_cpu_ptr instead of this_cpu_ptr Ritesh Harjani
@ 2020-06-03 10:18 ` Ritesh Harjani
       [not found] ` <CGME20200603102422eucas1p109e0d0140e8fc61dc3e57957f2ccf700@eucas1p1.samsung.com>
  1 sibling, 0 replies; 5+ messages in thread
From: Ritesh Harjani @ 2020-06-03 10:18 UTC (permalink / raw)
  To: linux-ext4
  Cc: linux-fsdevel, Jan Kara, tytso, linux-kernel, adilger.kernel,
	sfr, linux-next, syzkaller-bugs, syzbot+82f324bb69744c5f6969,
	Ritesh Harjani

It doesn't really matter in ext4_mb_new_blocks() about whether the code
is rescheduled on any other cpu due to preemption. Because we care
about discard_pa_seq only when the block allocation fails and then too
we add the seq counter of all the cpus against the initial sampled one
to check if anyone has freed any blocks while we were doing allocation.

So just use raw_cpu_ptr instead of this_cpu_ptr to avoid this BUG.

BUG: using smp_processor_id() in preemptible [00000000] code: syz-fuzzer/6927
caller is ext4_mb_new_blocks+0xa4d/0x3b70 fs/ext4/mballoc.c:4711
CPU: 1 PID: 6927 Comm: syz-fuzzer Not tainted 5.7.0-next-20200602-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Call Trace:
 __dump_stack lib/dump_stack.c:77 [inline]
 dump_stack+0x18f/0x20d lib/dump_stack.c:118
 check_preemption_disabled+0x20d/0x220 lib/smp_processor_id.c:48
 ext4_mb_new_blocks+0xa4d/0x3b70 fs/ext4/mballoc.c:4711
 ext4_ext_map_blocks+0x201b/0x33e0 fs/ext4/extents.c:4244
 ext4_map_blocks+0x4cb/0x1640 fs/ext4/inode.c:626
 ext4_getblk+0xad/0x520 fs/ext4/inode.c:833
 ext4_bread+0x7c/0x380 fs/ext4/inode.c:883
 ext4_append+0x153/0x360 fs/ext4/namei.c:67
 ext4_init_new_dir fs/ext4/namei.c:2757 [inline]
 ext4_mkdir+0x5e0/0xdf0 fs/ext4/namei.c:2802
 vfs_mkdir+0x419/0x690 fs/namei.c:3632
 do_mkdirat+0x21e/0x280 fs/namei.c:3655
 do_syscall_64+0x60/0xe0 arch/x86/entry/common.c:359
 entry_SYSCALL_64_after_hwframe+0x44/0xa9

Fixes: 42f56b7a4a7d ("ext4: mballoc: introduce pcpu seqcnt for freeing PA
to improve ENOSPC handling")
Signed-off-by: Ritesh Harjani <riteshh@linux.ibm.com>
Reported-by: syzbot+82f324bb69744c5f6969@syzkaller.appspotmail.com
---
 fs/ext4/mballoc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
index a9083113a8c0..b79b32dbe3ea 100644
--- a/fs/ext4/mballoc.c
+++ b/fs/ext4/mballoc.c
@@ -4708,7 +4708,7 @@ ext4_fsblk_t ext4_mb_new_blocks(handle_t *handle,
 	}
 
 	ac->ac_op = EXT4_MB_HISTORY_PREALLOC;
-	seq = *this_cpu_ptr(&discard_pa_seq);
+	seq = *raw_cpu_ptr(&discard_pa_seq);
 	if (!ext4_mb_use_preallocated(ac)) {
 		ac->ac_op = EXT4_MB_HISTORY_ALLOC;
 		ext4_mb_normalize_request(ac, ar);
-- 
2.21.3


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCHv5 1/1] ext4: mballoc: Use raw_cpu_ptr instead of this_cpu_ptr
       [not found] ` <CGME20200603102422eucas1p109e0d0140e8fc61dc3e57957f2ccf700@eucas1p1.samsung.com>
@ 2020-06-03 10:24   ` Marek Szyprowski
  2020-06-03 10:31     ` Ritesh Harjani
  0 siblings, 1 reply; 5+ messages in thread
From: Marek Szyprowski @ 2020-06-03 10:24 UTC (permalink / raw)
  To: Ritesh Harjani, linux-ext4
  Cc: linux-fsdevel, Jan Kara, tytso, linux-kernel, adilger.kernel,
	sfr, linux-next, syzkaller-bugs, syzbot+82f324bb69744c5f6969

Hi Ritesh,

On 02.06.2020 15:47, Ritesh Harjani wrote:
> It doesn't really matter in ext4_mb_new_blocks() about whether the code
> is rescheduled on any other cpu due to preemption. Because we care
> about discard_pa_seq only when the block allocation fails and then too
> we add the seq counter of all the cpus against the initial sampled one
> to check if anyone has freed any blocks while we were doing allocation.
>
> So just use raw_cpu_ptr instead of this_cpu_ptr to avoid this BUG.
>
> BUG: using smp_processor_id() in preemptible [00000000] code: syz-fuzzer/6927
> caller is ext4_mb_new_blocks+0xa4d/0x3b70 fs/ext4/mballoc.c:4711
> CPU: 1 PID: 6927 Comm: syz-fuzzer Not tainted 5.7.0-next-20200602-syzkaller #0
> Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
> Call Trace:
>   __dump_stack lib/dump_stack.c:77 [inline]
>   dump_stack+0x18f/0x20d lib/dump_stack.c:118
>   check_preemption_disabled+0x20d/0x220 lib/smp_processor_id.c:48
>   ext4_mb_new_blocks+0xa4d/0x3b70 fs/ext4/mballoc.c:4711
>   ext4_ext_map_blocks+0x201b/0x33e0 fs/ext4/extents.c:4244
>   ext4_map_blocks+0x4cb/0x1640 fs/ext4/inode.c:626
>   ext4_getblk+0xad/0x520 fs/ext4/inode.c:833
>   ext4_bread+0x7c/0x380 fs/ext4/inode.c:883
>   ext4_append+0x153/0x360 fs/ext4/namei.c:67
>   ext4_init_new_dir fs/ext4/namei.c:2757 [inline]
>   ext4_mkdir+0x5e0/0xdf0 fs/ext4/namei.c:2802
>   vfs_mkdir+0x419/0x690 fs/namei.c:3632
>   do_mkdirat+0x21e/0x280 fs/namei.c:3655
>   do_syscall_64+0x60/0xe0 arch/x86/entry/common.c:359
>   entry_SYSCALL_64_after_hwframe+0x44/0xa9
>
> Signed-off-by: Ritesh Harjani <riteshh@linux.ibm.com>
> Reported-by: syzbot+82f324bb69744c5f6969@syzkaller.appspotmail.com

This fixes the warning observed on various Samsung Exynos SoC based 
boards with linux-next 20200602.

Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>

> ---
>   fs/ext4/mballoc.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
> index a9083113a8c0..b79b32dbe3ea 100644
> --- a/fs/ext4/mballoc.c
> +++ b/fs/ext4/mballoc.c
> @@ -4708,7 +4708,7 @@ ext4_fsblk_t ext4_mb_new_blocks(handle_t *handle,
>   	}
>   
>   	ac->ac_op = EXT4_MB_HISTORY_PREALLOC;
> -	seq = *this_cpu_ptr(&discard_pa_seq);
> +	seq = *raw_cpu_ptr(&discard_pa_seq);
>   	if (!ext4_mb_use_preallocated(ac)) {
>   		ac->ac_op = EXT4_MB_HISTORY_ALLOC;
>   		ext4_mb_normalize_request(ac, ar);

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCHv5 1/1] ext4: mballoc: Use raw_cpu_ptr instead of this_cpu_ptr
  2020-06-03 10:24   ` [PATCHv5 " Marek Szyprowski
@ 2020-06-03 10:31     ` Ritesh Harjani
  2020-06-09 10:57       ` Ritesh Harjani
  0 siblings, 1 reply; 5+ messages in thread
From: Ritesh Harjani @ 2020-06-03 10:31 UTC (permalink / raw)
  To: Marek Szyprowski, linux-ext4, tytso
  Cc: linux-fsdevel, Jan Kara, linux-kernel, adilger.kernel, sfr,
	linux-next, syzkaller-bugs, syzbot+82f324bb69744c5f6969

> This fixes the warning observed on various Samsung Exynos SoC based
> boards with linux-next 20200602.
> 
> Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
> 

Thanks Marek,

Hello Ted,

Please pick up below change which I just sent with an added "Fixes" by
tag. Changes wise it is the same which Marek tested.

https://patchwork.ozlabs.org/project/linux-ext4/patch/20200603101827.2824-1-riteshh@linux.ibm.com/


-ritesh

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCHv5 1/1] ext4: mballoc: Use raw_cpu_ptr instead of this_cpu_ptr
  2020-06-03 10:31     ` Ritesh Harjani
@ 2020-06-09 10:57       ` Ritesh Harjani
  0 siblings, 0 replies; 5+ messages in thread
From: Ritesh Harjani @ 2020-06-09 10:57 UTC (permalink / raw)
  To: Marek Szyprowski, linux-ext4, tytso
  Cc: linux-fsdevel, Jan Kara, linux-kernel, adilger.kernel, sfr,
	linux-next, syzkaller-bugs, syzbot+82f324bb69744c5f6969

This patch is superseded by

https://patchwork.ozlabs.org/project/linux-ext4/patch/534f275016296996f54ecf65168bb3392b6f653d.1591699601.git.riteshh@linux.ibm.com/

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-06-09 10:57 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-02 13:47 [PATCHv5 1/1] ext4: mballoc: Use raw_cpu_ptr instead of this_cpu_ptr Ritesh Harjani
2020-06-03 10:18 ` [PATCH " Ritesh Harjani
     [not found] ` <CGME20200603102422eucas1p109e0d0140e8fc61dc3e57957f2ccf700@eucas1p1.samsung.com>
2020-06-03 10:24   ` [PATCHv5 " Marek Szyprowski
2020-06-03 10:31     ` Ritesh Harjani
2020-06-09 10:57       ` Ritesh Harjani

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).