dect
/
linux-2.6
Archived
13
0
Fork 0

mtd: nand: remove gotos in `check_create()'

This is a second step in restructuring `check_create()'. When we don't
rely on goto statements for our main functionality, the code will become
a little easier to manipulate.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
This commit is contained in:
Brian Norris 2011-09-07 13:13:35 -07:00 committed by Artem Bityutskiy
parent c5e8ef9c21
commit b61bf5bbf6
1 changed files with 19 additions and 16 deletions

View File

@ -875,7 +875,7 @@ static inline int nand_memory_bbt(struct mtd_info *mtd, struct nand_bbt_descr *b
*/ */
static int check_create(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr *bd) static int check_create(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr *bd)
{ {
int i, chips, writeops, chipsel, res; int i, chips, writeops, create, chipsel, res;
struct nand_chip *this = mtd->priv; struct nand_chip *this = mtd->priv;
struct nand_bbt_descr *td = this->bbt_td; struct nand_bbt_descr *td = this->bbt_td;
struct nand_bbt_descr *md = this->bbt_md; struct nand_bbt_descr *md = this->bbt_md;
@ -889,6 +889,7 @@ static int check_create(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_desc
for (i = 0; i < chips; i++) { for (i = 0; i < chips; i++) {
writeops = 0; writeops = 0;
create = 0;
rd = NULL; rd = NULL;
rd2 = NULL; rd2 = NULL;
/* Per chip or per device? */ /* Per chip or per device? */
@ -896,8 +897,8 @@ static int check_create(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_desc
/* Mirrored table available? */ /* Mirrored table available? */
if (md) { if (md) {
if (td->pages[i] == -1 && md->pages[i] == -1) { if (td->pages[i] == -1 && md->pages[i] == -1) {
create = 1;
writeops = 0x03; writeops = 0x03;
goto create;
} else if (td->pages[i] == -1) { } else if (td->pages[i] == -1) {
rd = md; rd = md;
td->version[i] = md->version[i]; td->version[i] = md->version[i];
@ -921,25 +922,27 @@ static int check_create(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_desc
} }
} else { } else {
if (td->pages[i] == -1) { if (td->pages[i] == -1) {
create = 1;
writeops = 0x01; writeops = 0x01;
goto create; } else {
rd = td;
} }
rd = td;
} }
goto writecheck;
create:
/* Create the bad block table by scanning the device? */
if (!(td->options & NAND_BBT_CREATE))
continue;
/* Create the table in memory by scanning the chip(s) */ if (create) {
if (!(this->bbt_options & NAND_BBT_CREATE_EMPTY)) /* Create the bad block table by scanning the device? */
create_bbt(mtd, buf, bd, chipsel); if (!(td->options & NAND_BBT_CREATE))
continue;
/* Create the table in memory by scanning the chip(s) */
if (!(this->bbt_options & NAND_BBT_CREATE_EMPTY))
create_bbt(mtd, buf, bd, chipsel);
td->version[i] = 1;
if (md)
md->version[i] = 1;
}
td->version[i] = 1;
if (md)
md->version[i] = 1;
writecheck:
/* Read back first? */ /* Read back first? */
if (rd) if (rd)
read_abs_bbt(mtd, buf, rd, chipsel); read_abs_bbt(mtd, buf, rd, chipsel);