mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
MTD pull for 3.3
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iEYEABECAAYFAk8Mq/MACgkQdwG7hYl686PeFACfZCgbdDWD9A/JL+i1RMfExVu6 Pi0An3Hmc3PTCp0yQ21KtcKhpF9CAMEu =NfuL -----END PGP SIGNATURE----- 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:
commit
7b3480f8b7
114 changed files with 2764 additions and 1795 deletions
|
|
@ -13,13 +13,14 @@
|
|||
|
||||
#define PAGE_OFS(ofs) ((ofs) & (PAGE_SIZE-1))
|
||||
|
||||
static int mtd_read(struct super_block *sb, loff_t ofs, size_t len, void *buf)
|
||||
static int logfs_mtd_read(struct super_block *sb, loff_t ofs, size_t len,
|
||||
void *buf)
|
||||
{
|
||||
struct mtd_info *mtd = logfs_super(sb)->s_mtd;
|
||||
size_t retlen;
|
||||
int ret;
|
||||
|
||||
ret = mtd->read(mtd, ofs, len, &retlen, buf);
|
||||
ret = mtd_read(mtd, ofs, len, &retlen, buf);
|
||||
BUG_ON(ret == -EINVAL);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
|
@ -31,7 +32,8 @@ static int mtd_read(struct super_block *sb, loff_t ofs, size_t len, void *buf)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int mtd_write(struct super_block *sb, loff_t ofs, size_t len, void *buf)
|
||||
static int loffs_mtd_write(struct super_block *sb, loff_t ofs, size_t len,
|
||||
void *buf)
|
||||
{
|
||||
struct logfs_super *super = logfs_super(sb);
|
||||
struct mtd_info *mtd = super->s_mtd;
|
||||
|
|
@ -47,7 +49,7 @@ static int mtd_write(struct super_block *sb, loff_t ofs, size_t len, void *buf)
|
|||
BUG_ON(len > PAGE_CACHE_SIZE);
|
||||
page_start = ofs & PAGE_CACHE_MASK;
|
||||
page_end = PAGE_CACHE_ALIGN(ofs + len) - 1;
|
||||
ret = mtd->write(mtd, ofs, len, &retlen, buf);
|
||||
ret = mtd_write(mtd, ofs, len, &retlen, buf);
|
||||
if (ret || (retlen != len))
|
||||
return -EIO;
|
||||
|
||||
|
|
@ -60,14 +62,15 @@ static int mtd_write(struct super_block *sb, loff_t ofs, size_t len, void *buf)
|
|||
* asynchronous properties. So just to prevent the first implementor of such
|
||||
* a thing from breaking logfs in 2350, we do the usual pointless dance to
|
||||
* declare a completion variable and wait for completion before returning
|
||||
* from mtd_erase(). What an exercise in futility!
|
||||
* from logfs_mtd_erase(). What an exercise in futility!
|
||||
*/
|
||||
static void logfs_erase_callback(struct erase_info *ei)
|
||||
{
|
||||
complete((struct completion *)ei->priv);
|
||||
}
|
||||
|
||||
static int mtd_erase_mapping(struct super_block *sb, loff_t ofs, size_t len)
|
||||
static int logfs_mtd_erase_mapping(struct super_block *sb, loff_t ofs,
|
||||
size_t len)
|
||||
{
|
||||
struct logfs_super *super = logfs_super(sb);
|
||||
struct address_space *mapping = super->s_mapping_inode->i_mapping;
|
||||
|
|
@ -84,7 +87,7 @@ static int mtd_erase_mapping(struct super_block *sb, loff_t ofs, size_t len)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int mtd_erase(struct super_block *sb, loff_t ofs, size_t len,
|
||||
static int logfs_mtd_erase(struct super_block *sb, loff_t ofs, size_t len,
|
||||
int ensure_write)
|
||||
{
|
||||
struct mtd_info *mtd = logfs_super(sb)->s_mtd;
|
||||
|
|
@ -102,30 +105,29 @@ static int mtd_erase(struct super_block *sb, loff_t ofs, size_t len,
|
|||
ei.len = len;
|
||||
ei.callback = logfs_erase_callback;
|
||||
ei.priv = (long)&complete;
|
||||
ret = mtd->erase(mtd, &ei);
|
||||
ret = mtd_erase(mtd, &ei);
|
||||
if (ret)
|
||||
return -EIO;
|
||||
|
||||
wait_for_completion(&complete);
|
||||
if (ei.state != MTD_ERASE_DONE)
|
||||
return -EIO;
|
||||
return mtd_erase_mapping(sb, ofs, len);
|
||||
return logfs_mtd_erase_mapping(sb, ofs, len);
|
||||
}
|
||||
|
||||
static void mtd_sync(struct super_block *sb)
|
||||
static void logfs_mtd_sync(struct super_block *sb)
|
||||
{
|
||||
struct mtd_info *mtd = logfs_super(sb)->s_mtd;
|
||||
|
||||
if (mtd->sync)
|
||||
mtd->sync(mtd);
|
||||
mtd_sync(mtd);
|
||||
}
|
||||
|
||||
static int mtd_readpage(void *_sb, struct page *page)
|
||||
static int logfs_mtd_readpage(void *_sb, struct page *page)
|
||||
{
|
||||
struct super_block *sb = _sb;
|
||||
int err;
|
||||
|
||||
err = mtd_read(sb, page->index << PAGE_SHIFT, PAGE_SIZE,
|
||||
err = logfs_mtd_read(sb, page->index << PAGE_SHIFT, PAGE_SIZE,
|
||||
page_address(page));
|
||||
if (err == -EUCLEAN || err == -EBADMSG) {
|
||||
/* -EBADMSG happens regularly on power failures */
|
||||
|
|
@ -143,18 +145,18 @@ static int mtd_readpage(void *_sb, struct page *page)
|
|||
return err;
|
||||
}
|
||||
|
||||
static struct page *mtd_find_first_sb(struct super_block *sb, u64 *ofs)
|
||||
static struct page *logfs_mtd_find_first_sb(struct super_block *sb, u64 *ofs)
|
||||
{
|
||||
struct logfs_super *super = logfs_super(sb);
|
||||
struct address_space *mapping = super->s_mapping_inode->i_mapping;
|
||||
filler_t *filler = mtd_readpage;
|
||||
filler_t *filler = logfs_mtd_readpage;
|
||||
struct mtd_info *mtd = super->s_mtd;
|
||||
|
||||
if (!mtd->block_isbad)
|
||||
if (!mtd_can_have_bb(mtd))
|
||||
return NULL;
|
||||
|
||||
*ofs = 0;
|
||||
while (mtd->block_isbad(mtd, *ofs)) {
|
||||
while (mtd_block_isbad(mtd, *ofs)) {
|
||||
*ofs += mtd->erasesize;
|
||||
if (*ofs >= mtd->size)
|
||||
return NULL;
|
||||
|
|
@ -163,18 +165,18 @@ static struct page *mtd_find_first_sb(struct super_block *sb, u64 *ofs)
|
|||
return read_cache_page(mapping, *ofs >> PAGE_SHIFT, filler, sb);
|
||||
}
|
||||
|
||||
static struct page *mtd_find_last_sb(struct super_block *sb, u64 *ofs)
|
||||
static struct page *logfs_mtd_find_last_sb(struct super_block *sb, u64 *ofs)
|
||||
{
|
||||
struct logfs_super *super = logfs_super(sb);
|
||||
struct address_space *mapping = super->s_mapping_inode->i_mapping;
|
||||
filler_t *filler = mtd_readpage;
|
||||
filler_t *filler = logfs_mtd_readpage;
|
||||
struct mtd_info *mtd = super->s_mtd;
|
||||
|
||||
if (!mtd->block_isbad)
|
||||
if (!mtd_can_have_bb(mtd))
|
||||
return NULL;
|
||||
|
||||
*ofs = mtd->size - mtd->erasesize;
|
||||
while (mtd->block_isbad(mtd, *ofs)) {
|
||||
while (mtd_block_isbad(mtd, *ofs)) {
|
||||
*ofs -= mtd->erasesize;
|
||||
if (*ofs <= 0)
|
||||
return NULL;
|
||||
|
|
@ -184,7 +186,7 @@ static struct page *mtd_find_last_sb(struct super_block *sb, u64 *ofs)
|
|||
return read_cache_page(mapping, *ofs >> PAGE_SHIFT, filler, sb);
|
||||
}
|
||||
|
||||
static int __mtd_writeseg(struct super_block *sb, u64 ofs, pgoff_t index,
|
||||
static int __logfs_mtd_writeseg(struct super_block *sb, u64 ofs, pgoff_t index,
|
||||
size_t nr_pages)
|
||||
{
|
||||
struct logfs_super *super = logfs_super(sb);
|
||||
|
|
@ -196,8 +198,8 @@ static int __mtd_writeseg(struct super_block *sb, u64 ofs, pgoff_t index,
|
|||
page = find_lock_page(mapping, index + i);
|
||||
BUG_ON(!page);
|
||||
|
||||
err = mtd_write(sb, page->index << PAGE_SHIFT, PAGE_SIZE,
|
||||
page_address(page));
|
||||
err = loffs_mtd_write(sb, page->index << PAGE_SHIFT, PAGE_SIZE,
|
||||
page_address(page));
|
||||
unlock_page(page);
|
||||
page_cache_release(page);
|
||||
if (err)
|
||||
|
|
@ -206,7 +208,7 @@ static int __mtd_writeseg(struct super_block *sb, u64 ofs, pgoff_t index,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void mtd_writeseg(struct super_block *sb, u64 ofs, size_t len)
|
||||
static void logfs_mtd_writeseg(struct super_block *sb, u64 ofs, size_t len)
|
||||
{
|
||||
struct logfs_super *super = logfs_super(sb);
|
||||
int head;
|
||||
|
|
@ -227,15 +229,15 @@ static void mtd_writeseg(struct super_block *sb, u64 ofs, size_t len)
|
|||
len += head;
|
||||
}
|
||||
len = PAGE_ALIGN(len);
|
||||
__mtd_writeseg(sb, ofs, ofs >> PAGE_SHIFT, len >> PAGE_SHIFT);
|
||||
__logfs_mtd_writeseg(sb, ofs, ofs >> PAGE_SHIFT, len >> PAGE_SHIFT);
|
||||
}
|
||||
|
||||
static void mtd_put_device(struct logfs_super *s)
|
||||
static void logfs_mtd_put_device(struct logfs_super *s)
|
||||
{
|
||||
put_mtd_device(s->s_mtd);
|
||||
}
|
||||
|
||||
static int mtd_can_write_buf(struct super_block *sb, u64 ofs)
|
||||
static int logfs_mtd_can_write_buf(struct super_block *sb, u64 ofs)
|
||||
{
|
||||
struct logfs_super *super = logfs_super(sb);
|
||||
void *buf;
|
||||
|
|
@ -244,7 +246,7 @@ static int mtd_can_write_buf(struct super_block *sb, u64 ofs)
|
|||
buf = kmalloc(super->s_writesize, GFP_KERNEL);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
err = mtd_read(sb, ofs, super->s_writesize, buf);
|
||||
err = logfs_mtd_read(sb, ofs, super->s_writesize, buf);
|
||||
if (err)
|
||||
goto out;
|
||||
if (memchr_inv(buf, 0xff, super->s_writesize))
|
||||
|
|
@ -255,14 +257,14 @@ out:
|
|||
}
|
||||
|
||||
static const struct logfs_device_ops mtd_devops = {
|
||||
.find_first_sb = mtd_find_first_sb,
|
||||
.find_last_sb = mtd_find_last_sb,
|
||||
.readpage = mtd_readpage,
|
||||
.writeseg = mtd_writeseg,
|
||||
.erase = mtd_erase,
|
||||
.can_write_buf = mtd_can_write_buf,
|
||||
.sync = mtd_sync,
|
||||
.put_device = mtd_put_device,
|
||||
.find_first_sb = logfs_mtd_find_first_sb,
|
||||
.find_last_sb = logfs_mtd_find_last_sb,
|
||||
.readpage = logfs_mtd_readpage,
|
||||
.writeseg = logfs_mtd_writeseg,
|
||||
.erase = logfs_mtd_erase,
|
||||
.can_write_buf = logfs_mtd_can_write_buf,
|
||||
.sync = logfs_mtd_sync,
|
||||
.put_device = logfs_mtd_put_device,
|
||||
};
|
||||
|
||||
int logfs_get_sb_mtd(struct logfs_super *s, int mtdnr)
|
||||
|
|
|
|||
Loading…
Reference in a new issue