From: Richard Weinberger <richard@nod.at>
To: dedekind1@gmail.com
Cc: Heinz.Egger@linutronix.de, tglx@linutronix.de,
linux-mtd@lists.infradead.org, tim.bird@am.sony.com,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/7] [RFC] UBI: Add checkpoint on-chip layout
Date: Fri, 11 May 2012 14:02:53 +0200 [thread overview]
Message-ID: <4FACFFED.40105@nod.at> (raw)
In-Reply-To: <1336735041.2625.35.camel@sauron.fi.intel.com>
[-- Attachment #1: Type: text/plain, Size: 4226 bytes --]
Am 11.05.2012 13:17, schrieb Artem Bityutskiy:
> I'd like to a git tree for this stuff at some point, when you feel you
> are ready, and then do all further changes incrementally on top of that.
> Then would also be able to participate - at least do minor things myself
> and send patches to you.
>
> On Wed, 2012-05-09 at 19:38 +0200, Richard Weinberger wrote:
>> +#ifdef CONFIG_MTD_UBI_CHECKPOINT
>> +#define UBI_CP_SB_VOLUME_ID (UBI_LAYOUT_VOLUME_ID + 1)
>> +#define UBI_CP_DATA_VOLUME_ID (UBI_CP_SB_VOLUME_ID + 1)
>
> #define UBI_CP_DATA_VOLUME_ID (UBI_LAYOUT_VOLUME_ID + 2)
>
> is more readable I think.
Okay.
>> +#define UBI_CP_MAX_BLOCKS 32
>
> This really needs a comment on top of it telling how big flash with say,
> 128KiB PEB size this would support.
This is a default value which was randomly chosen.
The last patch makes this value configurable via Kconfig.
It is one of these parameters where we have to find sane a default value.
>> +
>> +/**
>> + * struct ubi_cp_sb - UBI checkpoint super block
>> + * @magic: checkpoint super block magic number (%UBI_CP_SB_MAGIC)
>> + * @version: format version of this checkpoint
>> + * @data_crc: CRC over the checkpoint data
>> + * @nblocks: number of PEBs used by this checkpoint
>> + * @block_loc: an array containing the location of all PEBs of the checkpoint
>> + * @block_ec: the erase counter of each used PEB
>> + * @sqnum: highest sequence number value at the time while taking the checkpoint
>> + *
>> + * The checkpoint
>> + */
>> +struct ubi_cp_sb {
>> + __be32 magic;
>> + __u8 version;
>> + __be32 data_crc;
>> + __be32 nblocks;
>> + __be32 block_loc[UBI_CP_MAX_BLOCKS];
>> + __be32 block_ec[UBI_CP_MAX_BLOCKS];
>> + __be64 sqnum;
>> +} __packed;
>
> Please, unless it is size-critical, always leave some unused space in
> on-flash data structure for possible future extensions, and initialize
> them to 0.
If the fastmap on-flash layout changes, I'll increment the "version" field.
But I can leave some space.
> BTW, side-note, please, check that you follow the convention of UBI and
> make all on-flash data structures 64-bit aligned (of course unless it is
> size-critical).
Will check.
>> +/**
>> + * struct ubi_cp_long_pool - Checkpoint pool with long term used PEBs
>> + * @magic: long pool magic numer (%UBI_CP_LPOOL_MAGIC)
>> + * @size: current pool size
>> + * @pebs: an array containing the location of all PEBs in this pool
>> + */
>> +struct ubi_cp_long_pool {
>> + __be32 magic;
>> + __be32 size;
>> + __be32 pebs[UBI_CP_MAX_POOL_SIZE];
>> +} __packed;
>
> What's the perpose of having these pools - once you read all the
> information from the fastmap and the wl subsystem inserts it to the
> RB-trees - you already know this data. Why you need to store this on the
> flash? This whole pool think look redundant and unneeded.
We need this pool to find all PEBs that have changed since we wrote the last
checkpoint (or fastmap).
BTW: That's why we named it "UBI Checkpointing".
If all PEBs in the pool are used (IOW no longer empty) we fill the pool with empty PEBs
and write a new checkpoint.
While reading the checkpoint we know that only PEBs within the pool my have changed...
Without this pool we'd have to write the checkpoint every time the EBA changes
or we'd have to scan the whole list of free PEBs while attaching.
>> +/**
>> + * struct ubi_cp_ec - stores the erase counter of a PEB
>> + * @pnum: PEB number
>> + * @ec: ec of this PEB
>> + */
>> +struct ubi_cp_ec {
>> + __be32 pnum;
>> + __be32 ec;
>> +} __packed;
>
> It is weird that you do not have an array of ECs instead for _every_
> PEB. Why wasting the flash and time writing/reading this data?
By array of ECs you mean that all ec values are written to the flash
and pnum is the index?
Sounds sane.
>> +/**
>> + * struct ubi_cp_eba - denotes an association beween a PEB and LEB
>> + * @lnum: LEB number
>> + * @pnum: PEB number
>> + */
>> +struct ubi_cp_eba {
>> + __be32 lnum;
>> + __be32 pnum;
>> +} __packed;
>
> Same here - I'd expect a simple array for every PEB in the system.
>
Sounds sane too. :)
Thanks,
//richard
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 490 bytes --]
next prev parent reply other threads:[~2012-05-11 12:03 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-09 17:38 [RFC v2] UBI: UBIVIS (aka checkpointing) support Richard Weinberger
2012-05-09 17:38 ` [PATCH 1/7] [RFC] UBI: Add checkpoint on-chip layout Richard Weinberger
2012-05-11 11:17 ` Artem Bityutskiy
2012-05-11 12:02 ` Richard Weinberger [this message]
2012-05-11 12:21 ` Artem Bityutskiy
2012-05-11 17:15 ` Richard Weinberger
2012-05-11 18:56 ` Artem Bityutskiy
2012-05-11 19:15 ` Richard Weinberger
2012-05-09 17:38 ` [PATCH 2/7] [RFC] UBI: Add checkpoint struct to ubi_device Richard Weinberger
2012-05-09 17:38 ` [PATCH 3/7] [RFC] UBI: Export next_sqnum() Richard Weinberger
2012-05-09 17:38 ` [PATCH 4/7] [RFC] UBI: Export compare_lebs() Richard Weinberger
2012-05-09 17:38 ` [PATCH 5/7] [RFC] UBI: Make wl subsystem checkpoint aware Richard Weinberger
2012-05-09 17:38 ` [PATCH 6/7] [RFC] UBI: Implement checkpointing support Richard Weinberger
2012-05-09 17:38 ` [PATCH 7/7] [RFC] UBI: wire up checkpointing Richard Weinberger
2012-05-10 4:26 ` [RFC v2] UBI: UBIVIS (aka checkpointing) support Artem Bityutskiy
2012-05-10 8:33 ` Richard Weinberger
2012-05-11 10:46 ` Artem Bityutskiy
2012-05-11 10:49 ` Richard Weinberger
2012-05-11 11:26 ` Artem Bityutskiy
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=4FACFFED.40105@nod.at \
--to=richard@nod.at \
--cc=Heinz.Egger@linutronix.de \
--cc=dedekind1@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=tglx@linutronix.de \
--cc=tim.bird@am.sony.com \
/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).