Re: [PATCH v3 00/12] Enable per-file/directory DAX operations V3

From: Ira Weiny
Date: Mon Feb 17 2020 - 21:35:52 EST


On Fri, Feb 14, 2020 at 05:58:10PM -0500, Jeff Moyer wrote:
> Hi, Ira,
>
> Jeff Moyer <jmoyer@xxxxxxxxxx> writes:
>
> > I'll try to get some testing in on this series, now.
>
> This series panics in xfstests generic/013, when run like so:
>
> MKFS_OPTIONS="-m reflink=0" MOUNT_OPTIONS="-o dax" ./check -g auto
>
> I'd dig in further, but it's late on a Friday. You understand. :)

Yep... and a long weekend if you are in the US... I ran the test with V4 and
got the panic below.

Is this similar to what you see? If so I'll work on it in V4. FWIW with '-o
dax' specified I don't see how fsstress is causing an issue with my patch set.
Does fsstress attempt to change dax states? I don't see that in the test but
I'm not real familiar with generic/013 and fsstress.

If my disassembly of read_pages is correct it looks like readpage is null which
makes sense because all files should be IS_DAX() == true due to the mount option...

But tracing code indicates that the patch:

fs: remove unneeded IS_DAX() check

... may be the culprit and the following fix may work...

diff --git a/mm/filemap.c b/mm/filemap.c
index 3a7863ba51b9..7eaf74a2a39b 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -2257,7 +2257,7 @@ generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter)
if (!count)
goto out; /* skip atime */

- if (iocb->ki_flags & IOCB_DIRECT) {
+ if (iocb->ki_flags & IOCB_DIRECT || IS_DAX(inode)) {
struct file *file = iocb->ki_filp;
struct address_space *mapping = file->f_mapping;
struct inode *inode = mapping->host;

And of course now my server is not responding so I can't reboot to test it...
:-(

I'll continue tomorrow after I go press the power button on the machine since
IPMI has decided not to work... :-(

Ira

[ 1204.461801] BUG: kernel NULL pointer dereference, address: 0000000000000000
[ 1204.472375] #PF: supervisor instruction fetch in kernel mode
[ 1204.481440] #PF: error_code(0x0010) - not-present page
[ 1204.489920] PGD 80000003c273d067 P4D 80000003c273d067 PUD 36a73b067 PMD 0
[ 1204.500396] Oops: 0010 [#1] SMP KASAN PTI
[ 1204.507617] CPU: 6 PID: 15714 Comm: fsstress Not tainted 5.5.0-next-20200207+ #1
[ 1204.518632] Hardware name: Intel Corporation SandyBridge Platform/00, BIOS SE5C600.86B.02.04.0003.102320141138 10/23/2014
[ 1204.533715] RIP: 0010:0x0
[ 1204.539444] Code: Bad RIP value.
[ 1204.545813] RSP: 0018:ffff88837dedf528 EFLAGS: 00010246
[ 1204.554454] RAX: 0000000000000000 RBX: ffffea000cb6ae08 RCX: ffffffff813765fc
[ 1204.565223] RDX: dffffc0000000000 RSI: ffffea000cb6ae00 RDI: ffff8887b032a800
[ 1204.575943] RBP: ffff88837dedf618 R08: fffff9400196d5c1 R09: fffff9400196d5c1
[ 1204.586657] R10: fffff9400196d5c0 R11: ffffea000cb6ae07 R12: ffffea000cb6ae00
[ 1204.597362] R13: ffffffffa0ac3da0 R14: 0000000000000000 R15: ffff888342a14040
[ 1204.608061] FS: 00007fc47c0a8b80(0000) GS:ffff8883c7100000(0000) knlGS:0000000000000000
[ 1204.619869] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 1204.629010] CR2: ffffffffffffffd6 CR3: 0000000325892002 CR4: 00000000000606e0
[ 1204.639695] Call Trace:
[ 1204.645128] read_pages+0x23d/0x2f0
[ 1204.651691] ? read_cache_pages+0x2b0/0x2b0
[ 1204.659030] ? policy_node+0x56/0x60
[ 1204.665675] __do_page_cache_readahead+0x28b/0x2b0
[ 1204.673641] ? read_pages+0x2f0/0x2f0
[ 1204.680286] ondemand_readahead+0x2bf/0x5d0
[ 1204.687561] generic_file_buffered_read+0x992/0x1170
[ 1204.695703] ? read_cache_page_gfp+0x20/0x20
[ 1204.703052] ? down_read_nested+0x10b/0x2d0
[ 1204.710266] ? downgrade_write+0x270/0x270
[ 1204.717399] ? lock_acquire+0x101/0x200
[ 1204.724171] ? generic_file_splice_read+0x20d/0x350
[ 1204.732067] ? generic_file_read_iter+0x3b/0x220
[ 1204.739736] ? xfs_file_buffered_aio_read+0x87/0x1d0 [xfs]
[ 1204.748351] xfs_file_buffered_aio_read+0x92/0x1d0 [xfs]
[ 1204.756759] xfs_file_read_iter+0x120/0x1f0 [xfs]
[ 1204.764420] generic_file_splice_read+0x239/0x350
[ 1204.772072] ? pipe_to_user+0x80/0x80
[ 1204.778476] splice_direct_to_actor+0x1d8/0x460
[ 1204.785831] ? pipe_to_sendpage+0x1a0/0x1a0
[ 1204.792769] ? do_splice_to+0xc0/0xc0
[ 1204.799144] ? selinux_file_permission+0x1d2/0x210
[ 1204.806734] do_splice_direct+0x10c/0x170
[ 1204.813393] ? splice_direct_to_actor+0x460/0x460
[ 1204.820830] ? debug_lockdep_rcu_enabled+0x23/0x60
[ 1204.828349] ? __sb_start_write+0x12c/0x1f0
[ 1204.835177] vfs_copy_file_range+0x309/0x5c0
[ 1204.842085] ? __x64_sys_sendfile+0x160/0x160
[ 1204.849039] ? from_kgid+0xa0/0xa0
[ 1204.854879] ? _copy_to_user+0x6a/0x80
[ 1204.861067] ? cp_new_stat+0x271/0x2c0
[ 1204.867238] ? __ia32_sys_lstat+0x30/0x30
[ 1204.873672] ? down_read_non_owner+0x2e0/0x2e0
[ 1204.880579] __x64_sys_copy_file_range+0x17a/0x310
[ 1204.887844] ? __ia32_sys_copy_file_range+0x320/0x320
[ 1204.895369] ? lockdep_hardirqs_off+0x1a/0x140
[ 1204.902142] do_syscall_64+0x78/0x300
[ 1204.908056] entry_SYSCALL_64_after_hwframe+0x49/0xbe
[ 1204.915507] RIP: 0033:0x7fc47c1a1d6d
[ 1204.921283] Code: 00 c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d eb 80 0c 00 f7 d8 64 89 01 48
[ 1204.946109] RSP: 002b:00007ffd9cc4cc08 EFLAGS: 00000202 ORIG_RAX: 0000000000000146
[ 1204.956531] RAX: ffffffffffffffda RBX: 0000000000000047 RCX: 00007fc47c1a1d6d
[ 1204.966477] RDX: 0000000000000004 RSI: 00007ffd9cc4cc40 RDI: 0000000000000003
[ 1204.976394] RBP: 000000000061a35e R08: 000000000000f15b R09: 0000000000000000
[ 1204.986279] R10: 00007ffd9cc4cc48 R11: 0000000000000202 R12: 0000000000000003
[ 1204.996142] R13: 000000000000f15b R14: 00000000000326f7 R15: 0000000000159373
[ 1205.005983] Modules linked in: vfat fat isofs rfkill ib_isert
iscsi_target_mod ib_srpt target_core_mod ib_srp scsi_transport_srp opa_vnic
rpcrdma sunrpc rdma_ucm ib_iser ib_umad rdma_cm ib_ipoib iw_cm dax_pmem_compat
libiscsi iTCO_wdt device_dax nd_pmem ib_cm dax_pmem_core nd_btt
iTCO_vendor_support scsi_transport_iscsi snd_hda_codec_realtek
snd_hda_codec_generic ledtrig_audio sb_edac x86_pkg_temp_thermal
intel_powerclamp coretemp crct10dif_pclmul crc32_pclmul ghash_clmulni_intel
snd_hda_intel hfi1 snd_intel_dspcfg snd_hda_codec snd_hda_core aesni_intel
snd_hwdep crypto_simd snd_pcm rdmavt snd_timer nd_e820 ib_uverbs cryptd
libnvdimm snd ib_core soundcore glue_helper ipmi_si mei_me ipmi_devintf pcspkr
mei i2c_i801 ipmi_msghandler lpc_ich mfd_core ioatdma wmi acpi_cpufreq
sch_fq_codel xfs libcrc32c mlx4_en sr_mod cdrom sd_mod t10_pi mgag200
drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops drm_vram_helper
drm_ttm_helper ahci ttm crc32c_intel libahci mlx4_core isci igb libsas drm
[ 1205.006047] dca scsi_transport_sas firewire_ohci i2c_algo_bit firewire_core
crc_itu_t libata i2c_core dm_mod [last unloaded: mlx4_ib]
[ 1205.140277] CR2: 0000000000000000
[ 1205.146689] ---[ end trace cf133ac3f2876827 ]---

>
> Cheers,
> Jeff
>