From: Boris Brezillon <boris.brezillon@free-electrons.com>
To: Richard Weinberger <richard@nod.at>
Cc: Artem Bityutskiy <dedekind1@gmail.com>,
David Woodhouse <dwmw2@infradead.org>,
Brian Norris <computersforpeace@gmail.com>,
linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 11/17] UBI: simplify recover_peb() code
Date: Fri, 16 Sep 2016 13:23:55 +0200 [thread overview]
Message-ID: <20160916132355.22c354f8@bbrezillon> (raw)
In-Reply-To: <bfcc6841-b5a7-8e40-5a6b-9e64f42390d7@nod.at>
On Fri, 16 Sep 2016 12:14:04 +0200
Richard Weinberger <richard@nod.at> wrote:
> Boris,
>
> On 05.09.2016 17:05, Boris Brezillon wrote:
> > + * This function is called in case of a write failure and moves all good data
> > + * from the potentially bad physical eraseblock to a good physical eraseblock.
> > + * This function also writes the data which was not written due to the failure.
> > + * Returns 0 in case of success, and a negative error code in case of failure.
> > + * This function tries %UBI_IO_RETRIES before giving up.
> > + */
> > +static int recover_peb(struct ubi_device *ubi, int pnum, int vol_id, int lnum,
> > + const void *buf, int offset, int len)
> > +{
> > + int err, idx = vol_id2idx(ubi, vol_id), tries;
> > + struct ubi_volume *vol = ubi->volumes[idx];
> > + struct ubi_vid_hdr *vid_hdr;
> > +
> > + vid_hdr = ubi_zalloc_vid_hdr(ubi, GFP_NOFS);
> > + if (!vid_hdr)
> > + return -ENOMEM;
> > +
> > + for (tries = 0; tries <= UBI_IO_RETRIES; tries++) {
> > + err = try_recover_peb(vol, pnum, lnum, buf, offset, len,
> > + vid_hdr);
> > + if (!err || err == -ENOSPC)
> > + break;
>
> Why do you handle ENOSPC as fatal error? Since the loop is bound by UBI_IO_RETRIES
> IMHO we can retry also upon ENOSPC.
I was just trying to mimic the existing behavior: if ubi_wl_get_peb()
fails to return a free PEB it returns -ENOSPC, and the current
implementation does not retry in this case.
I also realize that we should not retry if the error happened when
reading from the source PEB.
Maybe we should have an extra 'bool *retry' parameter to let
recover_peb() know whether the operation should be retried or not.
What do you think?
next prev parent reply other threads:[~2016-09-16 11:24 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-05 15:04 [PATCH v2 00/21] UBI: various rework/cleanup/fixes Boris Brezillon
2016-09-05 15:04 ` [PATCH v2 01/17] UBI: fastmap: use ubi_find_volume() instead of open coding it Boris Brezillon
2016-09-05 15:04 ` [PATCH v2 02/17] UBI: fix add_fastmap() to use the vid_hdr passed in argument Boris Brezillon
2016-09-05 15:04 ` [PATCH v2 03/17] UBI: fastmap: avoid multiple be32_to_cpu() when unneccesary Boris Brezillon
2016-09-05 15:04 ` [PATCH v2 04/17] UBI: fastmap: scrub PEB when bitflips are detected in a free PEB EC header Boris Brezillon
2016-09-05 15:04 ` [PATCH v2 05/17] UBI: factorize code used to manipulate volumes at attach time Boris Brezillon
2016-09-05 15:04 ` [PATCH v2 06/17] UBI: factorize destroy_av() and ubi_remove_av() code Boris Brezillon
2016-09-05 15:04 ` [PATCH v2 07/17] UBI: fastmap: use ubi_rb_for_each_entry() in unmap_peb() Boris Brezillon
2016-09-05 15:04 ` [PATCH v2 08/17] UBI: fastmap: use ubi_io_{read, write}_data() instead of ubi_io_{read, write}() Boris Brezillon
2016-09-05 15:05 ` [PATCH v2 09/17] UBI: provide helpers to allocate and free aeb elements Boris Brezillon
2016-09-05 15:05 ` [PATCH v2 10/17] UBI: move the global ech and vidh variables into struct ubi_attach_info Boris Brezillon
2016-09-05 15:05 ` [PATCH v2 11/17] UBI: simplify recover_peb() code Boris Brezillon
2016-09-16 10:14 ` Richard Weinberger
2016-09-16 11:23 ` Boris Brezillon [this message]
2016-09-16 13:23 ` Richard Weinberger
2016-09-16 13:27 ` Boris Brezillon
2016-09-05 15:05 ` [PATCH v2 12/17] UBI: simplify LEB write and atomic LEB change code Boris Brezillon
2016-09-05 15:05 ` [PATCH v2 13/17] UBI: add an helper to check lnum validity Boris Brezillon
2016-09-05 15:05 ` [PATCH v2 14/17] UBI: provide an helper to check whether a LEB is mapped or not Boris Brezillon
2016-09-05 15:05 ` [PATCH v2 15/17] UBI: provide an helper to query LEB information Boris Brezillon
2016-09-05 15:05 ` [PATCH v2 16/17] UBI: hide EBA internals Boris Brezillon
2016-09-16 10:43 ` Richard Weinberger
2016-09-16 11:38 ` Boris Brezillon
2016-09-16 13:24 ` Richard Weinberger
2016-09-05 15:05 ` [PATCH v2 17/17] UBI: introduce the VID buffer concept Boris Brezillon
2016-09-16 11:38 ` Richard Weinberger
2016-09-16 11:41 ` Boris Brezillon
2016-09-16 13:26 ` [PATCH v2 00/21] UBI: various rework/cleanup/fixes Richard Weinberger
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=20160916132355.22c354f8@bbrezillon \
--to=boris.brezillon@free-electrons.com \
--cc=computersforpeace@gmail.com \
--cc=dedekind1@gmail.com \
--cc=dwmw2@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).