diff options
| -rw-r--r-- | fs/jffs2/fs.c | 12 | ||||
| -rw-r--r-- | fs/jffs2/os-linux.h | 6 | ||||
| -rw-r--r-- | fs/jffs2/wbuf.c | 24 |
3 files changed, 42 insertions, 0 deletions
diff --git a/fs/jffs2/fs.c b/fs/jffs2/fs.c index abb90c0c09cc..8a649f602767 100644 --- a/fs/jffs2/fs.c +++ b/fs/jffs2/fs.c | |||
| @@ -672,6 +672,13 @@ static int jffs2_flash_setup(struct jffs2_sb_info *c) { | |||
| 672 | return ret; | 672 | return ret; |
| 673 | } | 673 | } |
| 674 | 674 | ||
| 675 | /* and an UBI volume */ | ||
| 676 | if (jffs2_ubivol(c)) { | ||
| 677 | ret = jffs2_ubivol_setup(c); | ||
| 678 | if (ret) | ||
| 679 | return ret; | ||
| 680 | } | ||
| 681 | |||
| 675 | return ret; | 682 | return ret; |
| 676 | } | 683 | } |
| 677 | 684 | ||
| @@ -690,4 +697,9 @@ void jffs2_flash_cleanup(struct jffs2_sb_info *c) { | |||
| 690 | if (jffs2_nor_wbuf_flash(c)) { | 697 | if (jffs2_nor_wbuf_flash(c)) { |
| 691 | jffs2_nor_wbuf_flash_cleanup(c); | 698 | jffs2_nor_wbuf_flash_cleanup(c); |
| 692 | } | 699 | } |
| 700 | |||
| 701 | /* and an UBI volume */ | ||
| 702 | if (jffs2_ubivol(c)) { | ||
| 703 | jffs2_ubivol_cleanup(c); | ||
| 704 | } | ||
| 693 | } | 705 | } |
diff --git a/fs/jffs2/os-linux.h b/fs/jffs2/os-linux.h index e07a0edcdb4f..8d92e45168ca 100644 --- a/fs/jffs2/os-linux.h +++ b/fs/jffs2/os-linux.h | |||
| @@ -98,6 +98,9 @@ static inline void jffs2_init_inode_info(struct jffs2_inode_info *f) | |||
| 98 | #define jffs2_nor_wbuf_flash(c) (0) | 98 | #define jffs2_nor_wbuf_flash(c) (0) |
| 99 | #define jffs2_nor_wbuf_flash_setup(c) (0) | 99 | #define jffs2_nor_wbuf_flash_setup(c) (0) |
| 100 | #define jffs2_nor_wbuf_flash_cleanup(c) do {} while (0) | 100 | #define jffs2_nor_wbuf_flash_cleanup(c) do {} while (0) |
| 101 | #define jffs2_ubivol(c) (0) | ||
| 102 | #define jffs2_ubivol_setup(c) (0) | ||
| 103 | #define jffs2_ubivol_cleanup(c) do {} while (0) | ||
| 101 | 104 | ||
| 102 | #else /* NAND and/or ECC'd NOR support present */ | 105 | #else /* NAND and/or ECC'd NOR support present */ |
| 103 | 106 | ||
| @@ -133,6 +136,9 @@ void jffs2_nand_flash_cleanup(struct jffs2_sb_info *c); | |||
| 133 | #define jffs2_dataflash(c) (c->mtd->type == MTD_DATAFLASH) | 136 | #define jffs2_dataflash(c) (c->mtd->type == MTD_DATAFLASH) |
| 134 | int jffs2_dataflash_setup(struct jffs2_sb_info *c); | 137 | int jffs2_dataflash_setup(struct jffs2_sb_info *c); |
| 135 | void jffs2_dataflash_cleanup(struct jffs2_sb_info *c); | 138 | void jffs2_dataflash_cleanup(struct jffs2_sb_info *c); |
| 139 | #define jffs2_ubivol(c) (c->mtd->type == MTD_UBIVOLUME) | ||
| 140 | int jffs2_ubivol_setup(struct jffs2_sb_info *c); | ||
| 141 | void jffs2_ubivol_cleanup(struct jffs2_sb_info *c); | ||
| 136 | 142 | ||
| 137 | #define jffs2_nor_wbuf_flash(c) (c->mtd->type == MTD_NORFLASH && ! (c->mtd->flags & MTD_BIT_WRITEABLE)) | 143 | #define jffs2_nor_wbuf_flash(c) (c->mtd->type == MTD_NORFLASH && ! (c->mtd->flags & MTD_BIT_WRITEABLE)) |
| 138 | int jffs2_nor_wbuf_flash_setup(struct jffs2_sb_info *c); | 144 | int jffs2_nor_wbuf_flash_setup(struct jffs2_sb_info *c); |
diff --git a/fs/jffs2/wbuf.c b/fs/jffs2/wbuf.c index 4fac6dd53954..ab86031b3c07 100644 --- a/fs/jffs2/wbuf.c +++ b/fs/jffs2/wbuf.c | |||
| @@ -1208,3 +1208,27 @@ int jffs2_nor_wbuf_flash_setup(struct jffs2_sb_info *c) { | |||
| 1208 | void jffs2_nor_wbuf_flash_cleanup(struct jffs2_sb_info *c) { | 1208 | void jffs2_nor_wbuf_flash_cleanup(struct jffs2_sb_info *c) { |
| 1209 | kfree(c->wbuf); | 1209 | kfree(c->wbuf); |
| 1210 | } | 1210 | } |
| 1211 | |||
| 1212 | int jffs2_ubivol_setup(struct jffs2_sb_info *c) { | ||
| 1213 | c->cleanmarker_size = 0; | ||
| 1214 | |||
| 1215 | if (c->mtd->writesize == 1) | ||
| 1216 | /* We do not need write-buffer */ | ||
| 1217 | return 0; | ||
| 1218 | |||
| 1219 | init_rwsem(&c->wbuf_sem); | ||
| 1220 | |||
| 1221 | c->wbuf_pagesize = c->mtd->writesize; | ||
| 1222 | c->wbuf_ofs = 0xFFFFFFFF; | ||
| 1223 | c->wbuf = kmalloc(c->wbuf_pagesize, GFP_KERNEL); | ||
| 1224 | if (!c->wbuf) | ||
| 1225 | return -ENOMEM; | ||
| 1226 | |||
| 1227 | printk(KERN_INFO "JFFS2 write-buffering enabled buffer (%d) erasesize (%d)\n", c->wbuf_pagesize, c->sector_size); | ||
| 1228 | |||
| 1229 | return 0; | ||
| 1230 | } | ||
| 1231 | |||
| 1232 | void jffs2_ubivol_cleanup(struct jffs2_sb_info *c) { | ||
| 1233 | kfree(c->wbuf); | ||
| 1234 | } | ||
