linux/drivers/staging
Gao Xiang a112152f6f staging: erofs: fix mis-acted TAIL merging behavior
EROFS has an optimized path called TAIL merging, which is designed
to merge multiple reads and the corresponding decompressions into
one if these requests read continuous pages almost at the same time.

In general, it behaves as follows:
 ________________________________________________________________
  ... |  TAIL  .  HEAD  |  PAGE  |  PAGE  |  TAIL    . HEAD | ...
 _____|_combined page A_|________|________|_combined page B_|____
        1  ]  ->  [  2                          ]  ->  [ 3
If the above three reads are requested in the order 1-2-3, it will
generate a large work chain rather than 3 individual work chains
to reduce scheduling overhead and boost up sequential read.

However, if Read 2 is processed slightly earlier than Read 1,
currently it still generates 2 individual work chains (chain 1, 2)
but it does in-place decompression for combined page A, moreover,
if chain 2 decompresses ahead of chain 1, it will be a race and
lead to corrupted decompressed page. This patch fixes it.

Fixes: 3883a79abd ("staging: erofs: introduce VLE decompression support")
Cc: <stable@vger.kernel.org> # 4.19+
Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-02-27 15:41:57 +01:00
..
android staging: android: ashmem: Avoid range_alloc() allocation with ashmem_mutex held. 2019-02-26 11:50:17 +01:00
axis-fifo staging: axis-fifo: Split line to stay in 80 characters. 2018-11-20 10:59:30 +01:00
board
clocking-wizard staging: clocking-wizard: match parenthesis indentation 2018-10-09 14:57:33 +02:00
comedi staging: comedi: ni_tio: Allocate shadow regs for each counter chip 2019-02-26 11:50:17 +01:00
emxx_udc Staging: emxx_udc: Switch to the gpio descriptor interface 2019-01-15 16:25:58 +01:00
erofs staging: erofs: fix mis-acted TAIL merging behavior 2019-02-27 15:41:57 +01:00
fbtft Staging: fbtft: Fix line over 80 characters 2019-02-26 11:40:07 +01:00
fsl-dpaa2 staging: fsl-dpaa2: ethsw: Add missing netdevice check 2019-02-26 11:52:46 +01:00
fwserial Staging: fwserial: Add blank line after declarations 2019-02-26 11:40:08 +01:00
gasket staging: gasket: interrupt: remove unused including <linux/version.h> 2019-01-22 11:32:36 +01:00
gdm724x
goldfish staging: goldfish: remove GPL boiler plate text 2019-01-15 16:08:04 +01:00
greybus Staging: greybus: Alignment should match open parenthesis 2019-02-26 11:46:51 +01:00
gs_fpgaboot staging: gs_fpgaboot: cleanup alignment issue - style 2019-01-15 16:08:05 +01:00
iio staging: iio: frequency: ad9833: Load clock using clock framework 2019-02-02 17:06:49 +00:00
ks7010 Staging: ks7010: Match alignments with open parenthesis 2019-02-26 11:46:51 +01:00
media staging: prefix header search paths with $(srctree)/ 2019-02-04 12:30:27 +01:00
most staging: most: cdev: add missing check for cdev_add failure 2019-02-04 12:36:14 +01:00
mt7621-dma Staging: mt761-dma: Alignment should match open parenthesis 2019-02-26 11:40:07 +01:00
mt7621-dts staging: mt7621-dts: add general pcie reset line to pcie bindings 2019-02-19 11:13:08 +01:00
mt7621-eth staging: mt7621-eth/ethtool.c: Correction of SPDX license identifier 2019-02-04 12:34:03 +01:00
mt7621-mmc staging: mt7621-mmc: Prefer using BIT macro 2019-02-19 11:18:00 +01:00
mt7621-pci staging: mt7621-pci: reverse condition to check for enabled port 2019-02-19 11:14:14 +01:00
mt7621-pci-phy staging: mt7621-pci-phy: use 'module_init' instead of 'arch_initcall' 2019-02-19 11:12:08 +01:00
mt7621-pinctrl staging: mt7621-pinctrl: Test devm_kzalloc for failure while improving the code 2019-01-30 15:38:50 +01:00
mt7621-spi staging: mt7621-spi: Clean up comparison to NULL 2019-02-04 12:34:37 +01:00
netlogic staging: netlogic: Remove boilerplate license text 2019-02-26 11:40:07 +01:00
nvec
octeon staging: octeon: fix broken phylib usage 2019-01-30 15:31:24 +01:00
octeon-usb staging: octeon-usb: fix misspelled "re-enable" 2019-02-21 10:58:11 +01:00
olpc_dcon staging: olpc_dcon: olpc_dcon_xo_1.c: Switch to the gpio descriptor interface 2018-11-08 03:59:47 -08:00
pi433 staging: pi433: add missing call to cdev_del() 2018-12-05 09:39:45 +01:00
ralink-gdma staging: Move ralink-gdma to its own directory 2019-01-15 16:28:02 +01:00
rtl8188eu staging: rtl8188eu: cleanup comparsions to NULL in rtl8188eu_xmit.c 2019-02-26 11:52:46 +01:00
rtl8192e Staging: rtl8192e: Replace license text with SPDX identifier 2019-02-21 10:58:11 +01:00
rtl8192u staging: rtl8192u: remove redundant nul check on pointer dev 2019-02-07 13:33:54 +01:00
rtl8712 staging: rtl8712: drop pointless static qualifier in r8712_efuse_pg_packet_write() 2019-01-22 11:32:36 +01:00
rtl8723bs Staging: rtl8723bs: remove some dead code 2019-02-07 13:33:54 +01:00
rtlwifi staging: rtlwifi: Use proper enum for return in halmac_parse_psd_data_88xx 2019-02-21 10:58:11 +01:00
rts5208 Staging: rts5208: Fix error handling on rtsx_send_cmd 2019-01-07 11:28:15 +01:00
sm750fb staging: sm750fb: Rename setDisplayControl to set_display_control - style 2019-02-07 13:33:54 +01:00
speakup staging: speakup: Note that simple_strtoul can't simply be replaced by kstrtoul 2019-02-26 11:50:17 +01:00
unisys staging: visornic: use skb_put_zero() instead of open-coded version 2019-02-19 15:35:25 +01:00
vboxvideo Staging/IIO driver patches for 4.21-rc1 2018-12-28 20:39:58 -08:00
vc04_services staging: prefix header search paths with $(srctree)/ 2019-02-04 12:30:27 +01:00
vme
vt6655 Staging: vt6655: Alignment should match open parenthesis 2019-02-26 11:46:51 +01:00
vt6656 staging: vt6656: key: Mark expected switch fall-throughs 2019-02-19 11:14:14 +01:00
wilc1000 staging: wilc1000: fix incorrent type assignment 2019-02-26 11:50:16 +01:00
wlan-ng staging: wlan-ng: formatting change in cfg80211.c 2019-02-08 10:31:14 +01:00
Kconfig staging: xgifb: delete the driver 2019-01-22 11:32:35 +01:00
Makefile staging: xgifb: delete the driver 2019-01-22 11:32:35 +01:00