Merge tag 'for-linus-3.3' of git://git.infradead.org/mtd-2.6
MTD pull for 3.3 * tag 'for-linus-3.3' of git://git.infradead.org/mtd-2.6: (113 commits) mtd: Fix dependency for MTD_DOC200x mtd: do not use mtd->block_markbad directly logfs: do not use 'mtd->block_isbad' directly mtd: introduce mtd_can_have_bb helper mtd: do not use mtd->suspend and mtd->resume directly mtd: do not use mtd->lock, unlock and is_locked directly mtd: do not use mtd->sync directly mtd: harmonize mtd_writev usage mtd: do not use mtd->lock_user_prot_reg directly mtd: mtd->write_user_prot_reg directly mtd: do not use mtd->read_*_prot_reg directly mtd: do not use mtd->get_*_prot_info directly mtd: do not use mtd->read_oob directly mtd: mtdoops: do not use mtd->panic_write directly romfs: do not use mtd->get_unmapped_area directly mtd: do not use mtd->get_unmapped_area directly mtd: do use mtd->point directly mtd: introduce mtd_has_oob helper mtd: mtdcore: export symbols cleanup mtd: clean-up the default_mtd_writev function ... Fix up trivial edit/remove conflict in drivers/staging/spectra/lld_mtd.c
This commit is contained in:
@@ -74,7 +74,7 @@ static void jffs2_erase_block(struct jffs2_sb_info *c,
|
||||
((struct erase_priv_struct *)instr->priv)->jeb = jeb;
|
||||
((struct erase_priv_struct *)instr->priv)->c = c;
|
||||
|
||||
ret = c->mtd->erase(c->mtd, instr);
|
||||
ret = mtd_erase(c->mtd, instr);
|
||||
if (!ret)
|
||||
return;
|
||||
|
||||
@@ -336,12 +336,11 @@ static int jffs2_block_check_erase(struct jffs2_sb_info *c, struct jffs2_erasebl
|
||||
uint32_t ofs;
|
||||
size_t retlen;
|
||||
int ret = -EIO;
|
||||
unsigned long *wordebuf;
|
||||
|
||||
if (c->mtd->point) {
|
||||
unsigned long *wordebuf;
|
||||
|
||||
ret = c->mtd->point(c->mtd, jeb->offset, c->sector_size,
|
||||
&retlen, &ebuf, NULL);
|
||||
ret = mtd_point(c->mtd, jeb->offset, c->sector_size, &retlen,
|
||||
&ebuf, NULL);
|
||||
if (ret != -EOPNOTSUPP) {
|
||||
if (ret) {
|
||||
D1(printk(KERN_DEBUG "MTD point failed %d\n", ret));
|
||||
goto do_flash_read;
|
||||
@@ -349,7 +348,7 @@ static int jffs2_block_check_erase(struct jffs2_sb_info *c, struct jffs2_erasebl
|
||||
if (retlen < c->sector_size) {
|
||||
/* Don't muck about if it won't let us point to the whole erase sector */
|
||||
D1(printk(KERN_DEBUG "MTD point returned len too short: 0x%zx\n", retlen));
|
||||
c->mtd->unpoint(c->mtd, jeb->offset, retlen);
|
||||
mtd_unpoint(c->mtd, jeb->offset, retlen);
|
||||
goto do_flash_read;
|
||||
}
|
||||
wordebuf = ebuf-sizeof(*wordebuf);
|
||||
@@ -358,7 +357,7 @@ static int jffs2_block_check_erase(struct jffs2_sb_info *c, struct jffs2_erasebl
|
||||
if (*++wordebuf != ~0)
|
||||
break;
|
||||
} while(--retlen);
|
||||
c->mtd->unpoint(c->mtd, jeb->offset, c->sector_size);
|
||||
mtd_unpoint(c->mtd, jeb->offset, c->sector_size);
|
||||
if (retlen) {
|
||||
printk(KERN_WARNING "Newly-erased block contained word 0x%lx at offset 0x%08tx\n",
|
||||
*wordebuf, jeb->offset + c->sector_size-retlen*sizeof(*wordebuf));
|
||||
@@ -381,7 +380,7 @@ static int jffs2_block_check_erase(struct jffs2_sb_info *c, struct jffs2_erasebl
|
||||
|
||||
*bad_offset = ofs;
|
||||
|
||||
ret = c->mtd->read(c->mtd, ofs, readlen, &retlen, ebuf);
|
||||
ret = mtd_read(c->mtd, ofs, readlen, &retlen, ebuf);
|
||||
if (ret) {
|
||||
printk(KERN_WARNING "Read of newly-erased block at 0x%08x failed: %d. Putting on bad_list\n", ofs, ret);
|
||||
ret = -EIO;
|
||||
|
@@ -466,7 +466,6 @@ struct inode *jffs2_new_inode (struct inode *dir_i, umode_t mode, struct jffs2_r
|
||||
|
||||
if (insert_inode_locked(inode) < 0) {
|
||||
make_bad_inode(inode);
|
||||
unlock_new_inode(inode);
|
||||
iput(inode);
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
@@ -62,17 +62,15 @@ static int check_node_data(struct jffs2_sb_info *c, struct jffs2_tmp_dnode_info
|
||||
#ifndef __ECOS
|
||||
/* TODO: instead, incapsulate point() stuff to jffs2_flash_read(),
|
||||
* adding and jffs2_flash_read_end() interface. */
|
||||
if (c->mtd->point) {
|
||||
err = c->mtd->point(c->mtd, ofs, len, &retlen,
|
||||
(void **)&buffer, NULL);
|
||||
if (!err && retlen < len) {
|
||||
JFFS2_WARNING("MTD point returned len too short: %zu instead of %u.\n", retlen, tn->csize);
|
||||
c->mtd->unpoint(c->mtd, ofs, retlen);
|
||||
} else if (err)
|
||||
err = mtd_point(c->mtd, ofs, len, &retlen, (void **)&buffer, NULL);
|
||||
if (!err && retlen < len) {
|
||||
JFFS2_WARNING("MTD point returned len too short: %zu instead of %u.\n", retlen, tn->csize);
|
||||
mtd_unpoint(c->mtd, ofs, retlen);
|
||||
} else if (err) {
|
||||
if (err != -EOPNOTSUPP)
|
||||
JFFS2_WARNING("MTD point failed: error code %d.\n", err);
|
||||
else
|
||||
pointed = 1; /* succefully pointed to device */
|
||||
}
|
||||
} else
|
||||
pointed = 1; /* succefully pointed to device */
|
||||
#endif
|
||||
|
||||
if (!pointed) {
|
||||
@@ -101,7 +99,7 @@ static int check_node_data(struct jffs2_sb_info *c, struct jffs2_tmp_dnode_info
|
||||
kfree(buffer);
|
||||
#ifndef __ECOS
|
||||
else
|
||||
c->mtd->unpoint(c->mtd, ofs, len);
|
||||
mtd_unpoint(c->mtd, ofs, len);
|
||||
#endif
|
||||
|
||||
if (crc != tn->data_crc) {
|
||||
@@ -137,7 +135,7 @@ free_out:
|
||||
kfree(buffer);
|
||||
#ifndef __ECOS
|
||||
else
|
||||
c->mtd->unpoint(c->mtd, ofs, len);
|
||||
mtd_unpoint(c->mtd, ofs, len);
|
||||
#endif
|
||||
return err;
|
||||
}
|
||||
|
@@ -97,15 +97,15 @@ int jffs2_scan_medium(struct jffs2_sb_info *c)
|
||||
size_t pointlen, try_size;
|
||||
|
||||
if (c->mtd->point) {
|
||||
ret = c->mtd->point(c->mtd, 0, c->mtd->size, &pointlen,
|
||||
(void **)&flashbuf, NULL);
|
||||
ret = mtd_point(c->mtd, 0, c->mtd->size, &pointlen,
|
||||
(void **)&flashbuf, NULL);
|
||||
if (!ret && pointlen < c->mtd->size) {
|
||||
/* Don't muck about if it won't let us point to the whole flash */
|
||||
D1(printk(KERN_DEBUG "MTD point returned len too short: 0x%zx\n", pointlen));
|
||||
c->mtd->unpoint(c->mtd, 0, pointlen);
|
||||
mtd_unpoint(c->mtd, 0, pointlen);
|
||||
flashbuf = NULL;
|
||||
}
|
||||
if (ret)
|
||||
if (ret && ret != -EOPNOTSUPP)
|
||||
D1(printk(KERN_DEBUG "MTD point failed %d\n", ret));
|
||||
}
|
||||
#endif
|
||||
@@ -273,7 +273,7 @@ int jffs2_scan_medium(struct jffs2_sb_info *c)
|
||||
kfree(flashbuf);
|
||||
#ifndef __ECOS
|
||||
else
|
||||
c->mtd->unpoint(c->mtd, 0, c->mtd->size);
|
||||
mtd_unpoint(c->mtd, 0, c->mtd->size);
|
||||
#endif
|
||||
kfree(s);
|
||||
return ret;
|
||||
@@ -455,7 +455,7 @@ static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblo
|
||||
if (jffs2_cleanmarker_oob(c)) {
|
||||
int ret;
|
||||
|
||||
if (c->mtd->block_isbad(c->mtd, jeb->offset))
|
||||
if (mtd_block_isbad(c->mtd, jeb->offset))
|
||||
return BLK_STATE_BADBLOCK;
|
||||
|
||||
ret = jffs2_check_nand_cleanmarker(c, jeb);
|
||||
|
@@ -335,9 +335,7 @@ static void jffs2_put_super (struct super_block *sb)
|
||||
jffs2_flash_cleanup(c);
|
||||
kfree(c->inocache_list);
|
||||
jffs2_clear_xattr_subsystem(c);
|
||||
if (c->mtd->sync)
|
||||
c->mtd->sync(c->mtd);
|
||||
|
||||
mtd_sync(c->mtd);
|
||||
D1(printk(KERN_DEBUG "jffs2_put_super returning\n"));
|
||||
}
|
||||
|
||||
|
@@ -228,7 +228,7 @@ static int jffs2_verify_write(struct jffs2_sb_info *c, unsigned char *buf,
|
||||
size_t retlen;
|
||||
char *eccstr;
|
||||
|
||||
ret = c->mtd->read(c->mtd, ofs, c->wbuf_pagesize, &retlen, c->wbuf_verify);
|
||||
ret = mtd_read(c->mtd, ofs, c->wbuf_pagesize, &retlen, c->wbuf_verify);
|
||||
if (ret && ret != -EUCLEAN && ret != -EBADMSG) {
|
||||
printk(KERN_WARNING "jffs2_verify_write(): Read back of page at %08x failed: %d\n", c->wbuf_ofs, ret);
|
||||
return ret;
|
||||
@@ -337,7 +337,8 @@ static void jffs2_wbuf_recover(struct jffs2_sb_info *c)
|
||||
}
|
||||
|
||||
/* Do the read... */
|
||||
ret = c->mtd->read(c->mtd, start, c->wbuf_ofs - start, &retlen, buf);
|
||||
ret = mtd_read(c->mtd, start, c->wbuf_ofs - start, &retlen,
|
||||
buf);
|
||||
|
||||
/* ECC recovered ? */
|
||||
if ((ret == -EUCLEAN || ret == -EBADMSG) &&
|
||||
@@ -413,13 +414,12 @@ static void jffs2_wbuf_recover(struct jffs2_sb_info *c)
|
||||
if (breakme++ == 20) {
|
||||
printk(KERN_NOTICE "Faking write error at 0x%08x\n", ofs);
|
||||
breakme = 0;
|
||||
c->mtd->write(c->mtd, ofs, towrite, &retlen,
|
||||
brokenbuf);
|
||||
mtd_write(c->mtd, ofs, towrite, &retlen, brokenbuf);
|
||||
ret = -EIO;
|
||||
} else
|
||||
#endif
|
||||
ret = c->mtd->write(c->mtd, ofs, towrite, &retlen,
|
||||
rewrite_buf);
|
||||
ret = mtd_write(c->mtd, ofs, towrite, &retlen,
|
||||
rewrite_buf);
|
||||
|
||||
if (ret || retlen != towrite || jffs2_verify_write(c, rewrite_buf, ofs)) {
|
||||
/* Argh. We tried. Really we did. */
|
||||
@@ -619,13 +619,14 @@ static int __jffs2_flush_wbuf(struct jffs2_sb_info *c, int pad)
|
||||
if (breakme++ == 20) {
|
||||
printk(KERN_NOTICE "Faking write error at 0x%08x\n", c->wbuf_ofs);
|
||||
breakme = 0;
|
||||
c->mtd->write(c->mtd, c->wbuf_ofs, c->wbuf_pagesize, &retlen,
|
||||
brokenbuf);
|
||||
mtd_write(c->mtd, c->wbuf_ofs, c->wbuf_pagesize, &retlen,
|
||||
brokenbuf);
|
||||
ret = -EIO;
|
||||
} else
|
||||
#endif
|
||||
|
||||
ret = c->mtd->write(c->mtd, c->wbuf_ofs, c->wbuf_pagesize, &retlen, c->wbuf);
|
||||
ret = mtd_write(c->mtd, c->wbuf_ofs, c->wbuf_pagesize,
|
||||
&retlen, c->wbuf);
|
||||
|
||||
if (ret) {
|
||||
printk(KERN_WARNING "jffs2_flush_wbuf(): Write failed with %d\n", ret);
|
||||
@@ -861,8 +862,8 @@ int jffs2_flash_writev(struct jffs2_sb_info *c, const struct kvec *invecs,
|
||||
v += wbuf_retlen;
|
||||
|
||||
if (vlen >= c->wbuf_pagesize) {
|
||||
ret = c->mtd->write(c->mtd, outvec_to, PAGE_DIV(vlen),
|
||||
&wbuf_retlen, v);
|
||||
ret = mtd_write(c->mtd, outvec_to, PAGE_DIV(vlen),
|
||||
&wbuf_retlen, v);
|
||||
if (ret < 0 || wbuf_retlen != PAGE_DIV(vlen))
|
||||
goto outfile;
|
||||
|
||||
@@ -948,11 +949,11 @@ int jffs2_flash_read(struct jffs2_sb_info *c, loff_t ofs, size_t len, size_t *re
|
||||
int ret;
|
||||
|
||||
if (!jffs2_is_writebuffered(c))
|
||||
return c->mtd->read(c->mtd, ofs, len, retlen, buf);
|
||||
return mtd_read(c->mtd, ofs, len, retlen, buf);
|
||||
|
||||
/* Read flash */
|
||||
down_read(&c->wbuf_sem);
|
||||
ret = c->mtd->read(c->mtd, ofs, len, retlen, buf);
|
||||
ret = mtd_read(c->mtd, ofs, len, retlen, buf);
|
||||
|
||||
if ( (ret == -EBADMSG || ret == -EUCLEAN) && (*retlen == len) ) {
|
||||
if (ret == -EBADMSG)
|
||||
@@ -1031,7 +1032,7 @@ int jffs2_check_oob_empty(struct jffs2_sb_info *c,
|
||||
ops.len = ops.ooboffs = ops.retlen = ops.oobretlen = 0;
|
||||
ops.datbuf = NULL;
|
||||
|
||||
ret = c->mtd->read_oob(c->mtd, jeb->offset, &ops);
|
||||
ret = mtd_read_oob(c->mtd, jeb->offset, &ops);
|
||||
if (ret || ops.oobretlen != ops.ooblen) {
|
||||
printk(KERN_ERR "cannot read OOB for EB at %08x, requested %zd"
|
||||
" bytes, read %zd bytes, error %d\n",
|
||||
@@ -1074,7 +1075,7 @@ int jffs2_check_nand_cleanmarker(struct jffs2_sb_info *c,
|
||||
ops.len = ops.ooboffs = ops.retlen = ops.oobretlen = 0;
|
||||
ops.datbuf = NULL;
|
||||
|
||||
ret = c->mtd->read_oob(c->mtd, jeb->offset, &ops);
|
||||
ret = mtd_read_oob(c->mtd, jeb->offset, &ops);
|
||||
if (ret || ops.oobretlen != ops.ooblen) {
|
||||
printk(KERN_ERR "cannot read OOB for EB at %08x, requested %zd"
|
||||
" bytes, read %zd bytes, error %d\n",
|
||||
@@ -1100,7 +1101,7 @@ int jffs2_write_nand_cleanmarker(struct jffs2_sb_info *c,
|
||||
ops.len = ops.ooboffs = ops.retlen = ops.oobretlen = 0;
|
||||
ops.datbuf = NULL;
|
||||
|
||||
ret = c->mtd->write_oob(c->mtd, jeb->offset, &ops);
|
||||
ret = mtd_write_oob(c->mtd, jeb->offset, &ops);
|
||||
if (ret || ops.oobretlen != ops.ooblen) {
|
||||
printk(KERN_ERR "cannot write OOB for EB at %08x, requested %zd"
|
||||
" bytes, read %zd bytes, error %d\n",
|
||||
@@ -1129,11 +1130,8 @@ int jffs2_write_nand_badblock(struct jffs2_sb_info *c, struct jffs2_eraseblock *
|
||||
if( ++jeb->bad_count < MAX_ERASE_FAILURES)
|
||||
return 0;
|
||||
|
||||
if (!c->mtd->block_markbad)
|
||||
return 1; // What else can we do?
|
||||
|
||||
printk(KERN_WARNING "JFFS2: marking eraseblock at %08x\n as bad", bad_offset);
|
||||
ret = c->mtd->block_markbad(c->mtd, bad_offset);
|
||||
ret = mtd_block_markbad(c->mtd, bad_offset);
|
||||
|
||||
if (ret) {
|
||||
D1(printk(KERN_WARNING "jffs2_write_nand_badblock(): Write failed for block at %08x: error %d\n", jeb->offset, ret));
|
||||
|
@@ -13,30 +13,6 @@
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include "nodelist.h"
|
||||
|
||||
/* This ought to be in core MTD code. All registered MTD devices
|
||||
without writev should have this put in place. Bug the MTD
|
||||
maintainer */
|
||||
static inline int mtd_fake_writev(struct mtd_info *mtd, const struct kvec *vecs,
|
||||
unsigned long count, loff_t to, size_t *retlen)
|
||||
{
|
||||
unsigned long i;
|
||||
size_t totlen = 0, thislen;
|
||||
int ret = 0;
|
||||
|
||||
for (i=0; i<count; i++) {
|
||||
if (!vecs[i].iov_len)
|
||||
continue;
|
||||
ret = mtd->write(mtd, to, vecs[i].iov_len, &thislen, vecs[i].iov_base);
|
||||
totlen += thislen;
|
||||
if (ret || thislen != vecs[i].iov_len)
|
||||
break;
|
||||
to += vecs[i].iov_len;
|
||||
}
|
||||
if (retlen)
|
||||
*retlen = totlen;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int jffs2_flash_direct_writev(struct jffs2_sb_info *c, const struct kvec *vecs,
|
||||
unsigned long count, loff_t to, size_t *retlen)
|
||||
{
|
||||
@@ -50,18 +26,14 @@ int jffs2_flash_direct_writev(struct jffs2_sb_info *c, const struct kvec *vecs,
|
||||
}
|
||||
}
|
||||
|
||||
if (c->mtd->writev)
|
||||
return c->mtd->writev(c->mtd, vecs, count, to, retlen);
|
||||
else {
|
||||
return mtd_fake_writev(c->mtd, vecs, count, to, retlen);
|
||||
}
|
||||
return mtd_writev(c->mtd, vecs, count, to, retlen);
|
||||
}
|
||||
|
||||
int jffs2_flash_direct_write(struct jffs2_sb_info *c, loff_t ofs, size_t len,
|
||||
size_t *retlen, const u_char *buf)
|
||||
{
|
||||
int ret;
|
||||
ret = c->mtd->write(c->mtd, ofs, len, retlen, buf);
|
||||
ret = mtd_write(c->mtd, ofs, len, retlen, buf);
|
||||
|
||||
if (jffs2_sum_active()) {
|
||||
struct kvec vecs[1];
|
||||
|
Reference in New Issue
Block a user