OpenCloudOS-Kernel/drivers/lightnvm
Jia-Ju Bai 7325b4bbe5 lightnvm: pblk: fix two sleep-in-atomic-context bugs
The driver may sleep with holding a spinlock.

The function call paths (from bottom to top) in Linux-4.16 are:

[FUNC] nvm_dev_dma_alloc(GFP_KERNEL)
drivers/lightnvm/pblk-core.c, 754:
	nvm_dev_dma_alloc in pblk_line_submit_smeta_io
drivers/lightnvm/pblk-core.c, 1048:
	pblk_line_submit_smeta_io in pblk_line_init_bb
drivers/lightnvm/pblk-core.c, 1434:
	pblk_line_init_bb in pblk_line_replace_data
drivers/lightnvm/pblk-recovery.c, 980:
	pblk_line_replace_data in pblk_recov_l2p
drivers/lightnvm/pblk-recovery.c, 976:
	spin_lock in pblk_recov_l2p

[FUNC] bio_map_kern(GFP_KERNEL)
drivers/lightnvm/pblk-core.c, 762:
	bio_map_kern in pblk_line_submit_smeta_io
drivers/lightnvm/pblk-core.c, 1048:
	pblk_line_submit_smeta_io in pblk_line_init_bb
drivers/lightnvm/pblk-core.c, 1434:
	pblk_line_init_bb in pblk_line_replace_data
drivers/lightnvm/pblk-recovery.c, 980:
	pblk_line_replace_data in pblk_recov_l2p
drivers/lightnvm/pblk-recovery.c, 976:
	spin_lock in pblk_recov_l2p

To fix these bugs, the call to pblk_line_replace_data()
is moved out of the spinlock protection.

These bugs are found by my static analysis tool DSAC.

Signed-off-by: Jia-Ju Bai <baijiaju1990@gmail.com>
Reviewed-by: Javier González <javier@cnexlabs.com>
Signed-off-by: Matias Bjørling <mb@lightnvm.io>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2018-10-09 08:25:07 -06:00
..
Kconfig lightnvm: remove dependencies on BLK_DEV_NVME and PCI 2018-10-09 08:25:05 -06:00
Makefile lightnvm: remove rrpc 2018-01-05 08:50:12 -07:00
core.c lightnvm: introduce nvm_rq_to_ppa_list 2018-10-09 08:25:07 -06:00
pblk-cache.c block: Add and use op_stat_group() for indexing disk_stat fields. 2018-07-18 08:44:20 -06:00
pblk-core.c lightnvm: pblk: add tracing for chunk resets 2018-10-09 08:25:07 -06:00
pblk-gc.c lightnvm: pblk: add trace events for line state changes 2018-10-09 08:25:07 -06:00
pblk-init.c lightnvm: pblk: stop recreating global caches 2018-10-09 08:25:07 -06:00
pblk-map.c lightnvm: pblk: remove debug from pblk_[down/up]_page 2018-10-09 08:25:07 -06:00
pblk-rb.c lightnvm: pblk: improve line helpers 2018-10-09 08:25:06 -06:00
pblk-read.c lightnvm: pblk: fix up prints in pblk_read_check_rand 2018-10-09 08:25:07 -06:00
pblk-recovery.c lightnvm: pblk: fix two sleep-in-atomic-context bugs 2018-10-09 08:25:07 -06:00
pblk-rl.c lightnvm: pblk: unify vector max req constants 2018-10-09 08:25:06 -06:00
pblk-sysfs.c lightnvm: pblk: fix write amplificiation calculation 2018-10-09 08:25:07 -06:00
pblk-trace.h lightnvm: pblk: add tracing for chunk resets 2018-10-09 08:25:07 -06:00
pblk-write.c lightnvm: pblk: fix mapping issue on failed writes 2018-10-09 08:25:07 -06:00
pblk.h lightnvm: pblk: calculate line pad distance in helper 2018-10-09 08:25:07 -06:00