| .. | .. | 
|---|
| 256 | 256 | goto out_put; | 
|---|
| 257 | 257 | } | 
|---|
| 258 | 258 | req_to_mmc_queue_req(req)->drv_op = MMC_DRV_OP_BOOT_WP; | 
|---|
|  | 259 | +	req_to_mmc_queue_req(req)->drv_op_result = -EIO; | 
|---|
| 259 | 260 | blk_execute_rq(mq->queue, NULL, req, 0); | 
|---|
| 260 | 261 | ret = req_to_mmc_queue_req(req)->drv_op_result; | 
|---|
| 261 | 262 | blk_put_request(req); | 
|---|
| .. | .. | 
|---|
| 415 | 416 | static int card_busy_detect(struct mmc_card *card, unsigned int timeout_ms, | 
|---|
| 416 | 417 | u32 *resp_errs) | 
|---|
| 417 | 418 | { | 
|---|
| 418 |  | -	unsigned long timeout = jiffies + msecs_to_jiffies(timeout_ms); | 
|---|
|  | 419 | +	unsigned long timeout = jiffies + msecs_to_jiffies(timeout_ms > 2000 ? 2000 : timeout_ms); | 
|---|
| 419 | 420 | int err = 0; | 
|---|
| 420 | 421 | u32 status; | 
|---|
| 421 | 422 |  | 
|---|
| .. | .. | 
|---|
| 649 | 650 | idatas[0] = idata; | 
|---|
| 650 | 651 | req_to_mmc_queue_req(req)->drv_op = | 
|---|
| 651 | 652 | rpmb ? MMC_DRV_OP_IOCTL_RPMB : MMC_DRV_OP_IOCTL; | 
|---|
|  | 653 | +	req_to_mmc_queue_req(req)->drv_op_result = -EIO; | 
|---|
| 652 | 654 | req_to_mmc_queue_req(req)->drv_op_data = idatas; | 
|---|
| 653 | 655 | req_to_mmc_queue_req(req)->ioc_count = 1; | 
|---|
| 654 | 656 | blk_execute_rq(mq->queue, NULL, req, 0); | 
|---|
| .. | .. | 
|---|
| 718 | 720 | } | 
|---|
| 719 | 721 | req_to_mmc_queue_req(req)->drv_op = | 
|---|
| 720 | 722 | rpmb ? MMC_DRV_OP_IOCTL_RPMB : MMC_DRV_OP_IOCTL; | 
|---|
|  | 723 | +	req_to_mmc_queue_req(req)->drv_op_result = -EIO; | 
|---|
| 721 | 724 | req_to_mmc_queue_req(req)->drv_op_data = idata; | 
|---|
| 722 | 725 | req_to_mmc_queue_req(req)->ioc_count = num_of_cmds; | 
|---|
| 723 | 726 | blk_execute_rq(mq->queue, NULL, req, 0); | 
|---|
| .. | .. | 
|---|
| 1781 | 1784 | * bytes transferred to zero in that case. | 
|---|
| 1782 | 1785 | */ | 
|---|
| 1783 | 1786 | err = __mmc_send_status(card, &status, 0); | 
|---|
| 1784 |  | -	if (err || mmc_blk_status_error(req, status)) | 
|---|
|  | 1787 | +	if (err || mmc_blk_status_error(req, status)) { | 
|---|
| 1785 | 1788 | brq->data.bytes_xfered = 0; | 
|---|
|  | 1789 | +		if (mmc_card_sd(card) && !mmc_card_removed(card)) { | 
|---|
|  | 1790 | +			mmc_blk_reset_success(mq->blkdata, type); | 
|---|
|  | 1791 | +			if (!mmc_blk_reset(md, card->host, type)) | 
|---|
|  | 1792 | +				return; | 
|---|
|  | 1793 | +			pr_err("%s: pre recovery failed!\n", req->rq_disk->disk_name); | 
|---|
|  | 1794 | +		} | 
|---|
|  | 1795 | +	} | 
|---|
| 1786 | 1796 |  | 
|---|
| 1787 | 1797 | mmc_retune_release(card->host); | 
|---|
| 1788 | 1798 |  | 
|---|
| .. | .. | 
|---|
| 1996 | 2006 | mmc_blk_urgent_bkops(mq, mqrq); | 
|---|
| 1997 | 2007 | } | 
|---|
| 1998 | 2008 |  | 
|---|
| 1999 |  | -static void mmc_blk_mq_dec_in_flight(struct mmc_queue *mq, struct request *req) | 
|---|
|  | 2009 | +static void mmc_blk_mq_dec_in_flight(struct mmc_queue *mq, enum mmc_issue_type issue_type) | 
|---|
| 2000 | 2010 | { | 
|---|
| 2001 | 2011 | unsigned long flags; | 
|---|
| 2002 | 2012 | bool put_card; | 
|---|
| 2003 | 2013 |  | 
|---|
| 2004 | 2014 | spin_lock_irqsave(&mq->lock, flags); | 
|---|
| 2005 | 2015 |  | 
|---|
| 2006 |  | -	mq->in_flight[mmc_issue_type(mq, req)] -= 1; | 
|---|
|  | 2016 | +	mq->in_flight[issue_type] -= 1; | 
|---|
| 2007 | 2017 |  | 
|---|
| 2008 | 2018 | put_card = (mmc_tot_in_flight(mq) == 0); | 
|---|
| 2009 | 2019 |  | 
|---|
| .. | .. | 
|---|
| 2015 | 2025 |  | 
|---|
| 2016 | 2026 | static void mmc_blk_mq_post_req(struct mmc_queue *mq, struct request *req) | 
|---|
| 2017 | 2027 | { | 
|---|
|  | 2028 | +	enum mmc_issue_type issue_type = mmc_issue_type(mq, req); | 
|---|
| 2018 | 2029 | struct mmc_queue_req *mqrq = req_to_mmc_queue_req(req); | 
|---|
| 2019 | 2030 | struct mmc_request *mrq = &mqrq->brq.mrq; | 
|---|
| 2020 | 2031 | struct mmc_host *host = mq->card->host; | 
|---|
| .. | .. | 
|---|
| 2030 | 2041 | else if (likely(!blk_should_fake_timeout(req->q))) | 
|---|
| 2031 | 2042 | blk_mq_complete_request(req); | 
|---|
| 2032 | 2043 |  | 
|---|
| 2033 |  | -	mmc_blk_mq_dec_in_flight(mq, req); | 
|---|
|  | 2044 | +	mmc_blk_mq_dec_in_flight(mq, issue_type); | 
|---|
| 2034 | 2045 | } | 
|---|
| 2035 | 2046 |  | 
|---|
| 2036 | 2047 | void mmc_blk_mq_recovery(struct mmc_queue *mq) | 
|---|
| .. | .. | 
|---|
| 2768 | 2779 | if (IS_ERR(req)) | 
|---|
| 2769 | 2780 | return PTR_ERR(req); | 
|---|
| 2770 | 2781 | req_to_mmc_queue_req(req)->drv_op = MMC_DRV_OP_GET_CARD_STATUS; | 
|---|
|  | 2782 | +	req_to_mmc_queue_req(req)->drv_op_result = -EIO; | 
|---|
| 2771 | 2783 | blk_execute_rq(mq->queue, NULL, req, 0); | 
|---|
| 2772 | 2784 | ret = req_to_mmc_queue_req(req)->drv_op_result; | 
|---|
| 2773 | 2785 | if (ret >= 0) { | 
|---|
| .. | .. | 
|---|
| 2806 | 2818 | goto out_free; | 
|---|
| 2807 | 2819 | } | 
|---|
| 2808 | 2820 | req_to_mmc_queue_req(req)->drv_op = MMC_DRV_OP_GET_EXT_CSD; | 
|---|
|  | 2821 | +	req_to_mmc_queue_req(req)->drv_op_result = -EIO; | 
|---|
| 2809 | 2822 | req_to_mmc_queue_req(req)->drv_op_data = &ext_csd; | 
|---|
| 2810 | 2823 | blk_execute_rq(mq->queue, NULL, req, 0); | 
|---|
| 2811 | 2824 | err = req_to_mmc_queue_req(req)->drv_op_result; | 
|---|