Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 169f03a0 authored by Linus Walleij's avatar Linus Walleij Committed by Ulf Hansson
Browse files

mmc: block: return errorcode from mmc_sd_num_wr_blocks()



mmc_sd_num_wr_blocks() has an interesting construction that
saves one return argument by casting (u32)-1 as error code
if something goes wrong.

This is however a bit confusing when the normal kernel
pattern is to return an int error code on success.

So instead pass a variable "blocks" that the function can
fill in with the number of successfully transferred blocks
and return an integer as error code.

Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
[Ulf: Changed a return code to -EIO, reported by Dan Carpenter and fixed
by Linus Walleij]
parent 9491be5f
Loading
Loading
Loading
Loading
+11 −8
Original line number Diff line number Diff line
@@ -763,7 +763,7 @@ static inline int mmc_blk_part_switch(struct mmc_card *card,
	return 0;
}

static u32 mmc_sd_num_wr_blocks(struct mmc_card *card)
static int mmc_sd_num_wr_blocks(struct mmc_card *card, u32 *written_blocks)
{
	int err;
	u32 result;
@@ -781,9 +781,9 @@ static u32 mmc_sd_num_wr_blocks(struct mmc_card *card)

	err = mmc_wait_for_cmd(card->host, &cmd, 0);
	if (err)
		return (u32)-1;
		return err;
	if (!mmc_host_is_spi(card->host) && !(cmd.resp[0] & R1_APP_CMD))
		return (u32)-1;
		return -EIO;

	memset(&cmd, 0, sizeof(struct mmc_command));

@@ -803,7 +803,7 @@ static u32 mmc_sd_num_wr_blocks(struct mmc_card *card)

	blocks = kmalloc(4, GFP_KERNEL);
	if (!blocks)
		return (u32)-1;
		return -ENOMEM;

	sg_init_one(&sg, blocks, 4);

@@ -813,9 +813,11 @@ static u32 mmc_sd_num_wr_blocks(struct mmc_card *card)
	kfree(blocks);

	if (cmd.error || data.error)
		result = (u32)-1;
		return -EIO;

	*written_blocks = result;

	return result;
	return 0;
}

static int get_card_status(struct mmc_card *card, u32 *status, int retries)
@@ -1576,9 +1578,10 @@ static int mmc_blk_cmd_err(struct mmc_blk_data *md, struct mmc_card *card,
	 */
	if (mmc_card_sd(card)) {
		u32 blocks;
		int err;

		blocks = mmc_sd_num_wr_blocks(card);
		if (blocks != (u32)-1) {
		err = mmc_sd_num_wr_blocks(card, &blocks);
		if (!err) {
			ret = blk_end_request(req, 0, blocks << 9);
		}
	} else {