This is a note to let you know that I've just added the patch titled mmc: core: Use GFP_NOIO in ACMD22 to the 6.12-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: mmc-core-use-gfp_noio-in-acmd22.patch and it can be found in the queue-6.12 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. commit ee08aec3bc7711cd95a18718fc2198a90fd0d708 Author: Avri Altman <avri.altman@xxxxxxx> Date: Mon Oct 21 18:32:27 2024 +0300 mmc: core: Use GFP_NOIO in ACMD22 [ Upstream commit 869d37475788b0044bec1a33335e24abaf5e8884 ] While reviewing the SDUC series, Adrian made a comment concerning the memory allocation code in mmc_sd_num_wr_blocks() - see [1]. Prevent memory allocations from triggering I/O operations while ACMD22 is in progress. [1] https://lore.kernel.org/linux-mmc/3016fd71-885b-4ef9-97ed-46b4b0cb0e35@xxxxxxxxx/ Suggested-by: Adrian Hunter <adrian.hunter@xxxxxxxxx> Reviewed-by: Adrian Hunter <adrian.hunter@xxxxxxxxx> Fixes: 051913dada04 ("mmc_block: do not DMA to stack") Signed-off-by: Avri Altman <avri.altman@xxxxxxx> Cc: stable@xxxxxxxxxxxxxxx Message-ID: <20241021153227.493970-1-avri.altman@xxxxxxx> Signed-off-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx> Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx> diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c index 64ae6116b1fa0..1d08009f2bd83 100644 --- a/drivers/mmc/core/block.c +++ b/drivers/mmc/core/block.c @@ -995,6 +995,8 @@ static int mmc_sd_num_wr_blocks(struct mmc_card *card, u32 *written_blocks) u32 result; __be32 *blocks; u8 resp_sz = mmc_card_ult_capacity(card) ? 8 : 4; + unsigned int noio_flag; + struct mmc_request mrq = {}; struct mmc_command cmd = {}; struct mmc_data data = {}; @@ -1018,7 +1020,9 @@ static int mmc_sd_num_wr_blocks(struct mmc_card *card, u32 *written_blocks) mrq.cmd = &cmd; mrq.data = &data; + noio_flag = memalloc_noio_save(); blocks = kmalloc(resp_sz, GFP_KERNEL); + memalloc_noio_restore(noio_flag); if (!blocks) return -ENOMEM;