linux-mtd.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Richard Weinberger <richard@nod.at>
To: dedekind1@gmail.com
Cc: linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 3/4] UBI: Fastmap: Care about the protection queue
Date: Mon, 13 Oct 2014 16:30:55 +0200	[thread overview]
Message-ID: <543BE21F.5020504@nod.at> (raw)
In-Reply-To: <1413206263.7906.18.camel@sauron.fi.intel.com>

Am 13.10.2014 um 15:17 schrieb Artem Bityutskiy:
> On Fri, 2014-10-03 at 21:06 +0200, Richard Weinberger wrote:
>> Fastmap needs basically access to all internal state of UBI, which
>> lives mostly
>> within wl.c
> 
> Sounds like a very strong assertion, smells a bit fishy, need the
> details.

Fastmap need to know the exact state of each PEB.
I.e. is it free, used, scheduled for erase, etc...

>> It needs to iterate over the used, free, erase, scrub RB-trees, the
>> protection queue, etc. to
>> collect the exact state of all PEBs.
> 
> When? In 'ubi_write_fastmap()' when forming the FM pool data structures?

Yes.

> I think you can just add a function like this to wl.c:
> 
> int ubi_wl_get_peb_info(int pnum, struct ubi_wl_peb_info *pebinfo)
> 
> Yoy will give it the PEB number you are interested in, it will return
> you the information you need in 'pebinfo'. The information will contain
> the EC, the state (used, free, etc).
> 
> If you need just the EC, then you do not even need the ubi_wl_peb_info
> data structure.
> 
> Then you just iterate over all PEBs and fill the FM pool data
> structures.
> 
> Would something like this work?

The interface would work but some work in wl.c is needed.
For example if I want to find out in which state PEB 1 is wl.c would have to
look int free free, used free, protection queue, etc.. to tell me the state. This is slow.

But we could add the state information to struct ubi_wl_entry by adding a single integer attribute called "state" or "flags".
Then wl.c can set the state every time the PEB moves between internal data structures.
I.e. upon it moves from the used to free rb tree the flag UBI_STATE_FREE will be cleared and UBI_STATE_USED set.
This will also give us a very efficient way to ensure a sane state.
In fact, I have already written such a feature. I needed it to hunt down a Fastmap bug which lead to a state where a PEB existed
in both the used tree and the protection queue. Using the ->state attribute in ubi_wl_entry I was able to add various
cheap asserts to the code and found the incorrect transaction.

The cost of this bloating the ubi_wl_entry struct by sizeof(int) bytes.
But we'll get very efficient variants of self_check_in_wl_tree() and friends.

Also the implementation of ubi_wl_get_peb_info() would be easy.
It will be mostly like:
int ubi_wl_get_peb_info(int pnum, struct ubi_wl_peb_info *pebinfo)
{
...
e = ubi->lookuptbl[pnum];
fill_pebinfo(pebinfo, e->state);
...
}

Would this make you happy? :)

Thanks,
//richard

  reply	other threads:[~2014-10-13 14:38 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-29 22:20 UBI: Fastmap fixes - round one Richard Weinberger
2014-09-29 22:20 ` [PATCH 1/4] UBI: Ensure that all fastmap work is done upon WL shutdown Richard Weinberger
2014-09-30  6:26   ` Artem Bityutskiy
2014-09-30  6:58     ` Richard Weinberger
2014-09-30  7:53       ` Bityutskiy, Artem
2014-09-30  8:07         ` Richard Weinberger
2014-10-03 12:52           ` Artem Bityutskiy
2014-10-02 13:05   ` Tanya Brokhman
2014-10-02 13:18     ` Richard Weinberger
2014-10-02 13:38       ` Tanya Brokhman
2014-09-29 22:20 ` [PATCH 2/4] UBI: Fastmap: Calc fastmap size correctly Richard Weinberger
2014-10-02 13:14   ` Tanya Brokhman
2014-10-02 13:18     ` Richard Weinberger
2014-10-02 14:04   ` Tanya Brokhman
2014-10-03 14:38   ` Artem Bityutskiy
2014-09-29 22:20 ` [PATCH 3/4] UBI: Fastmap: Care about the protection queue Richard Weinberger
2014-10-02 13:28   ` Tanya Brokhman
2014-10-02 13:32     ` Richard Weinberger
2014-10-02 14:14       ` Tanya Brokhman
2014-10-03 14:31   ` Artem Bityutskiy
2014-10-03 19:06     ` Richard Weinberger
2014-10-13 13:17       ` Artem Bityutskiy
2014-10-13 14:30         ` Richard Weinberger [this message]
2014-10-13 15:23           ` Artem Bityutskiy
2014-10-13 15:28             ` Bityutskiy, Artem
2014-10-13 21:04             ` Richard Weinberger
2014-10-14 10:23               ` Artem Bityutskiy
2014-10-14 12:21                 ` Tanya Brokhman
2014-10-14 13:02                   ` Artem Bityutskiy
2014-10-14 13:35                     ` Tanya Brokhman
2014-10-16 10:06                 ` Richard Weinberger
2014-10-16 10:15                   ` Artem Bityutskiy
2014-10-16 11:07                     ` Richard Weinberger
2014-10-20 14:46                   ` Artem Bityutskiy
2014-10-20 15:17                     ` Richard Weinberger
2014-10-20 15:40                       ` Artem Bityutskiy
2014-10-20 15:59                         ` Richard Weinberger
2014-10-20 16:09                           ` Artem Bityutskiy
2014-10-20 16:17                             ` Richard Weinberger
2014-10-20 20:46                         ` Richard Weinberger
2014-09-29 22:20 ` [PATCH 4/4] UBI: Fastmap: Ensure that only one fastmap work is scheduled Richard Weinberger
2014-09-30  6:45   ` Bityutskiy, Artem
2014-09-30  6:59     ` Richard Weinberger
2014-09-30  7:39       ` Bityutskiy, Artem
2014-09-30  7:44         ` Richard Weinberger
2014-10-02 14:22           ` Tanya Brokhman

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=543BE21F.5020504@nod.at \
    --to=richard@nod.at \
    --cc=dedekind1@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@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;
as well as URLs for NNTP newsgroup(s).