From: Miquel Raynal <miquel.raynal@free-electrons.com>
To: Boris Brezillon <boris.brezillon@free-electrons.com>
Cc: David Woodhouse <dwmw2@infradead.org>,
Brian Norris <computersforpeace@gmail.com>,
Marek Vasut <marek.vasut@gmail.com>,
Richard Weinberger <richard@nod.at>,
Cyrille Pitchen <cyrille.pitchen@wedev4u.fr>,
linux-mtd@lists.infradead.org, Peter Pan <peterpansjtu@gmail.com>,
Frieder Schrempf <frieder.schrempf@exceet.de>
Subject: Re: [PATCH] mtd: Make sure the device supports erase operations in mtd_erase()
Date: Tue, 23 Jan 2018 09:00:46 +0100 [thread overview]
Message-ID: <20180123090046.503b1129@xps13> (raw)
In-Reply-To: <20180122093801.19618-1-boris.brezillon@free-electrons.com>
Hello Boris,
On Mon, 22 Jan 2018 10:38:01 +0100
Boris Brezillon <boris.brezillon@free-electrons.com> wrote:
> Some devices do not implement ->_erase() or have an invalid ->erasesize
> value. In this case, mtd_erase() should return -ENOTSUPP.
>
> Note that the test is not done on the MTD_NO_ERASE flag because this
> flag means 'erasing a block before writing to it is unnecessary',
> not 'the erase operation is not supported'. Actually, some drivers are
> setting the MTD_NO_ERASE flag but still implementing the ->_erase()
> hook and setting a valid ->erasesize value.
>
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> ---
> drivers/mtd/mtdcore.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
> index d7ab091b36b2..f24144cbc99c 100644
> --- a/drivers/mtd/mtdcore.c
> +++ b/drivers/mtd/mtdcore.c
> @@ -971,10 +971,14 @@ EXPORT_SYMBOL_GPL(__put_mtd_device);
> */
> int mtd_erase(struct mtd_info *mtd, struct erase_info *instr)
> {
> + if (!mtd->erasesize || !mtd->_erase)
> + return -ENOTSUPP;
> +
> if (instr->addr >= mtd->size || instr->len > mtd->size - instr->addr)
> return -EINVAL;
> if (!(mtd->flags & MTD_WRITEABLE))
> return -EROFS;
This remark is not inherent to this patch in particular but as we are
adding a new error path, I thought it might be interesting to also
patch:
- INFTL_formatblock() from inftlmount.c [1] (mtd_erase called twice)
- NFTL_formatblock() from nftlmount.c [2]
They both call mtd_erase() without checking the return code and then
error out only if instr->state == MTD_ERASE_FAILED, which has not been
set before quitting mtd_erase() in the conditions above. I guess the
right thing to do is to add another condition in both functions on the
return code of mtd_erase(). What do you think?
Otherwise:
Reviewed-by: Miquel Raynal <miquel.raynal@free-electrons.com>
Have a good day,
Miquèl
[1]
http://elixir.free-electrons.com/linux/latest/source/drivers/mtd/inftlmount.c#L396
[2]
http://elixir.free-electrons.com/linux/latest/source/drivers/mtd/nftlmount.c#L334
next prev parent reply other threads:[~2018-01-23 8:01 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-22 9:38 [PATCH] mtd: Make sure the device supports erase operations in mtd_erase() Boris Brezillon
2018-01-23 8:00 ` Miquel Raynal [this message]
2018-01-23 10:24 ` Boris Brezillon
2018-02-17 8:38 ` Boris Brezillon
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=20180123090046.503b1129@xps13 \
--to=miquel.raynal@free-electrons.com \
--cc=boris.brezillon@free-electrons.com \
--cc=computersforpeace@gmail.com \
--cc=cyrille.pitchen@wedev4u.fr \
--cc=dwmw2@infradead.org \
--cc=frieder.schrempf@exceet.de \
--cc=linux-mtd@lists.infradead.org \
--cc=marek.vasut@gmail.com \
--cc=peterpansjtu@gmail.com \
--cc=richard@nod.at \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.