On Wed, Dec 25, 2019 at 08:17:29AM +0000, Justin He wrote:
> Hi Murphy
> 
> > -----Original Message-----
> > From: Murphy Zhou <[email protected]>
> > Sent: Wednesday, December 25, 2019 1:42 PM
> > To: [email protected]; Justin He <[email protected]>; Ross Zwisler
> > <[email protected]>
> > Subject: [PATCH] mm: get rid of WARN if failed to cow user pages
> >
> > By running xfstests with fsdax enabled, generic/437 always hits this
> > warning[1] since this commit:
> >
> > commit 83d116c53058d505ddef051e90ab27f57015b025
> > Author: Jia He <[email protected]>
> > Date:   Fri Oct 11 22:09:39 2019 +0800
> >
> >     mm: fix double page fault on arm64 if PTE_AF is cleared
> >
> > Looking at the test program[2] generic/437 uses, it's pretty easy
> > to hit this warning. Remove this WARN as it seems not necessary.
> >
> > [2] https://git.kernel.org/pub/scm/fs/xfs/xfstests-
> > dev.git/tree/src/t_mmap_cow_race.c
> > [1] warning message:
> > -----------------------------------------------------------------------
> > [   97.344077] WARNING: CPU: 0 PID: 2486 at mm/memory.c:2281
> It is hard for me to reproduce it in my x86 desktop when running that 
> generic/437
> 
> Could you please share your test env? E.g. guest or host? What is the 
> test_dev of
> your xfstests? Is it a 100% reproducible issue?

It's a kvm guest, with pmem ramdisks. 100% reproducible.

[root@8u ~]# uname -r
5.5.0-rc3-v5.5-rc3
[root@8u ~]# cat /proc/cmdline
BOOT_IMAGE=(hd0,msdos2)/boot/vmlinuz-5.5.0-rc3-v5.5-rc3 
root=UUID=62b76d7e-e314-4400-9ea7-ded0de2f9fca ro crashkernel=auto 
resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/swap console=ttyS0,115200 
memmap=5G!6G memmap=5G!13G
[root@8u ~]# lspci
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
00:02.0 VGA compatible controller: Red Hat, Inc. QXL paravirtual graphic card 
(rev 04)
00:03.0 Ethernet controller: Realtek Semiconductor Co., Ltd.  
RTL-8100/8101L/8139 PCI Fast Ethernet Adapter (rev 20)
00:04.0 Audio device: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) 
High Definition Audio Controller (rev 01)
00:05.0 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI 
Controller #1 (rev 03)
00:05.1 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI 
Controller #2 (rev 03)
00:05.2 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI 
Controller #3 (rev 03)
00:05.7 USB controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI 
Controller #1 (rev 03)
00:06.0 Communication controller: Red Hat, Inc. Virtio console
00:07.0 Unclassified device [00ff]: Red Hat, Inc. Virtio memory balloon
00:08.0 Ethernet controller: Realtek Semiconductor Co., Ltd.  
RTL-8100/8101L/8139 PCI Fast Ethernet Adapter (rev 20)
[root@8u ~]#
[root@8u ~]# ndctl list
[
  {
    "dev":"namespace0.0",
    "mode":"fsdax",
    "map":"mem",
    "size":5368709120,
    "sector_size":512,
    "blockdev":"pmem0"
  }
]
[root@8u ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0  620G  0 disk
├─sda1          8:1    0    2G  0 part
│ └─rhel-swap 253:0    0    2G  0 lvm  [SWAP]
└─sda2          8:2    0  618G  0 part /
sdb             8:16   0  200G  0 disk /home
sdc             8:32   0   20G  0 disk
├─sdc1          8:33   0   10G  0 part
└─sdc2          8:34   0   10G  0 part
pmem0         259:0    0    5G  0 disk
├─pmem0p1     259:1    0  2.4G  0 part
└─pmem0p2     259:2    0  2.6G  0 part
[root@8u ~]#

[root@8u xfstests-dev (master)]# cat local.config
TEST_DEV=/dev/pmem0p1
TEST_DIR=/test2
SCRATCH_DEV=/dev/pmem0p2
SCRATCH_MNT=/test1
FSTYP=xfs
MOUNT_OPTIONS="-o dax"
TEST_FS_MOUNT_OPTS="-o dax"
MKFS_OPTIONS="-f -b size=4096 -m reflink=0"
LOGWRITES_DEV=""
[root@8u xfstests-dev (master)]#
> 
> Besides, a few days ago, syzbot reported a similar issue, Kirill relied his 
> concerns
> at [1]
> 
> [1] https://www.spinics.net/lists/linux-mm/msg199008.html
> 
> --
> Cheers,
> Justin (Jia He)
> 
> 
> > wp_page_copy+0x687/0x6e0
> > [   97.348354] Modules linked in: nf_tables nfnetlink rfkill sunrpc
> > snd_hda_codec_generic ledtrig_audio qxl snd_hda_intel snd_intel_dspcfg
> > drm_ttm_helper snd_hda_codec ttm snd_hda_core drm_kms_helper
> > snd_hwdep snd_seq syscopyarea sysfillrect sysimgblt snd_seq_device
> > fb_sys_fops snd_pcm drm snd_timer crc32_pclmul snd soundcore
> > dax_pmem_compat i2c_piix4 device_dax virtio_balloon pcspkr joydev
> > dax_pmem_core ip_tables xfs libcrc32c crct10dif_pclmul crc32c_intel sd_mod
> > sg ata_generic 8139too ata_piix libata ghash_clmulni_intel 8139cp
> > virtio_console serio_raw nd_pmem mii dm_mirror dm_region_hash dm_log
> > dm_mod
> > [   97.382176] CPU: 0 PID: 2486 Comm: t_mmap_cow_race Tainted: G        W
> > 5.5.0-rc3-v5.5-rc3 #1
> > [   97.387804] Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011
> > [   97.392228] RIP: 0010:wp_page_copy+0x687/0x6e0
> > [   97.396572] Code: 95 f5 00 48 81 e6 00 f0 ff ff ba 00 10 00 00 49 c1 ff 
> > 06 49
> > c1 e7 0c 4c 03 3d 35 95 f5 00 4c 89 ff e8 8d 85 6a 00 85 c0 74 0a <0f> 0b 
> > 4c 89
> > ff e8 8f 80 6a 00 65 48 8b 04 25 40 7f 01 00 83 a8 d8
> > [   97.413487] RSP: 0000:ffffb882493afd28 EFLAGS: 00010206
> > [   97.417520] RAX: 0000000000001000 RBX: ffffb882493afdf8 RCX:
> > 0000000000001000
> > [   97.422295] RDX: 0000000000001000 RSI: 00007f1d20c00000 RDI:
> > ffff976384d1f000
> > [   97.426914] RBP: 0000000000000000 R08: 0000000000000000 R09:
> > 00000000000ca308
> > [   97.431746] R10: 0000000000000000 R11: ffffe0cd4c1347c0 R12:
> > ffffe0cd4c1347c0
> > [   97.436371] R13: ffff9763b46ba190 R14: ffff9763a963d0c0 R15:
> > ffff976384d1f000
> > [   97.441085] FS:  00007f1d203fe700(0000) GS:ffff9763b8a00000(0000)
> > knlGS:0000000000000000
> > [   97.445500] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> > [   97.448393] CR2: 00007f1d20c00000 CR3: 0000000333dfc000 CR4:
> > 00000000000006f0
> > [   97.452346] Call Trace:
> > [   97.453681]  ? __switch_to_asm+0x34/0x70
> > [   97.455566]  ? __switch_to_asm+0x40/0x70
> > [   97.457418]  ? __switch_to_asm+0x34/0x70
> > [   97.459197]  ? __switch_to_asm+0x40/0x70
> > [   97.460971]  ? __switch_to_asm+0x34/0x70
> > [   97.462746]  ? __switch_to_asm+0x40/0x70
> > [   97.464561]  ? __switch_to_asm+0x34/0x70
> > [   97.466342]  ? __switch_to_asm+0x40/0x70
> > [   97.468141]  do_wp_page+0x8c/0x640
> > [   97.469818]  ? finish_task_switch+0x77/0x2a0
> > [   97.471631]  __handle_mm_fault+0xa06/0x1420
> > [   97.473517]  handle_mm_fault+0xae/0x1d0
> > [   97.475168]  __do_page_fault+0x27f/0x4e0
> > [   97.476947]  do_page_fault+0x30/0x110
> > [   97.478490]  async_page_fault+0x39/0x40
> > [   97.480275] RIP: 0033:0x400d68
> > [   97.481587] Code: 53 48 89 fb 48 83 ec 10 66 2e 0f 1f 84 00 00 00 00 00 
> > 0f
> > b6 03 ba 04 00 00 00 be 00 00 20 00 48 89 df 89 44 24 0c 8b 44 24 0c <88> 03
> > e8 71 fc ff ff 85 c0 78 30 e8 b8 fc ff ff 89 c7 41 f7 ec 89
> > [   97.489326] RSP: 002b:00007f1d203fded0 EFLAGS: 00010202
> > [   97.491336] RAX: 0000000000000001 RBX: 00007f1d20c00000 RCX:
> > 0000000000000000
> > [   97.494080] RDX: 0000000000000004 RSI: 0000000000200000 RDI:
> > 00007f1d20c00000
> > [   97.497244] RBP: 0000000000000002 R08: 00007f1d2138d230 R09:
> > 00007f1d2138d260
> > [   97.500028] R10: 00007f1d203fe9d0 R11: 0000000000000000 R12:
> > 0000000051eb851f
> > [   97.502785] R13: 00007fff01d5607f R14: 0000000000000000 R15:
> > 00007f1d203fdfc0
> > [   97.505546] ---[ end trace 18f1c94bd7c3d1e1 ]---
> >
> > Signed-off-by: Murphy Zhou <[email protected]>
> > ---
> >  mm/memory.c | 14 ++++----------
> >  1 file changed, 4 insertions(+), 10 deletions(-)
> >
> > diff --git a/mm/memory.c b/mm/memory.c
> > index 45442d9..e3a1dce 100644
> > --- a/mm/memory.c
> > +++ b/mm/memory.c
> > @@ -2269,18 +2269,12 @@ static inline bool cow_user_page(struct page
> > *dst, struct page *src,
> >
> >       /*
> >        * This really shouldn't fail, because the page is there
> > -      * in the page tables. But it might just be unreadable,
> > -      * in which case we just give up and fill the result with
> > -      * zeroes.
> > +      * in the page tables. But it could happen during races,
> > +      * or it might just be unreadable, in which cases we
> > +      * just give up and fill the result with zeroes.
> >        */
> > -     if (__copy_from_user_inatomic(kaddr, uaddr, PAGE_SIZE)) {
> > -             /*
> > -              * Give a warn in case there can be some obscure
> > -              * use-case
> > -              */
> > -             WARN_ON_ONCE(1);
> > +     if (__copy_from_user_inatomic(kaddr, uaddr, PAGE_SIZE))
> >               clear_page(kaddr);
> > -     }
> >
> >       ret = true;
> >
> > --
> > 1.8.3.1
> 
> IMPORTANT NOTICE: The contents of this email and any attachments are 
> confidential and may also be privileged. If you are not the intended 
> recipient, please notify the sender immediately and do not disclose the 
> contents to any other person, use it for any purpose, or store or copy the 
> information in any medium. Thank you.
_______________________________________________
Linux-nvdimm mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to