lkml.org 
[lkml]   [2020]   [Oct]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] mmc: block: Prevent new req entering queue while freeing up the queue
    Date
    The commit bbdc74dc19e0 ("mmc: block: Prevent new req entering queue
    after its cleanup") has introduced this change but it got moved after
    del_gendisk() with commit 57678e5a3d51 ("mmc: block: Delete gendisk
    before cleaning up the request queue").

    It is blocking reboot with below Call stack().

    INFO: task reboot:3086 blocked for more than 122 seconds.
    __schedule
    schedule
    schedule_timeout
    io_schedule_timeout
    do_wait_for_common
    wait_for_completion_io
    submit_bio_wait
    blkdev_issue_flush
    ext4_sync_fs
    __sync_filesystem
    sync_filesystem
    fsync_bdev
    invalidate_partition
    del_gendisk
    mmc_blk_remove_req
    mmc_blk_remove
    mmc_bus_remove
    device_release_driver_internal
    device_release_driver
    bus_remove_device
    device_del
    mmc_remove_card
    mmc_remove
    mmc_stop_host
    mmc_remove_host
    sdhci_remove_host
    sdhci_msm_remove
    sdhci_msm_shutdown
    platform_drv_shutdown
    device_shutdown
    kernel_restart_prepare
    kernel_restart

    So bringing this change back.

    Signed-off-by: Veerabhadrarao Badiganti <vbadigan@codeaurora.org>
    ---

    I'm observing this issue 100% of the time with shutdown callback added to sdhci-msm driver.
    I'm trying on 5.4 kernel with ChromeOS.

    Please let me know if this can be fixed in a better way.
    ---

    drivers/mmc/core/block.c | 1 +
    1 file changed, 1 insertion(+)

    diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
    index 8d3df0be0355..76dbb2b8a13b 100644
    --- a/drivers/mmc/core/block.c
    +++ b/drivers/mmc/core/block.c
    @@ -2627,6 +2627,7 @@ static void mmc_blk_remove_req(struct mmc_blk_data *md)
    * from being accepted.
    */
    card = md->queue.card;
    + blk_set_queue_dying(md->queue.queue);
    if (md->disk->flags & GENHD_FL_UP) {
    device_remove_file(disk_to_dev(md->disk), &md->force_ro);
    if ((md->area_type & MMC_BLK_DATA_AREA_BOOT) &&
    --
    Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc., is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
    \
     
     \ /
      Last update: 2020-10-29 00:29    [W:2.449 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site