From: Andrey Smirnov <andrew.smirnov@gmail.com>
To: barebox@lists.infradead.org
Cc: Andrey Smirnov <andrew.smirnov@gmail.com>
Subject: [PATCH v2 22/24] block: Do not ignore error in blk->ops->write()
Date: Thu, 23 Aug 2018 19:52:41 -0700 [thread overview]
Message-ID: <20180824025243.19479-23-andrew.smirnov@gmail.com> (raw)
In-Reply-To: <20180824025243.19479-1-andrew.smirnov@gmail.com>
Getting a error from blk->ops->write() is not a very unlikely
event (happens quite often during new board bringup), so we need to
catch and propagate them to upper layers so they can be at least
reported properly. Change the code of all of the callers to bail out
as soon as blk->ops->write() fails.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
---
common/block.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/common/block.c b/common/block.c
index 219b943af..8d0de42d9 100644
--- a/common/block.c
+++ b/common/block.c
@@ -44,13 +44,17 @@ struct chunk {
static int writebuffer_flush(struct block_device *blk)
{
struct chunk *chunk;
+ int ret;
if (!IS_ENABLED(CONFIG_BLOCK_WRITE))
return 0;
list_for_each_entry(chunk, &blk->buffered_blocks, list) {
if (chunk->dirty) {
- blk->ops->write(blk, chunk->data, chunk->block_start, blk->rdbufsize);
+ ret = blk->ops->write(blk, chunk->data, chunk->block_start, blk->rdbufsize);
+ if (ret < 0)
+ return ret;
+
chunk->dirty = 0;
}
}
@@ -107,6 +111,7 @@ static void *block_get_cached(struct block_device *blk, int block)
static struct chunk *get_chunk(struct block_device *blk)
{
struct chunk *chunk;
+ int ret;
if (list_empty(&blk->idle_blocks)) {
/* use last entry which is the most unused */
@@ -114,8 +119,11 @@ static struct chunk *get_chunk(struct block_device *blk)
if (chunk->dirty) {
size_t num_blocks = min(blk->rdbufsize,
blk->num_blocks - chunk->block_start);
- blk->ops->write(blk, chunk->data, chunk->block_start,
- num_blocks);
+ ret = blk->ops->write(blk, chunk->data, chunk->block_start,
+ num_blocks);
+ if (ret < 0)
+ return ERR_PTR(ret);
+
chunk->dirty = 0;
}
@@ -140,6 +148,9 @@ static int block_cache(struct block_device *blk, int block)
int ret;
chunk = get_chunk(blk);
+ if (IS_ERR(chunk))
+ return PTR_ERR(chunk);
+
chunk->block_start = block & ~blk->blkmask;
debug("%s: %d to %d\n", __func__, chunk->block_start,
--
2.17.1
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
next prev parent reply other threads:[~2018-08-24 2:53 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-24 2:52 [PATCH v2 00/24] i.MX BBU improvements and bugfixes Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 01/24] ARM: i.MX: bbu: Remove unused define Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 02/24] filetype: Add arch/ to include path Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 03/24] filetype: Add code to detect i.MX image v1 Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 04/24] filetype: Add code to detect i.MX image v2 Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 05/24] ARM: i.MX: bbu: Move inner-image type check Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 06/24] ARM: i.MX: bbu: Drop IMX_INTERNAL_FLAG_NAND Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 07/24] ARM: i.MX: bbu: Consolidate various update helpers Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 08/24] ARM: i.MX: bbu: Simplify imx53_bbu_internal_nand_register_handler() Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 09/24] ARM: i.MX: bbu: Constify all 'devicefile' arguments Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 10/24] ARM: i.MX: bbu: Detect which platforms need v2 i.MX header Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 11/24] ARM: i.MX: bbu: Alias imx5*_bbu_internal_mmc_register_handler() Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 12/24] ARM: i.MX: bbu: Alias imx5*_bbu_internal_spi_i2c_register_handler() Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 13/24] ARM: i.MX: bbu: Move protect code into a separate routine Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 14/24] ARM: i.MX: bbu: Adjust FLASH_HEADER_OFFSET_MMC for i.MX8MQ Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 15/24] ARM: i.MX: bbu: Add support for SPI/I2C on VFxxx Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 16/24] ARM: i.MX: zii-vf610-dev-rev-b/c: Add support for BBU on SPI-NOR Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 17/24] ARM: i.MX: bbu: Add support for MMC on i.MX8MQ Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 18/24] ARM: nxp-imx8mq-evk: Add eMMC BBU configuration Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 19/24] libfile: Introduce pwrite_full() Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 20/24] ARM: i.MX: bbu: Use pwrite_full() instead of pwrite() Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 21/24] bbu: Remove logical negation in barebox_update_handler_exists() Andrey Smirnov
2018-08-24 2:52 ` Andrey Smirnov [this message]
2018-08-24 2:52 ` [PATCH v2 23/24] bbu: Report update failures explicitly Andrey Smirnov
2018-08-24 2:52 ` [PATCH v2 24/24] bbu: command: Make sure specified update handler exists Andrey Smirnov
2018-08-24 8:09 ` [PATCH v2 00/24] i.MX BBU improvements and bugfixes Sascha Hauer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180824025243.19479-23-andrew.smirnov@gmail.com \
--to=andrew.smirnov@gmail.com \
--cc=barebox@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox