Message ID | 20210305190009.32242-1-bostroesser@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 1080782f13e3604351e690bd2fa84ebc3b4847f6 |
Headers | show |
Series | scsi: target: tcmu: Use GFP_NOIO while handling cmds or holding cmdr_lock | expand |
On 3/5/21 1:00 PM, Bodo Stroesser wrote: > 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. > > Signed-off-by: Bodo Stroesser <bostroesser@gmail.com> Reviewed-by: Mike Christie <michael.christie@oracle.com>
Bodo, > Especially when using tcmu with tcm_loop, memory allocations with > GFP_KERNEL for a LUN can cause write back to the same LUN. Applied to 5.13/scsi-staging, thanks!
On Fri, 5 Mar 2021 20:00:09 +0100, Bodo Stroesser wrote: > 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. Applied to 5.13/scsi-queue, thanks! [1/1] scsi: target: tcmu: Use GFP_NOIO while handling cmds or holding cmdr_lock https://git.kernel.org/mkp/scsi/c/1080782f13e3
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;
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. Signed-off-by: Bodo Stroesser <bostroesser@gmail.com> --- This patch is based on Martin's for-next branch plus my short series "scsi: target: tcmu: Replace IDR and radix_tree with XArray" See: https://lore.kernel.org/linux-scsi/20210224185335.13844-1-bostroesser@gmail.com/ drivers/target/target_core_user.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)