[JFFS2] Use a single config option for write buffer support
This patch replaces the current CONFIG_JFFS2_FS_NAND, CONFIG_JFFS2_FS_NOR_ECC and CONFIG_JFFS2_FS_DATAFLASH with a single configuration option - CONFIG_JFFS2_FS_WRITEBUFFER. The only functional change of this patch is that the slower div/mod calculations for SECTOR_ADDR(), PAGE_DIV() and PAGE_MOD() are now always used when CONFIG_JFFS2_FS_WRITEBUFFER is enabled. Signed-off-by: Andrew Victor <andrew@sanpeople.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
parent
8f15fd55f9
commit
2f82ce1eb6
33
fs/Kconfig
33
fs/Kconfig
@ -1063,33 +1063,18 @@ config JFFS2_FS_DEBUG
|
|||||||
If reporting bugs, please try to have available a full dump of the
|
If reporting bugs, please try to have available a full dump of the
|
||||||
messages at debug level 1 while the misbehaviour was occurring.
|
messages at debug level 1 while the misbehaviour was occurring.
|
||||||
|
|
||||||
config JFFS2_FS_NAND
|
config JFFS2_FS_WRITEBUFFER
|
||||||
bool "JFFS2 support for NAND flash"
|
bool "JFFS2 write-buffering support"
|
||||||
depends on JFFS2_FS
|
depends on JFFS2_FS
|
||||||
default n
|
default y
|
||||||
help
|
help
|
||||||
This enables the support for NAND flash in JFFS2. NAND is a newer
|
This enables the write-buffering support in JFFS2.
|
||||||
type of flash chip design than the traditional NOR flash, with
|
|
||||||
higher density but a handful of characteristics which make it more
|
|
||||||
interesting for the file system to use.
|
|
||||||
|
|
||||||
Say 'N' unless you have NAND flash.
|
This functionality is required to support JFFS2 on the following
|
||||||
|
types of flash devices:
|
||||||
config JFFS2_FS_NOR_ECC
|
- NAND flash
|
||||||
bool "JFFS2 support for ECC'd NOR flash (EXPERIMENTAL)"
|
- NOR flash with transparent ECC
|
||||||
depends on JFFS2_FS && EXPERIMENTAL
|
- DataFlash
|
||||||
default n
|
|
||||||
help
|
|
||||||
This enables the experimental support for NOR flash with transparent
|
|
||||||
ECC for JFFS2. This type of flash chip is not common, however it is
|
|
||||||
available from ST Microelectronics.
|
|
||||||
|
|
||||||
config JFFS2_FS_DATAFLASH
|
|
||||||
bool "JFFS2 support for DataFlash (EXPERIMENTAL)"
|
|
||||||
depends on JFFS2_FS && EXPERIMENTAL
|
|
||||||
default n
|
|
||||||
help
|
|
||||||
This enables the experimental support for JFFS2 on DataFlash devices.
|
|
||||||
|
|
||||||
config JFFS2_COMPRESSION_OPTIONS
|
config JFFS2_COMPRESSION_OPTIONS
|
||||||
bool "Advanced compression options for JFFS2"
|
bool "Advanced compression options for JFFS2"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# Makefile for the Linux Journalling Flash File System v2 (JFFS2)
|
# Makefile for the Linux Journalling Flash File System v2 (JFFS2)
|
||||||
#
|
#
|
||||||
# $Id: Makefile.common,v 1.8 2005/02/09 09:17:40 pavlov Exp $
|
# $Id: Makefile.common,v 1.9 2005/02/09 09:23:53 pavlov Exp $
|
||||||
#
|
#
|
||||||
|
|
||||||
obj-$(CONFIG_JFFS2_FS) += jffs2.o
|
obj-$(CONFIG_JFFS2_FS) += jffs2.o
|
||||||
@ -11,9 +11,7 @@ jffs2-y += read.o nodemgmt.o readinode.o write.o scan.o gc.o
|
|||||||
jffs2-y += symlink.o build.o erase.o background.o fs.o writev.o
|
jffs2-y += symlink.o build.o erase.o background.o fs.o writev.o
|
||||||
jffs2-y += super.o
|
jffs2-y += super.o
|
||||||
|
|
||||||
jffs2-$(CONFIG_JFFS2_FS_NAND) += wbuf.o
|
jffs2-$(CONFIG_JFFS2_FS_WRITEBUFFER) += wbuf.o
|
||||||
jffs2-$(CONFIG_JFFS2_FS_NOR_ECC) += wbuf.o
|
|
||||||
jffs2-$(CONFIG_JFFS2_FS_DATAFLASH) += wbuf.o
|
|
||||||
jffs2-$(CONFIG_JFFS2_RUBIN) += compr_rubin.o
|
jffs2-$(CONFIG_JFFS2_RUBIN) += compr_rubin.o
|
||||||
jffs2-$(CONFIG_JFFS2_RTIME) += compr_rtime.o
|
jffs2-$(CONFIG_JFFS2_RTIME) += compr_rtime.o
|
||||||
jffs2-$(CONFIG_JFFS2_ZLIB) += compr_zlib.o
|
jffs2-$(CONFIG_JFFS2_ZLIB) += compr_zlib.o
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
* For licensing information, see the file 'LICENCE' in this directory.
|
* For licensing information, see the file 'LICENCE' in this directory.
|
||||||
*
|
*
|
||||||
* $Id: fs.c,v 1.52 2005/02/09 09:17:40 pavlov Exp $
|
* $Id: fs.c,v 1.53 2005/02/09 09:23:53 pavlov Exp $
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -450,13 +450,11 @@ int jffs2_do_fill_super(struct super_block *sb, void *data, int silent)
|
|||||||
|
|
||||||
c = JFFS2_SB_INFO(sb);
|
c = JFFS2_SB_INFO(sb);
|
||||||
|
|
||||||
#ifndef CONFIG_JFFS2_FS_NAND
|
#ifndef CONFIG_JFFS2_FS_WRITEBUFFER
|
||||||
if (c->mtd->type == MTD_NANDFLASH) {
|
if (c->mtd->type == MTD_NANDFLASH) {
|
||||||
printk(KERN_ERR "jffs2: Cannot operate on NAND flash unless jffs2 NAND support is compiled in.\n");
|
printk(KERN_ERR "jffs2: Cannot operate on NAND flash unless jffs2 NAND support is compiled in.\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#ifndef CONFIG_JFFS2_FS_DATAFLASH
|
|
||||||
if (c->mtd->type == MTD_DATAFLASH) {
|
if (c->mtd->type == MTD_DATAFLASH) {
|
||||||
printk(KERN_ERR "jffs2: Cannot operate on DataFlash unless jffs2 DataFlash support is compiled in.\n");
|
printk(KERN_ERR "jffs2: Cannot operate on DataFlash unless jffs2 DataFlash support is compiled in.\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
* For licensing information, see the file 'LICENCE' in this directory.
|
* For licensing information, see the file 'LICENCE' in this directory.
|
||||||
*
|
*
|
||||||
* $Id: nodelist.h,v 1.126 2004/11/19 15:06:29 dedekind Exp $
|
* $Id: nodelist.h,v 1.127 2005/02/09 09:23:53 pavlov Exp $
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -462,7 +462,7 @@ int jffs2_do_mount_fs(struct jffs2_sb_info *c);
|
|||||||
/* erase.c */
|
/* erase.c */
|
||||||
void jffs2_erase_pending_blocks(struct jffs2_sb_info *c, int count);
|
void jffs2_erase_pending_blocks(struct jffs2_sb_info *c, int count);
|
||||||
|
|
||||||
#ifdef CONFIG_JFFS2_FS_NAND
|
#ifdef CONFIG_JFFS2_FS_WRITEBUFFER
|
||||||
/* wbuf.c */
|
/* wbuf.c */
|
||||||
int jffs2_flush_wbuf_gc(struct jffs2_sb_info *c, uint32_t ino);
|
int jffs2_flush_wbuf_gc(struct jffs2_sb_info *c, uint32_t ino);
|
||||||
int jffs2_flush_wbuf_pad(struct jffs2_sb_info *c);
|
int jffs2_flush_wbuf_pad(struct jffs2_sb_info *c);
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
* For licensing information, see the file 'LICENCE' in this directory.
|
* For licensing information, see the file 'LICENCE' in this directory.
|
||||||
*
|
*
|
||||||
* $Id: os-linux.h,v 1.53 2005/02/09 09:17:41 pavlov Exp $
|
* $Id: os-linux.h,v 1.54 2005/02/09 09:23:53 pavlov Exp $
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -97,16 +97,12 @@ static inline void jffs2_init_inode_info(struct jffs2_inode_info *f)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_JFFS2_FS_DATAFLASH
|
|
||||||
#define SECTOR_ADDR(x) ( ((unsigned long)(x) / (unsigned long)(c->sector_size)) * c->sector_size )
|
|
||||||
#else
|
|
||||||
#define SECTOR_ADDR(x) ( ((unsigned long)(x) & ~(c->sector_size-1)) )
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define jffs2_is_readonly(c) (OFNI_BS_2SFFJ(c)->s_flags & MS_RDONLY)
|
#define jffs2_is_readonly(c) (OFNI_BS_2SFFJ(c)->s_flags & MS_RDONLY)
|
||||||
#define jffs2_is_writebuffered(c) (c->wbuf != NULL)
|
#define jffs2_is_writebuffered(c) (c->wbuf != NULL)
|
||||||
|
|
||||||
#if (!defined CONFIG_JFFS2_FS_NAND && !defined CONFIG_JFFS2_FS_NOR_ECC && !defined CONFIG_JFFS2_FS_DATAFLASH)
|
#ifndef CONFIG_JFFS2_FS_WRITEBUFFER
|
||||||
|
#define SECTOR_ADDR(x) ( ((unsigned long)(x) & ~(c->sector_size-1)) )
|
||||||
#define jffs2_can_mark_obsolete(c) (1)
|
#define jffs2_can_mark_obsolete(c) (1)
|
||||||
#define jffs2_cleanmarker_oob(c) (0)
|
#define jffs2_cleanmarker_oob(c) (0)
|
||||||
#define jffs2_write_nand_cleanmarker(c,jeb) (-EIO)
|
#define jffs2_write_nand_cleanmarker(c,jeb) (-EIO)
|
||||||
@ -129,6 +125,7 @@ static inline void jffs2_init_inode_info(struct jffs2_inode_info *f)
|
|||||||
|
|
||||||
#else /* NAND and/or ECC'd NOR support present */
|
#else /* NAND and/or ECC'd NOR support present */
|
||||||
|
|
||||||
|
#define SECTOR_ADDR(x) ( ((unsigned long)(x) / (unsigned long)(c->sector_size)) * c->sector_size )
|
||||||
#define jffs2_can_mark_obsolete(c) ((c->mtd->type == MTD_NORFLASH && !(c->mtd->flags & MTD_ECC)) || c->mtd->type == MTD_RAM)
|
#define jffs2_can_mark_obsolete(c) ((c->mtd->type == MTD_NORFLASH && !(c->mtd->flags & MTD_ECC)) || c->mtd->type == MTD_RAM)
|
||||||
#define jffs2_cleanmarker_oob(c) (c->mtd->type == MTD_NANDFLASH)
|
#define jffs2_cleanmarker_oob(c) (c->mtd->type == MTD_NANDFLASH)
|
||||||
|
|
||||||
@ -150,25 +147,16 @@ int jffs2_flush_wbuf_gc(struct jffs2_sb_info *c, uint32_t ino);
|
|||||||
int jffs2_flush_wbuf_pad(struct jffs2_sb_info *c);
|
int jffs2_flush_wbuf_pad(struct jffs2_sb_info *c);
|
||||||
int jffs2_nand_flash_setup(struct jffs2_sb_info *c);
|
int jffs2_nand_flash_setup(struct jffs2_sb_info *c);
|
||||||
void jffs2_nand_flash_cleanup(struct jffs2_sb_info *c);
|
void jffs2_nand_flash_cleanup(struct jffs2_sb_info *c);
|
||||||
#ifdef CONFIG_JFFS2_FS_NOR_ECC
|
|
||||||
#define jffs2_nor_ecc(c) (c->mtd->type == MTD_NORFLASH && (c->mtd->flags & MTD_ECC))
|
#define jffs2_nor_ecc(c) (c->mtd->type == MTD_NORFLASH && (c->mtd->flags & MTD_ECC))
|
||||||
int jffs2_nor_ecc_flash_setup(struct jffs2_sb_info *c);
|
int jffs2_nor_ecc_flash_setup(struct jffs2_sb_info *c);
|
||||||
void jffs2_nor_ecc_flash_cleanup(struct jffs2_sb_info *c);
|
void jffs2_nor_ecc_flash_cleanup(struct jffs2_sb_info *c);
|
||||||
#else
|
|
||||||
#define jffs2_nor_ecc(c) (0)
|
|
||||||
#define jffs2_nor_ecc_flash_setup(c) (0)
|
|
||||||
#define jffs2_nor_ecc_flash_cleanup(c) do {} while (0)
|
|
||||||
#endif /* NOR ECC */
|
|
||||||
#ifdef CONFIG_JFFS2_FS_DATAFLASH
|
|
||||||
#define jffs2_dataflash(c) (c->mtd->type == MTD_DATAFLASH)
|
#define jffs2_dataflash(c) (c->mtd->type == MTD_DATAFLASH)
|
||||||
int jffs2_dataflash_setup(struct jffs2_sb_info *c);
|
int jffs2_dataflash_setup(struct jffs2_sb_info *c);
|
||||||
void jffs2_dataflash_cleanup(struct jffs2_sb_info *c);
|
void jffs2_dataflash_cleanup(struct jffs2_sb_info *c);
|
||||||
#else
|
|
||||||
#define jffs2_dataflash(c) (0)
|
#endif /* WRITEBUFFER */
|
||||||
#define jffs2_dataflash_setup(c) (0)
|
|
||||||
#define jffs2_dataflash_cleanup(c) do {} while (0)
|
|
||||||
#endif /* DATAFLASH */
|
|
||||||
#endif /* NAND */
|
|
||||||
|
|
||||||
/* erase.c */
|
/* erase.c */
|
||||||
static inline void jffs2_erase_pending_trigger(struct jffs2_sb_info *c)
|
static inline void jffs2_erase_pending_trigger(struct jffs2_sb_info *c)
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
* For licensing information, see the file 'LICENCE' in this directory.
|
* For licensing information, see the file 'LICENCE' in this directory.
|
||||||
*
|
*
|
||||||
* $Id: scan.c,v 1.117 2005/02/09 09:17:41 pavlov Exp $
|
* $Id: scan.c,v 1.118 2005/02/09 09:23:53 pavlov Exp $
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
@ -68,7 +68,7 @@ static int jffs2_scan_dirent_node(struct jffs2_sb_info *c, struct jffs2_eraseblo
|
|||||||
static inline int min_free(struct jffs2_sb_info *c)
|
static inline int min_free(struct jffs2_sb_info *c)
|
||||||
{
|
{
|
||||||
uint32_t min = 2 * sizeof(struct jffs2_raw_inode);
|
uint32_t min = 2 * sizeof(struct jffs2_raw_inode);
|
||||||
#if defined CONFIG_JFFS2_FS_NAND || defined CONFIG_JFFS2_FS_NOR_ECC || defined CONFIG_JFFS2_FS_DATAFLASH
|
#ifdef CONFIG_JFFS2_FS_WRITEBUFFER
|
||||||
if (!jffs2_can_mark_obsolete(c) && min < c->wbuf_pagesize)
|
if (!jffs2_can_mark_obsolete(c) && min < c->wbuf_pagesize)
|
||||||
return c->wbuf_pagesize;
|
return c->wbuf_pagesize;
|
||||||
#endif
|
#endif
|
||||||
@ -228,7 +228,7 @@ int jffs2_scan_medium(struct jffs2_sb_info *c)
|
|||||||
c->dirty_size -= c->nextblock->dirty_size;
|
c->dirty_size -= c->nextblock->dirty_size;
|
||||||
c->nextblock->dirty_size = 0;
|
c->nextblock->dirty_size = 0;
|
||||||
}
|
}
|
||||||
#if defined CONFIG_JFFS2_FS_NAND || defined CONFIG_JFFS2_FS_NOR_ECC || defined CONFIG_JFFS2_FS_DATAFLASH
|
#ifdef CONFIG_JFFS2_FS_WRITEBUFFER
|
||||||
if (!jffs2_can_mark_obsolete(c) && c->nextblock && (c->nextblock->free_size & (c->wbuf_pagesize-1))) {
|
if (!jffs2_can_mark_obsolete(c) && c->nextblock && (c->nextblock->free_size & (c->wbuf_pagesize-1))) {
|
||||||
/* If we're going to start writing into a block which already
|
/* If we're going to start writing into a block which already
|
||||||
contains data, and the end of the data isn't page-aligned,
|
contains data, and the end of the data isn't page-aligned,
|
||||||
@ -294,7 +294,7 @@ static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblo
|
|||||||
uint32_t hdr_crc, buf_ofs, buf_len;
|
uint32_t hdr_crc, buf_ofs, buf_len;
|
||||||
int err;
|
int err;
|
||||||
int noise = 0;
|
int noise = 0;
|
||||||
#ifdef CONFIG_JFFS2_FS_NAND
|
#ifdef CONFIG_JFFS2_FS_WRITEBUFFER
|
||||||
int cleanmarkerfound = 0;
|
int cleanmarkerfound = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -303,7 +303,7 @@ static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblo
|
|||||||
|
|
||||||
D1(printk(KERN_DEBUG "jffs2_scan_eraseblock(): Scanning block at 0x%x\n", ofs));
|
D1(printk(KERN_DEBUG "jffs2_scan_eraseblock(): Scanning block at 0x%x\n", ofs));
|
||||||
|
|
||||||
#ifdef CONFIG_JFFS2_FS_NAND
|
#ifdef CONFIG_JFFS2_FS_WRITEBUFFER
|
||||||
if (jffs2_cleanmarker_oob(c)) {
|
if (jffs2_cleanmarker_oob(c)) {
|
||||||
int ret = jffs2_check_nand_cleanmarker(c, jeb);
|
int ret = jffs2_check_nand_cleanmarker(c, jeb);
|
||||||
D2(printk(KERN_NOTICE "jffs_check_nand_cleanmarker returned %d\n",ret));
|
D2(printk(KERN_NOTICE "jffs_check_nand_cleanmarker returned %d\n",ret));
|
||||||
@ -338,7 +338,7 @@ static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblo
|
|||||||
ofs += 4;
|
ofs += 4;
|
||||||
|
|
||||||
if (ofs == EMPTY_SCAN_SIZE(c->sector_size)) {
|
if (ofs == EMPTY_SCAN_SIZE(c->sector_size)) {
|
||||||
#ifdef CONFIG_JFFS2_FS_NAND
|
#ifdef CONFIG_JFFS2_FS_WRITEBUFFER
|
||||||
if (jffs2_cleanmarker_oob(c)) {
|
if (jffs2_cleanmarker_oob(c)) {
|
||||||
/* scan oob, take care of cleanmarker */
|
/* scan oob, take care of cleanmarker */
|
||||||
int ret = jffs2_check_oob_empty(c, jeb, cleanmarkerfound);
|
int ret = jffs2_check_oob_empty(c, jeb, cleanmarkerfound);
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
* For licensing information, see the file 'LICENCE' in this directory.
|
* For licensing information, see the file 'LICENCE' in this directory.
|
||||||
*
|
*
|
||||||
* $Id: super.c,v 1.104 2004/11/23 15:37:31 gleixner Exp $
|
* $Id: super.c,v 1.105 2005/02/09 09:23:54 pavlov Exp $
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -309,7 +309,7 @@ static int __init init_jffs2_fs(void)
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
printk(KERN_INFO "JFFS2 version 2.2."
|
printk(KERN_INFO "JFFS2 version 2.2."
|
||||||
#ifdef CONFIG_JFFS2_FS_NAND
|
#ifdef CONFIG_JFFS2_FS_WRITEBUFFER
|
||||||
" (NAND)"
|
" (NAND)"
|
||||||
#endif
|
#endif
|
||||||
" (C) 2001-2003 Red Hat, Inc.\n");
|
" (C) 2001-2003 Red Hat, Inc.\n");
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
*
|
*
|
||||||
* For licensing information, see the file 'LICENCE' in this directory.
|
* For licensing information, see the file 'LICENCE' in this directory.
|
||||||
*
|
*
|
||||||
* $Id: wbuf.c,v 1.88 2005/02/09 09:17:41 pavlov Exp $
|
* $Id: wbuf.c,v 1.89 2005/02/09 09:23:54 pavlov Exp $
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -604,7 +604,7 @@ int jffs2_flush_wbuf_pad(struct jffs2_sb_info *c)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_JFFS2_FS_DATAFLASH
|
#ifdef CONFIG_JFFS2_FS_WRITEBUFFER
|
||||||
#define PAGE_DIV(x) ( ((unsigned long)(x) / (unsigned long)(c->wbuf_pagesize)) * (unsigned long)(c->wbuf_pagesize) )
|
#define PAGE_DIV(x) ( ((unsigned long)(x) / (unsigned long)(c->wbuf_pagesize)) * (unsigned long)(c->wbuf_pagesize) )
|
||||||
#define PAGE_MOD(x) ( (unsigned long)(x) % (unsigned long)(c->wbuf_pagesize) )
|
#define PAGE_MOD(x) ( (unsigned long)(x) % (unsigned long)(c->wbuf_pagesize) )
|
||||||
#else
|
#else
|
||||||
@ -1198,7 +1198,6 @@ void jffs2_nand_flash_cleanup(struct jffs2_sb_info *c)
|
|||||||
kfree(c->wbuf);
|
kfree(c->wbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_JFFS2_FS_DATAFLASH
|
|
||||||
int jffs2_dataflash_setup(struct jffs2_sb_info *c) {
|
int jffs2_dataflash_setup(struct jffs2_sb_info *c) {
|
||||||
c->cleanmarker_size = 0; /* No cleanmarkers needed */
|
c->cleanmarker_size = 0; /* No cleanmarkers needed */
|
||||||
|
|
||||||
@ -1219,9 +1218,7 @@ int jffs2_dataflash_setup(struct jffs2_sb_info *c) {
|
|||||||
void jffs2_dataflash_cleanup(struct jffs2_sb_info *c) {
|
void jffs2_dataflash_cleanup(struct jffs2_sb_info *c) {
|
||||||
kfree(c->wbuf);
|
kfree(c->wbuf);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_JFFS2_FS_NOR_ECC
|
|
||||||
int jffs2_nor_ecc_flash_setup(struct jffs2_sb_info *c) {
|
int jffs2_nor_ecc_flash_setup(struct jffs2_sb_info *c) {
|
||||||
/* Cleanmarker is actually larger on the flashes */
|
/* Cleanmarker is actually larger on the flashes */
|
||||||
c->cleanmarker_size = 16;
|
c->cleanmarker_size = 16;
|
||||||
@ -1241,4 +1238,3 @@ int jffs2_nor_ecc_flash_setup(struct jffs2_sb_info *c) {
|
|||||||
void jffs2_nor_ecc_flash_cleanup(struct jffs2_sb_info *c) {
|
void jffs2_nor_ecc_flash_cleanup(struct jffs2_sb_info *c) {
|
||||||
kfree(c->wbuf);
|
kfree(c->wbuf);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Id: jffs2_fs_sb.h,v 1.49 2005/02/09 09:17:41 pavlov Exp $ */
|
/* $Id: jffs2_fs_sb.h,v 1.50 2005/02/09 09:23:55 pavlov Exp $ */
|
||||||
|
|
||||||
#ifndef _JFFS2_FS_SB
|
#ifndef _JFFS2_FS_SB
|
||||||
#define _JFFS2_FS_SB
|
#define _JFFS2_FS_SB
|
||||||
@ -94,7 +94,7 @@ struct jffs2_sb_info {
|
|||||||
to an obsoleted node. I don't like this. Alternatives welcomed. */
|
to an obsoleted node. I don't like this. Alternatives welcomed. */
|
||||||
struct semaphore erase_free_sem;
|
struct semaphore erase_free_sem;
|
||||||
|
|
||||||
#if defined CONFIG_JFFS2_FS_NAND || defined CONFIG_JFFS2_FS_NOR_ECC || defined CONFIG_JFFS2_FS_DATAFLASH
|
#ifdef CONFIG_JFFS2_FS_WRITEBUFFER
|
||||||
/* Write-behind buffer for NAND flash */
|
/* Write-behind buffer for NAND flash */
|
||||||
unsigned char *wbuf;
|
unsigned char *wbuf;
|
||||||
uint32_t wbuf_ofs;
|
uint32_t wbuf_ofs;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user