On 2021/2/2 下午9:37, Anand Jain wrote:


It is much simpler to reproduce. I am using two systems with different
pagesizes to test the subpage readonly support.

On a host with pagesize = 4k.
   truncate -s 3g 3g.img
   mkfs.btrfs ./3g.img
   mount -o loop,compress=zstd ./3g.img /btrfs
   xfs_io -f -c "pwrite -S 0xab 0 128k" /btrfs/foo
   umount /btrfs

Copy the file 3g.img to another host with pagesize = 64k.
   mount -o ro,loop ./3g.img /btrfs
   sha256sum /btrfs/foo

   leads to Unable to handle kernel NULL pointer dereference

Thanks for the report.

Although in my case, I can't reproduce the crash, but only csum data
mismatch with "csum hole found for disk bytenr range" error message.

Anyway, it should be fixed for compressed read.

I'll investigate the case.

Thanks,
Qu
----------------
[  +0.001387] BTRFS warning (device loop0): csum hole found for disk
bytenr range [13672448, 13676544)
[  +0.001514] BTRFS warning (device loop0): csum failed root 5 ino 257
off 13697024 csum 0xbcd798f5 expected csum 0xf11c5ebf mirror 1
[  +0.002301] BTRFS error (device loop0): bdev /dev/loop0 errs: wr 0, rd
0, flush 0, corrupt 1, gen 0
[  +0.001647] Unable to handle kernel NULL pointer dereference at
virtual address 0000000000000000
[  +0.001670] Mem abort info:
[  +0.000506]   ESR = 0x96000005
[  +0.000471]   EC = 0x25: DABT (current EL), IL = 32 bits
[  +0.000783]   SET = 0, FnV = 0
[  +0.000450]   EA = 0, S1PTW = 0
[  +0.000462] Data abort info:
[  +0.000530]   ISV = 0, ISS = 0x00000005
[  +0.000755]   CM = 0, WnR = 0
[  +0.000466] user pgtable: 64k pages, 48-bit VAs, pgdp=000000010717ce00
[  +0.001027] [0000000000000000] pgd=0000000000000000,
p4d=0000000000000000, pud=0000000000000000
[  +0.001402] Internal error: Oops: 96000005 [#1] PREEMPT SMP

Message from syslogd@aa3 at Feb  2 08:18:05 ...
  kernel:Internal error: Oops: 96000005 [#1] PREEMPT SMP
[  +0.000958] Modules linked in: btrfs blake2b_generic xor xor_neon
zstd_compress raid6_pq crct10dif_ce ip_tables x_tables ipv6
[  +0.001779] CPU: 25 PID: 5754 Comm: kworker/u64:1 Not tainted
5.11.0-rc5+ #10
[  +0.001122] Hardware name: QEMU KVM Virtual Machine, BIOS 0.0.0
02/06/2015
[  +0.001286] Workqueue: btrfs-endio btrfs_work_helper [btrfs]
[  +0.001139] pstate: 20000005 (nzCv daif -PAN -UAO -TCO BTYPE=--)
[  +0.001110] pc : __crc32c_le+0x84/0xe8
[  +0.000726] lr : chksum_digest+0x24/0x40
[  +0.000731] sp : ffff800017def8f0
[  +0.000624] x29: ffff800017def8f0 x28: ffff0000c84dca00
[  +0.000994] x27: ffff0000c44f5400 x26: ffff0000e3a008b0
[  +0.000985] x25: ffff800011df3948 x24: 0000004000000000
[  +0.001006] x23: ffff000000000000 x22: ffff800017defa00
[  +0.000993] x21: 0000000000000004 x20: ffff0000c84dca50
[  +0.000983] x19: ffff800017defc88 x18: 0000000000000010
[  +0.000995] x17: 0000000000000000 x16: ffff800009352a98
[  +0.001008] x15: 000009a9d48628c0 x14: 0000000000000209
[  +0.000999] x13: 00000000000003d1 x12: 0000000000000001
[  +0.000986] x11: 0000000000000001 x10: 00000000000009d0
[  +0.000982] x9 : ffff0000c5418064 x8 : 0000000000000000
[  +0.001008] x7 : 0000000000000000 x6 : ffff800011f23980
[  +0.001025] x5 : 00000000006f6964 x4 : ffff8000105dd7a8
[  +0.000997] x3 : ffff800017defc88 x2 : 0000000000010000
[  +0.000986] x1 : 0000000000000000 x0 : 00000000ffffffff
[  +0.001011] Call trace:
[  +0.000459]  __crc32c_le+0x84/0xe8
[  +0.000649]  crypto_shash_digest+0x34/0x58
[  +0.000766]  check_compressed_csum+0xd0/0x2b0 [btrfs]
[  +0.001011]  end_compressed_bio_read+0xb8/0x308 [btrfs]
[  +0.001060]  bio_endio+0x12c/0x1d8
[  +0.000651]  end_workqueue_fn+0x3c/0x60 [btrfs]
[  +0.000916]  btrfs_work_helper+0xf4/0x5a8 [btrfs]
[  +0.000934]  process_one_work+0x1ec/0x4c0
[  +0.000751]  worker_thread+0x48/0x478
[  +0.000701]  kthread+0x158/0x160
[  +0.000618]  ret_from_fork+0x10/0x34
[  +0.000697] Code: 9ac55c08 9ac65d08 1a880000 b4000122 (a8c21023)
[  +0.001075] ---[ end trace d4f31b4f11a947b7 ]---
[ +14.775765] note: kworker/u64:1[5754] exited with preempt_count 1
------------------------


Thanks, Anand



On 2/2/2021 7:28 PM, Anand Jain wrote:


On 2/2/2021 6:23 PM, Qu Wenruo wrote:


On 2021/2/2 下午5:21, Anand Jain wrote:

Qu,

  fstests ran fine on an aarch64 kvm with this patch set.

Do you mean subpage patchset?

With 4K sector size?
No way it can run fine...

  No . fstests ran with sectorsize == pagesize == 64k. These aren't
  subpage though. I mean just regression checks.

Long enough fsstress can crash the kernel with btrfs_csum_one_bio()
unable to locate the corresponding ordered extent.

  Further, I was running few hand tests as below, and it fails
  with - Unable to handle kernel paging.

  Test case looks something like..

  On x86_64 create btrfs on a file 11g
  copy /usr into /test-mnt stops at enospc
  set compression property on the root sunvol
  run defrag with -czstd

I don't even consider compression a supported feature for subpage.

  It should fail the ro mount, which it didn't. Similar test case
  without compression is fine.

Are you really talking about the subpage patchset with 4K sector size,
on 64K page size AArch64?

  yes readonly mount test case as above.

Thanks, Anand


If really so, I appreciate your effort on testing very much, it means
the patchset is doing way better than it is.
But I don't really believe it's even true to pass fstests....



Thanks,
Qu

  truncate a large file 4gb
  punch holes on it
  truncate couple of smaller files
  unmount
  send file to an aarch64 (64k pagesize) kvm
  mount -o ro
  run sha256sum on all the files

---------------------
[37012.027764] BTRFS warning (device loop0): csum failed root 5 ino 611
off 228659200 csum 0x1dcefc2d expected csum 0x69412d2a mirror 1
[37012.030971] BTRFS error (device loop0): bdev /dev/loop0 errs: wr 0,
rd 0, flush 0, corrupt 9, gen 0
[37012.036223] BTRFS warning (device loop0): csum failed root 5 ino 616
off 228724736 csum 0x73f63661 expected csum 0xaf922a6f mirror 1
[37012.036250] BTRFS error (device loop0): bdev /dev/loop0 errs: wr 0,
rd 0, flush 0, corrupt 10, gen 0
[37012.123917] Unable to handle kernel paging request at virtual
address
0061d1f66c080000
[37012.126104] Mem abort info:
[37012.126951]   ESR = 0x96000004
[37012.127791]   EC = 0x25: DABT (current EL), IL = 32 bits
[37012.129207]   SET = 0, FnV = 0
[37012.130043]   EA = 0, S1PTW = 0
[37012.131269] Data abort info:
[37012.132165]   ISV = 0, ISS = 0x00000004
[37012.133211]   CM = 0, WnR = 0
[37012.134014] [0061d1f66c080000] address between user and kernel
address ranges
[37012.136050] Internal error: Oops: 96000004 [#1] PREEMPT SMP
[37012.137567] Modules linked in: btrfs blake2b_generic xor xor_neon
zstd_compress raid6_pq crct10dif_ce ip_tables x_tables ipv6
[37012.140742] CPU: 0 PID: 289001 Comm: kworker/u64:3 Not tainted
5.11.0-rc5+ #10
[37012.142839] Hardware name: QEMU KVM Virtual Machine, BIOS 0.0.0
02/06/2015
[37012.144787] Workqueue: btrfs-endio btrfs_work_helper [btrfs]
[37012.146474] pstate: 20000005 (nzCv daif -PAN -UAO -TCO BTYPE=--)
[37012.148175] pc : __crc32c_le+0x84/0xe8
[37012.149266] lr : chksum_digest+0x24/0x40
[37012.150420] sp : ffff80001638f8f0
[37012.151491] x29: ffff80001638f8f0 x28: ffff0000c7bb0000
[37012.152982] x27: ffff0000d1a27000 x26: ffff0002f21b56e0
[37012.154565] x25: ffff800011df3948 x24: 0000004000000000
[37012.156063] x23: ffff000000000000 x22: ffff80001638fa00
[37012.157570] x21: 0000000000000004 x20: ffff0000c7bb0050
[37012.159145] x19: ffff80001638fc88 x18: 0000000000000000
[37012.160684] x17: 0000000000000000 x16: 0000000000000000
[37012.162190] x15: 0000051d5454c764 x14: 000000000000017a
[37012.163774] x13: 0000000000000145 x12: 0000000000000001
[37012.165282] x11: 0000000000000000 x10: 00000000000009d0
[37012.166849] x9 : ffff0000ca305564 x8 : 0000000000000000
[37012.168395] x7 : 0000000000000000 x6 : ffff800011f23980
[37012.169883] x5 : 00000000006f6964 x4 : ffff8000105dd7a8
[37012.171476] x3 : ffff80001638fc88 x2 : 0000000000010000
[37012.172997] x1 : bc61d1f66c080000 x0 : 00000000ffffffff
[37012.174642] Call trace:
[37012.175427]  __crc32c_le+0x84/0xe8
[37012.176419]  crypto_shash_digest+0x34/0x58
[37012.177616]  check_compressed_csum+0xd0/0x2b0 [btrfs]
[37012.179160]  end_compressed_bio_read+0xb8/0x308 [btrfs]
[37012.180731]  bio_endio+0x12c/0x1d8
[37012.181712]  end_workqueue_fn+0x3c/0x60 [btrfs]
[37012.183161]  btrfs_work_helper+0xf4/0x5a8 [btrfs]
[37012.184570]  process_one_work+0x1ec/0x4c0
[37012.185727]  worker_thread+0x48/0x478
[37012.186823]  kthread+0x158/0x160
[37012.187768]  ret_from_fork+0x10/0x34
[37012.188791] Code: 9ac55c08 9ac65d08 1a880000 b4000122 (a8c21023)
[37012.190486] ---[ end trace 4f73e813d058b84c ]---
[37019.180684] note: kworker/u64:3[289001] exited with preempt_count 1
---------------

  Could you please take a look?

Thanks, Anand

Reply via email to