summaryrefslogtreecommitdiffstats
path: root/drivers/target/target_core_user.c
diff options
context:
space:
mode:
authorBodo Stroesser <bostroesser@gmail.com>2021-03-05 20:00:09 +0100
committerMartin K. Petersen <martin.petersen@oracle.com>2021-03-10 05:47:17 +0100
commit1080782f13e3604351e690bd2fa84ebc3b4847f6 (patch)
tree5b6ac2865bf6458ade12593b6c7d9b1601e25565 /drivers/target/target_core_user.c
parentscsi: target: tcmu: Replace radix_tree with XArray (diff)
downloadlinux-1080782f13e3604351e690bd2fa84ebc3b4847f6.tar.xz
linux-1080782f13e3604351e690bd2fa84ebc3b4847f6.zip
scsi: target: tcmu: Use GFP_NOIO while handling cmds or holding cmdr_lock
Especially when using tcmu with tcm_loop, memory allocations with GFP_KERNEL for a LUN can cause write back to the same LUN. So we have to use GFP_NOIO when allocation is done while handling commands or while holding cmdr_lock. Link: https://lore.kernel.org/r/20210305190009.32242-1-bostroesser@gmail.com Reviewed-by: Mike Christie <michael.christie@oracle.com> Signed-off-by: Bodo Stroesser <bostroesser@gmail.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/target/target_core_user.c')
-rw-r--r--drivers/target/target_core_user.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/target/target_core_user.c b/drivers/target/target_core_user.c
index ada3ef982969..9e1b115cb032 100644
--- a/drivers/target/target_core_user.c
+++ b/drivers/target/target_core_user.c
@@ -518,7 +518,7 @@ static inline int tcmu_get_empty_block(struct tcmu_dev *udev,
if (!page)
goto err_alloc;
- if (xa_store(&udev->data_blocks, dbi, page, GFP_KERNEL))
+ if (xa_store(&udev->data_blocks, dbi, page, GFP_NOIO))
goto err_insert;
}
@@ -1272,7 +1272,7 @@ tcmu_tmr_notify(struct se_device *se_dev, enum tcm_tmreq_table tmf,
pr_debug("TMR event %d on dev %s, aborted cmds %d, afflicted cmd_ids %d\n",
tcmu_tmr_type(tmf), udev->name, i, cmd_cnt);
- tmr = kmalloc(sizeof(*tmr) + cmd_cnt * sizeof(*cmd_ids), GFP_KERNEL);
+ tmr = kmalloc(sizeof(*tmr) + cmd_cnt * sizeof(*cmd_ids), GFP_NOIO);
if (!tmr)
goto unlock;