diff options
Diffstat (limited to 'drivers/mmc/core/block.c')
| -rw-r--r-- | drivers/mmc/core/block.c | 23 | 
1 files changed, 12 insertions, 11 deletions
diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c index 38a7586b00cc..a0b9102c4c6e 100644 --- a/drivers/mmc/core/block.c +++ b/drivers/mmc/core/block.c @@ -244,7 +244,7 @@ static ssize_t power_ro_lock_store(struct device *dev,  	mq = &md->queue;  	/* Dispatch locking to the block layer */ -	req = blk_get_request(mq->queue, REQ_OP_DRV_OUT, __GFP_RECLAIM); +	req = blk_get_request(mq->queue, REQ_OP_DRV_OUT, 0);  	if (IS_ERR(req)) {  		count = PTR_ERR(req);  		goto out_put; @@ -650,8 +650,7 @@ static int mmc_blk_ioctl_cmd(struct mmc_blk_data *md,  	 */  	mq = &md->queue;  	req = blk_get_request(mq->queue, -		idata->ic.write_flag ? REQ_OP_DRV_OUT : REQ_OP_DRV_IN, -		__GFP_RECLAIM); +		idata->ic.write_flag ? REQ_OP_DRV_OUT : REQ_OP_DRV_IN, 0);  	if (IS_ERR(req)) {  		err = PTR_ERR(req);  		goto cmd_done; @@ -721,8 +720,7 @@ static int mmc_blk_ioctl_multi_cmd(struct mmc_blk_data *md,  	 */  	mq = &md->queue;  	req = blk_get_request(mq->queue, -		idata[0]->ic.write_flag ? REQ_OP_DRV_OUT : REQ_OP_DRV_IN, -		__GFP_RECLAIM); +		idata[0]->ic.write_flag ? REQ_OP_DRV_OUT : REQ_OP_DRV_IN, 0);  	if (IS_ERR(req)) {  		err = PTR_ERR(req);  		goto cmd_err; @@ -2353,7 +2351,8 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,  	set_disk_ro(md->disk, md->read_only || default_ro);  	md->disk->flags = GENHD_FL_EXT_DEVT;  	if (area_type & (MMC_BLK_DATA_AREA_RPMB | MMC_BLK_DATA_AREA_BOOT)) -		md->disk->flags |= GENHD_FL_NO_PART_SCAN; +		md->disk->flags |= GENHD_FL_NO_PART_SCAN +				   | GENHD_FL_SUPPRESS_PARTITION_INFO;  	/*  	 * As discussed on lkml, GENHD_FL_REMOVABLE should: @@ -2750,7 +2749,7 @@ static int mmc_dbg_card_status_get(void *data, u64 *val)  	int ret;  	/* Ask the block layer about the card status */ -	req = blk_get_request(mq->queue, REQ_OP_DRV_IN, __GFP_RECLAIM); +	req = blk_get_request(mq->queue, REQ_OP_DRV_IN, 0);  	if (IS_ERR(req))  		return PTR_ERR(req);  	req_to_mmc_queue_req(req)->drv_op = MMC_DRV_OP_GET_CARD_STATUS; @@ -2786,7 +2785,7 @@ static int mmc_ext_csd_open(struct inode *inode, struct file *filp)  		return -ENOMEM;  	/* Ask the block layer for the EXT CSD */ -	req = blk_get_request(mq->queue, REQ_OP_DRV_IN, __GFP_RECLAIM); +	req = blk_get_request(mq->queue, REQ_OP_DRV_IN, 0);  	if (IS_ERR(req)) {  		err = PTR_ERR(req);  		goto out_free; @@ -2967,9 +2966,11 @@ static void mmc_blk_remove(struct mmc_card *card)  	mmc_blk_remove_debugfs(card, md);  	mmc_blk_remove_parts(card, md);  	pm_runtime_get_sync(&card->dev); -	mmc_claim_host(card->host); -	mmc_blk_part_switch(card, md->part_type); -	mmc_release_host(card->host); +	if (md->part_curr != md->part_type) { +		mmc_claim_host(card->host); +		mmc_blk_part_switch(card, md->part_type); +		mmc_release_host(card->host); +	}  	if (card->type != MMC_TYPE_SD_COMBO)  		pm_runtime_disable(&card->dev);  	pm_runtime_put_noidle(&card->dev);  | 
