Re: [PATCH v2] mmc: block: cast a informative log for no devidx available

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 23 August 2017 at 09:38, Shawn Lin <shawn.lin@xxxxxxxxxxxxxx> wrote:
> The intention for this patch is to help folks debug the failure
> like this:
>
> dwmmc_rockchip fe320000.dwmmc: IDMAC supports 32-bit address mode.
> dwmmc_rockchip fe320000.dwmmc: Using internal DMA controller.
> dwmmc_rockchip fe320000.dwmmc: Version ID is 270a
> dwmmc_rockchip fe320000.dwmmc: DW MMC controller at irq 28,32 bit
> host data width,256 deep fifo
> dwmmc_rockchip fe320000.dwmmc: Got CD GPIO
> mmc_host mmc0: Bus speed (slot 0) = 400000Hz (slot req 400000Hz, actual
> 400000HZ div = 0)
> mmc_host mmc0: Bus speed (slot 0) = 50000000Hz (slot req 50000000Hz,
> actual 50000000HZ div = 0)
> mmc0: new high speed SDHC card at address 0007
> mmcblk: probe of mmc0:0007 failed with error -28
>
> The reason may be some buggy userspace daemon miss the disk remove
> uevent sometimes so it would finally make the SD card not work.
> So from the dmesg it only shows a errno of -28 but still don't understand
> what happened.
>
> For quick reproduce this, we could set max_devices to 8 and run
>
> for i in $(seq 1 9); do
>   echo "========================" $i
>   echo fe320000.dwmmc > /sys/bus/platform/drivers/dwmmc_rockchip/unbind
>   sleep .5
>   echo fe320000.dwmmc > /sys/bus/platform/drivers/dwmmc_rockchip/bind
>   sleep .5
>   mount -t vfat /dev/mmcblk0 /mnt
>   sleep .5
> done
>
> Another possible reason would be the device has more partitions than
> what we support, so that they have to increase their max_devices.
>
> Signed-off-by: Shawn Lin <shawn.lin@xxxxxxxxxxxxxx>

Thanks, applied for next!

Kind regards
Uffe

>
> ---
>
> Changes in v2:
> - rephase the comment and log suggested by Ulf and remove the check for
>   removable cards
>
>  drivers/mmc/core/block.c | 14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
> index 0eebc2f..b95c3b0 100644
> --- a/drivers/mmc/core/block.c
> +++ b/drivers/mmc/core/block.c
> @@ -2034,8 +2034,20 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,
>         int devidx, ret;
>
>         devidx = ida_simple_get(&mmc_blk_ida, 0, max_devices, GFP_KERNEL);
> -       if (devidx < 0)
> +       if (devidx < 0) {
> +               /*
> +                * We get -ENOSPC because there are no more any available
> +                * devidx. The reason may be that, either userspace haven't yet
> +                * unmounted the partitions, which postpones mmc_blk_release()
> +                * from being called, or the device has more partitions than
> +                * what we support.
> +                */
> +               if (devidx == -ENOSPC)
> +                       dev_err(mmc_dev(card->host),
> +                               "no more device IDs available\n");
> +
>                 return ERR_PTR(devidx);
> +       }
>
>         md = kzalloc(sizeof(struct mmc_blk_data), GFP_KERNEL);
>         if (!md) {
> --
> 1.9.1
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux