Commit 7d731019 authored by Artem Bityutskiy's avatar Artem Bityutskiy Committed by Linus Torvalds

mtd: fix merge conflict resolution breakage

This patch fixes merge conflict resolution breakage introduced by merge
d3712b9d ("Merge tag 'for-linus' of git://github.com/prasad-joshi/logfs_upstream").

The commit changed 'mtd_can_have_bb()' function and made it always
return zero, which is incorrect.  Instead, we need it to return whether
the underlying flash device can have bad eraseblocks or not.  UBI needs
this information because it affects how it handles the underlying flash.
E.g., if the underlying flash is NOR, it cannot have bad blocks and any
write or erase error is fatal, and all we can do is to switch to R/O
mode.  We do not need to reserve a pool of good eraseblocks for bad
eraseblocks handling, and so on.

This patch also removes 'mtd_can_have_bb()' invocations from Logfs to
ensure correct Logfs behavior.

I've tested that with this patch UBI works on top of NOR and NAND
flashes emulated by mtdram and nandsim correspondingly.

This patch is based on patch from Linus Torvalds.
Signed-off-by: default avatarArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
Acked-by: default avatarJörn Engel <joern@logfs.org>
Acked-by: default avatarPrasad Joshi <prasadjoshi.linux@gmail.com>
Acked-by: default avatarBrian Norris <computersforpeace@gmail.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 62aa2b53
...@@ -152,9 +152,6 @@ static struct page *logfs_mtd_find_first_sb(struct super_block *sb, u64 *ofs) ...@@ -152,9 +152,6 @@ static struct page *logfs_mtd_find_first_sb(struct super_block *sb, u64 *ofs)
filler_t *filler = logfs_mtd_readpage; filler_t *filler = logfs_mtd_readpage;
struct mtd_info *mtd = super->s_mtd; struct mtd_info *mtd = super->s_mtd;
if (!mtd_can_have_bb(mtd))
return NULL;
*ofs = 0; *ofs = 0;
while (mtd_block_isbad(mtd, *ofs)) { while (mtd_block_isbad(mtd, *ofs)) {
*ofs += mtd->erasesize; *ofs += mtd->erasesize;
...@@ -172,9 +169,6 @@ static struct page *logfs_mtd_find_last_sb(struct super_block *sb, u64 *ofs) ...@@ -172,9 +169,6 @@ static struct page *logfs_mtd_find_last_sb(struct super_block *sb, u64 *ofs)
filler_t *filler = logfs_mtd_readpage; filler_t *filler = logfs_mtd_readpage;
struct mtd_info *mtd = super->s_mtd; struct mtd_info *mtd = super->s_mtd;
if (!mtd_can_have_bb(mtd))
return NULL;
*ofs = mtd->size - mtd->erasesize; *ofs = mtd->size - mtd->erasesize;
while (mtd_block_isbad(mtd, *ofs)) { while (mtd_block_isbad(mtd, *ofs)) {
*ofs -= mtd->erasesize; *ofs -= mtd->erasesize;
......
...@@ -489,7 +489,7 @@ static inline int mtd_has_oob(const struct mtd_info *mtd) ...@@ -489,7 +489,7 @@ static inline int mtd_has_oob(const struct mtd_info *mtd)
static inline int mtd_can_have_bb(const struct mtd_info *mtd) static inline int mtd_can_have_bb(const struct mtd_info *mtd)
{ {
return 0; return !!mtd->block_isbad;
} }
/* Kernel-side ioctl definitions */ /* Kernel-side ioctl definitions */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment