forked from Minki/linux
scsi: target: tcmu: Prevent memory reclaim recursion
Prevent recursion into the IO path under low memory conditions by using GFP_NOIO in place of GFP_KERNEL when allocating a new command with tcmu_alloc_cmd() and user ring space with tcmu_get_empty_block(). Link: https://lore.kernel.org/r/20191108082901.417950-1-damien.lemoal@wdc.com Reported-by: Masato Suzuki <masato.suzuki@wdc.com> Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com> Acked-by: Mike Christie <mchristi@redhat.com> Reviewed-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
9237f04e12
commit
0eccce866f
@ -499,7 +499,7 @@ static inline bool tcmu_get_empty_block(struct tcmu_dev *udev,
|
||||
schedule_delayed_work(&tcmu_unmap_work, 0);
|
||||
|
||||
/* try to get new page from the mm */
|
||||
page = alloc_page(GFP_KERNEL);
|
||||
page = alloc_page(GFP_NOIO);
|
||||
if (!page)
|
||||
goto err_alloc;
|
||||
|
||||
@ -573,7 +573,7 @@ static struct tcmu_cmd *tcmu_alloc_cmd(struct se_cmd *se_cmd)
|
||||
struct tcmu_dev *udev = TCMU_DEV(se_dev);
|
||||
struct tcmu_cmd *tcmu_cmd;
|
||||
|
||||
tcmu_cmd = kmem_cache_zalloc(tcmu_cmd_cache, GFP_KERNEL);
|
||||
tcmu_cmd = kmem_cache_zalloc(tcmu_cmd_cache, GFP_NOIO);
|
||||
if (!tcmu_cmd)
|
||||
return NULL;
|
||||
|
||||
@ -584,7 +584,7 @@ static struct tcmu_cmd *tcmu_alloc_cmd(struct se_cmd *se_cmd)
|
||||
tcmu_cmd_reset_dbi_cur(tcmu_cmd);
|
||||
tcmu_cmd->dbi_cnt = tcmu_cmd_get_block_cnt(tcmu_cmd);
|
||||
tcmu_cmd->dbi = kcalloc(tcmu_cmd->dbi_cnt, sizeof(uint32_t),
|
||||
GFP_KERNEL);
|
||||
GFP_NOIO);
|
||||
if (!tcmu_cmd->dbi) {
|
||||
kmem_cache_free(tcmu_cmd_cache, tcmu_cmd);
|
||||
return NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user