android_kernel_xiaomi_sm8450/drivers
Jason Baron 5e9aff5b10 md/raid0: add discard support for the 'original' layout
commit e836007089ba8fdf24e636ef2b007651fb4582e6 upstream.

We've found that using raid0 with the 'original' layout and discard
enabled with different disk sizes (such that at least two zones are
created) can result in data corruption. This is due to the fact that
the discard handling in 'raid0_handle_discard()' assumes the 'alternate'
layout. We've seen this corruption using ext4 but other filesystems are
likely susceptible as well.

More specifically, while multiple zones are necessary to create the
corruption, the corruption may not occur with multiple zones if they
layout in such a way the layout matches what the 'alternate' layout
would have produced. Thus, not all raid0 devices with the 'original'
layout, different size disks and discard enabled will encounter this
corruption.

The 3.14 kernel inadvertently changed the raid0 disk layout for different
size disks. Thus, running a pre-3.14 kernel and post-3.14 kernel on the
same raid0 array could corrupt data. This lead to the creation of the
'original' layout (to match the pre-3.14 layout) and the 'alternate' layout
(to match the post 3.14 layout) in the 5.4 kernel time frame and an option
to tell the kernel which layout to use (since it couldn't be autodetected).
However, when the 'original' layout was added back to 5.4 discard support
for the 'original' layout was not added leading this issue.

I've been able to reliably reproduce the corruption with the following
test case:

1. create raid0 array with different size disks using original layout
2. mkfs
3. mount -o discard
4. create lots of files
5. remove 1/2 the files
6. fstrim -a (or just the mount point for the raid0 array)
7. umount
8. fsck -fn /dev/md0 (spews all sorts of corruptions)

Let's fix this by adding proper discard support to the 'original' layout.
The fix 'maps' the 'original' layout disks to the order in which they are
read/written such that we can compare the disks in the same way that the
current 'alternate' layout does. A 'disk_shift' field is added to
'struct strip_zone'. This could be computed on the fly in
raid0_handle_discard() but by adding this field, we save some computation
in the discard path.

Note we could also potentially fix this by re-ordering the disks in the
zones that follow the first one, and then always read/writing them using
the 'alternate' layout. However, that is seen as a more substantial change,
and we are attempting the least invasive fix at this time to remedy the
corruption.

I've verified the change using the reproducer mentioned above. Typically,
the corruption is seen after less than 3 iterations, while the patch has
run 500+ iterations.

Cc: NeilBrown <neilb@suse.de>
Cc: Song Liu <song@kernel.org>
Fixes: c84a1372df ("md/raid0: avoid RAID0 data corruption due to layout confusion.")
Cc: stable@vger.kernel.org
Signed-off-by: Jason Baron <jbaron@akamai.com>
Signed-off-by: Song Liu <song@kernel.org>
Link: https://lore.kernel.org/r/20230623180523.1901230-1-jbaron@akamai.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-07-27 08:44:29 +02:00
..
accessibility speakup: fix a segfault caused by switching consoles 2022-11-25 17:45:50 +01:00
acpi ACPI: thermal: drop an always true check 2023-06-09 10:30:15 +02:00
amba
android binder: fix UAF caused by faulty buffer cleanup 2023-06-05 09:07:04 +02:00
ata ata: ahci: fix enum constants for gcc-13 2023-06-14 11:09:29 +02:00
atm atm: idt77252: fix kmemleak when rmmod idt77252 2023-04-05 11:23:35 +02:00
auxdisplay
base PM: domains: fix integer overflow issues in genpd_parse_state() 2023-07-27 08:43:33 +02:00
bcma
block xen/blkfront: Only check REQ_FUA for writes 2023-06-21 15:45:36 +02:00
bluetooth Bluetooth: hci_qca: fix debugfs registration 2023-06-14 11:09:52 +02:00
bus bus: ti-sysc: Fix dispc quirk masking bool variables 2023-07-27 08:43:46 +02:00
cdrom
char hwrng: imx-rngc - fix the timeout for init and self check 2023-07-27 08:44:27 +02:00
clk clk: qcom: ipq6018: fix networking resets 2023-07-27 08:44:03 +02:00
clocksource clocksource/drivers/cadence-ttc: Fix memory leak in ttc_timer_probe 2023-07-27 08:43:33 +02:00
connector
counter counter: 104-quad-8: Fix race condition between FLAG and CNTR reads 2023-05-17 11:47:28 +02:00
cpufreq cpufreq: intel_pstate: Fix energy_performance_preference for passive 2023-07-27 08:43:34 +02:00
cpuidle cpuidle: psci: Iterate backwards over list in psci_pd_remove() 2023-03-22 13:30:05 +01:00
crypto crypto: marvell/cesa - Fix type mismatch warning 2023-07-27 08:44:00 +02:00
dax dax: Introduce alloc_dev_dax_id() 2023-07-27 08:44:00 +02:00
dca
devfreq PM/devfreq: governor: Add a private governor_data for governor 2023-01-14 10:16:31 +01:00
dio drivers: dio: fix possible memory leak in dio_init() 2023-01-14 10:15:54 +01:00
dma dmaengine: pl330: rename _start to prevent build error 2023-06-09 10:30:04 +02:00
dma-buf dma-buf: fix racing conflict of dma_heap_add() 2022-12-02 17:40:01 +01:00
edac EDAC/skx: Fix overflows on the DRAM row address mapping arrays 2023-05-17 11:47:39 +02:00
eisa
extcon extcon: Fix kernel doc of property capability fields to avoid warnings 2023-07-27 08:44:04 +02:00
firewire firewire: fix memory leak for payload of request subaction to IEC 61883-1 FCP region 2023-02-15 17:22:09 +01:00
firmware firmware: arm_sdei: Fix sleep from invalid context BUG 2023-05-30 12:57:48 +01:00
fpga fpga: bridge: fix kernel-doc parameter description 2023-05-17 11:47:55 +02:00
fsi WRITE is "data source", not destination... 2023-02-15 17:22:11 +01:00
gnss
gpio gpiolib: Fix GPIO chip IRQ initialization restriction 2023-06-28 10:28:13 +02:00
gpu drm/panel: simple: Add Powertip PH800480T013 drm_display_mode flags 2023-07-27 08:44:19 +02:00
greybus
hid HID: logitech-hidpp: add HIDPP_QUIRK_DELAYED_INIT for the T651. 2023-07-27 08:43:31 +02:00
hsi HSI: omap_ssi_core: Fix error handling in ssi_init() 2023-01-14 10:16:03 +01:00
hv Drivers: hv: vmbus: Fix vmbus_wait_for_unload() to scan present CPUs 2023-06-28 10:28:07 +02:00
hwmon hwmon: (pmbus/adm1275) Fix problems with temperature monitoring on ADM1272 2023-07-27 08:43:52 +02:00
hwspinlock hwspinlock: qcom: correct MMIO max register for newer SoCs 2022-11-16 09:57:07 +01:00
hwtracing coresight: Fix loss of connection info when a module is unloaded 2023-07-27 08:44:05 +02:00
i2c i2c: qup: Add missing unwind goto in qup_i2c_probe() 2023-07-27 08:44:11 +02:00
i3c
ide
idle
iio iio: dac: build ad5758 driver when AD5758 is selected 2023-06-09 10:30:14 +02:00
infiniband RDMA/bnxt_re: Avoid calling wake_up threads from spin_lock context 2023-07-27 08:43:53 +02:00
input Input: adxl34x - do not hardcode interrupt trigger type 2023-07-27 08:43:46 +02:00
interconnect interconnect: qcom: osm-l3: fix icc_onecell_data allocation 2023-04-05 11:23:29 +02:00
iommu iommu/amd: Don't block updates to GATag if guest mode is on 2023-06-09 10:30:04 +02:00
ipack
irqchip irqchip/jcore-aic: Fix missing allocation of IRQ descriptors 2023-07-27 08:43:33 +02:00
isdn mISDN: hfcmulti: don't call dev_kfree_skb/kfree_skb() under spin_lock_irqsave() 2023-01-14 10:16:10 +01:00
leds leds: trigger: netdev: Recheck NETDEV_LED_MODE_LINKUP on dev rename 2023-07-27 08:44:14 +02:00
lightnvm
macintosh macintosh: via-pmu-led: requires ATA to be set 2023-05-17 11:48:00 +02:00
mailbox mailbox: ti-msgmgr: Fill non-message tx data fields with 0x0 2023-07-27 08:44:08 +02:00
mcb mcb-pci: Reallocate memory region to avoid memory overlapping 2023-05-30 12:57:50 +01:00
md md/raid0: add discard support for the 'original' layout 2023-07-27 08:44:29 +02:00
media media: cec: i2c: ch7322: also select REGMAP 2023-07-27 08:44:08 +02:00
memory memory: brcmstb_dpfe: fix testing array offset after use 2023-07-27 08:43:48 +02:00
memstick memstick r592: make memstick_debug_get_tpc_name() static 2023-07-27 08:43:40 +02:00
message scsi: message: mptlan: Fix use after free bug in mptlan_remove() due to race condition 2023-05-30 12:57:49 +01:00
mfd mfd: stmpe: Only disable the regulators if they are enabled 2023-07-27 08:44:07 +02:00
misc misc: pci_endpoint_test: Re-init completion for every test 2023-07-27 08:44:29 +02:00
mmc mmc: sdhci: fix DMA configure compatibility issue when 64bit DMA mode is used. 2023-07-27 08:44:12 +02:00
most
mtd mtd: rawnand: meson: fix unaligned DMA buffers handling 2023-07-27 08:44:25 +02:00
mux
net net: bcmgenet: Ensure MDIO unregistration has clocks enabled 2023-07-27 08:44:26 +02:00
nfc nfcsim.c: Fix error checking for debugfs_create_dir 2023-06-28 10:28:14 +02:00
ntb NTB: ntb_tool: Add check for devm_kcalloc 2023-07-27 08:44:22 +02:00
nubus nubus: Partially revert proc_create_single_data() conversion 2023-07-27 08:43:31 +02:00
nvdimm
nvme nvme-pci: fix DMA direction of unmapping integrity data 2023-07-27 08:44:25 +02:00
nvmem nvmem: core: fix return value 2023-02-22 12:56:00 +01:00
of of: Fix modalias string generation 2023-05-17 11:47:56 +02:00
opp OPP: fix error checking in opp_migrate_dentry() 2023-03-11 16:39:26 +01:00
oprofile
parisc parisc: led: Fix potential null-ptr-deref in start_task() 2023-01-14 10:16:36 +01:00
parport parport_pc: Avoid FIFO port location truncation 2022-11-25 17:45:44 +01:00
pci PCI: rockchip: Set address alignment for endpoint mode 2023-07-27 08:44:28 +02:00
pcmcia
perf perf/arm-cmn: Fix DTC reset 2023-07-27 08:43:33 +02:00
phy phy: tegra: xusb: check return value of devm_kzalloc() 2023-07-27 08:44:07 +02:00
pinctrl pinctrl: amd: Only use special debounce behavior for GPIO 0 2023-07-27 08:44:25 +02:00
platform platform/x86: wmi: Break possible infinite loop when parsing GUID 2023-07-27 08:44:23 +02:00
pnp PNP: fix name memory leak in pnp_alloc_dev() 2023-01-14 10:15:17 +01:00
power power: supply: Fix logic checking if system is running from battery 2023-06-21 15:45:36 +02:00
powercap powercap: RAPL: Fix CONFIG_IOSF_MBI dependency 2023-07-27 08:43:34 +02:00
pps
ps3
ptp ptp_qoriq: fix memory leak in probe() 2023-04-05 11:23:47 +02:00
pwm pwm: sysfs: Do not apply state to already disabled PWMs 2023-07-27 08:44:07 +02:00
rapidio rapidio: devices: fix missing put_device in mport_cdev_open 2023-01-14 10:15:23 +01:00
ras
regulator regulator: core: Streamline debugfs operations 2023-07-27 08:43:38 +02:00
remoteproc remoteproc: stm32_rproc: Add mutex protection for workqueue 2023-05-30 12:57:48 +01:00
reset
rpmsg rpmsg: glink: Avoid infinite loop on intent for missing channel 2023-03-11 16:39:47 +01:00
rtc rtc: st-lpc: Release some resources in st_rtc_probe() in case of error 2023-07-27 08:44:07 +02:00
s390 s390/qeth: Fix vipa deletion 2023-07-27 08:44:10 +02:00
sbus
scsi scsi: qla2xxx: Fix error code in qla2x00_start_sp() 2023-07-27 08:44:20 +02:00
sfi
sh
siox siox: fix possible memory leak in siox_device_add() 2022-11-25 17:45:44 +01:00
slimbus slimbus: stream: correct presence rate frequencies 2022-11-25 17:45:50 +01:00
soc drivers: meson: secure-pwrc: always enable DMA domain 2023-07-27 08:43:55 +02:00
soundwire soundwire: cadence: Drain the RX FIFO after an IO timeout 2023-03-11 16:40:18 +01:00
spi spi: bcm-qspi: return error if neither hif_mspi nor mspi is available 2023-07-27 08:44:08 +02:00
spmi spmi: Add a check for remove callback when removing a SPMI driver 2023-05-17 11:47:59 +02:00
ssb
staging media: atomisp: gmin_platform: fix out_len in gmin_get_config_dsm_var() 2023-07-27 08:44:05 +02:00
target scsi: target: iscsi: Prevent login threads from racing between each other 2023-06-28 10:28:14 +02:00
tc
tee tee: amdtee: Add return_origin to 'struct tee_cmd_load_ta' 2023-06-14 11:09:53 +02:00
thermal thermal/drivers/sun8i: Fix some error handling paths in sun8i_ths_probe() 2023-07-27 08:43:34 +02:00
thunderbolt thunderbolt: Use const qualifier for ring_interrupt_index 2023-04-05 11:23:37 +02:00
tty tty: serial: fsl_lpuart: add earlycon for imx8ulp platform 2023-07-27 08:44:18 +02:00
uio uio: uio_dmem_genirq: Fix deadlock between irq config and handling 2023-01-14 10:15:55 +01:00
usb Revert "usb: common: usb-conn-gpio: Set last role to unknown before initial detection" 2023-07-27 08:44:06 +02:00
vdpa vdpa/mlx5: Don't clear mr struct on destroy MR 2023-03-11 16:39:45 +01:00
vfio vfio/type1: prevent underflow of locked_vm via exec() 2023-03-11 16:40:07 +01:00
vhost vhost: support PACKED when setting-getting vring_base 2023-06-14 11:09:57 +02:00
video fbdev: omapfb: lcd_mipid: Fix an error handling path in mipid_spi_probe() 2023-07-27 08:43:51 +02:00
virt
virtio
visorbus
vlynq
vme vme: Fix error not catched in fake_init() 2023-01-14 10:16:00 +01:00
w1 w1: fix loop in w1_fini() 2023-07-27 08:44:02 +02:00
watchdog watchdog: menz069_wdt: fix watchdog initialisation 2023-06-09 10:30:07 +02:00
xen xen/pvcalls-back: fix double frees with pvcalls_new_active_socket() 2023-05-30 12:57:58 +01:00
zorro
Kconfig
Makefile