I reproduced this problem on the rpi3B+ and rpi2Bv1.1 with armhf kernel. This problem is introduced by enabling two kernel configs for arm32 kernel, they are HIGHMEM and VMSPLIT_3G.
We need to use a single arm32 kernel to support rpi2/3/4, while rpi4 has 1G/2G/4G ram, to support 2G and 4G ram, we have to enable HIGHMEM and VMSPLIT_3G, otherwise we can't get 2G/4G memory in the system. The upstream kernel of https://github.com/raspberrypi/linux.git also has this issue. some explanation: These two configs are specific to 32bit kernel, so we can't reproduce this issue on arm64 kernel. The usb ports on rpi4 are routed to xhci host controller instead of dwc_otg host controller, so we can't reproduce this issue on rpi4 even with armhf kernel. On rpi3A+ board, there are only 512M physical memory, there is no ram to map to highmemory region, so we can't reproduce this problem on rpi3A+. I guess the problem is in the dwc_otg usb host driver, it depends on dma to work, but dma gets a highmem buffer then it can't work normally anymore. I will report this issue to rpi community and try a find a fix asap. so far, the workaround is to set total_mem=512 in the config.txt for rpi2/3 working with 32bit kernel , then there is no memory mapped to highmem region. -- You received this bug notification because you are a member of Kernel Packages, which is subscribed to linux-raspi2 in Ubuntu. https://bugs.launchpad.net/bugs/1852510 Title: IO errors when writing large amounts of data to USB storage in eoan on RPI Status in linux-raspi2 package in Ubuntu: New Status in linux-raspi2 source package in Eoan: New Bug description: Kernel tested: Linux ubuntu 5.3.0-1012-raspi2 #14-Ubuntu SMP Mon Nov 11 10:08:39 UTC 2019 armv7l armv7l armv7l GNU/Linux I've only been able to reproduce this with the armhf kernel and on the following devices: RPI3B+ RPI3B RPI2 At the moment, it does not appear that arm64 is affected, nor are RPI3A+ and RPI4 (at least not the 2GB version) Steps to reproduce: - Insert and mount a USB storage device - cp a large file to it (300-600MB recommended - smaller files will sometimes not trigger it) - sync After running the sync, a lot of IO errors will show up in dmesg like: [ 176.129299] sd 0:0:0:0: [sda] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK [ 176.129326] sd 0:0:0:0: [sda] tag#0 CDB: Write(10) 2a 00 00 2e 24 b0 00 00 f0 00 [ 176.129349] blk_update_request: I/O error, dev sda, sector 3024048 op 0x1:(WRITE) flags 0x4000 phys_seg 15 prio class 0 [ 176.883968] usb 1-1.1.2: reset high-speed USB device number 8 using dwc_otg [ 177.079960] usb 1-1.1.2: reset high-speed USB device number 8 using dwc_otg It eventually finishes, and if you unmount/remount the device, the checksum will be different from the original file. To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/linux-raspi2/+bug/1852510/+subscriptions -- Mailing list: https://launchpad.net/~kernel-packages Post to : kernel-packages@lists.launchpad.net Unsubscribe : https://launchpad.net/~kernel-packages More help : https://help.launchpad.net/ListHelp