Commit 182ec4ee authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Thomas Gleixner

[JFFS2] Clean up trailing white spaces

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 97894cda
...@@ -1084,10 +1084,10 @@ config JFFS2_ZLIB ...@@ -1084,10 +1084,10 @@ config JFFS2_ZLIB
default y default y
help help
Zlib is designed to be a free, general-purpose, legally unencumbered, Zlib is designed to be a free, general-purpose, legally unencumbered,
lossless data-compression library for use on virtually any computer lossless data-compression library for use on virtually any computer
hardware and operating system. See <http://www.gzip.org/zlib/> for hardware and operating system. See <http://www.gzip.org/zlib/> for
further information. further information.
Say 'Y' if unsure. Say 'Y' if unsure.
config JFFS2_RTIME config JFFS2_RTIME
...@@ -1109,7 +1109,7 @@ choice ...@@ -1109,7 +1109,7 @@ choice
default JFFS2_CMODE_PRIORITY default JFFS2_CMODE_PRIORITY
depends on JFFS2_FS depends on JFFS2_FS
help help
You can set here the default compression mode of JFFS2 from You can set here the default compression mode of JFFS2 from
the available compression modes. Don't touch if unsure. the available compression modes. Don't touch if unsure.
config JFFS2_CMODE_NONE config JFFS2_CMODE_NONE
...@@ -1120,13 +1120,13 @@ config JFFS2_CMODE_NONE ...@@ -1120,13 +1120,13 @@ config JFFS2_CMODE_NONE
config JFFS2_CMODE_PRIORITY config JFFS2_CMODE_PRIORITY
bool "priority" bool "priority"
help help
Tries the compressors in a predefinied order and chooses the first Tries the compressors in a predefinied order and chooses the first
successful one. successful one.
config JFFS2_CMODE_SIZE config JFFS2_CMODE_SIZE
bool "size (EXPERIMENTAL)" bool "size (EXPERIMENTAL)"
help help
Tries all compressors and chooses the one which has the smallest Tries all compressors and chooses the one which has the smallest
result. result.
endchoice endchoice
......
...@@ -51,7 +51,7 @@ int jffs2_start_garbage_collect_thread(struct jffs2_sb_info *c) ...@@ -51,7 +51,7 @@ int jffs2_start_garbage_collect_thread(struct jffs2_sb_info *c)
D1(printk(KERN_DEBUG "JFFS2: Garbage collect thread is pid %d\n", pid)); D1(printk(KERN_DEBUG "JFFS2: Garbage collect thread is pid %d\n", pid));
wait_for_completion(&c->gc_thread_start); wait_for_completion(&c->gc_thread_start);
} }
return ret; return ret;
} }
...@@ -101,7 +101,7 @@ static int jffs2_garbage_collect_thread(void *_c) ...@@ -101,7 +101,7 @@ static int jffs2_garbage_collect_thread(void *_c)
cond_resched(); cond_resched();
/* Put_super will send a SIGKILL and then wait on the sem. /* Put_super will send a SIGKILL and then wait on the sem.
*/ */
while (signal_pending(current)) { while (signal_pending(current)) {
siginfo_t info; siginfo_t info;
......
...@@ -7,7 +7,7 @@ ...@@ -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: build.c,v 1.84 2005/09/27 13:40:49 dedekind Exp $ * $Id: build.c,v 1.85 2005/11/07 11:14:38 gleixner Exp $
* *
*/ */
...@@ -129,10 +129,10 @@ static int jffs2_build_filesystem(struct jffs2_sb_info *c) ...@@ -129,10 +129,10 @@ static int jffs2_build_filesystem(struct jffs2_sb_info *c)
for_each_inode(i, c, ic) { for_each_inode(i, c, ic) {
if (ic->nlink) if (ic->nlink)
continue; continue;
jffs2_build_remove_unlinked_inode(c, ic, &dead_fds); jffs2_build_remove_unlinked_inode(c, ic, &dead_fds);
cond_resched(); cond_resched();
} }
dbg_fsbuild("pass 2a starting\n"); dbg_fsbuild("pass 2a starting\n");
...@@ -149,7 +149,7 @@ static int jffs2_build_filesystem(struct jffs2_sb_info *c) ...@@ -149,7 +149,7 @@ static int jffs2_build_filesystem(struct jffs2_sb_info *c)
dbg_fsbuild("pass 2a complete\n"); dbg_fsbuild("pass 2a complete\n");
dbg_fsbuild("freeing temporary data structures\n"); dbg_fsbuild("freeing temporary data structures\n");
/* Finally, we can scan again and free the dirent structs */ /* Finally, we can scan again and free the dirent structs */
for_each_inode(i, c, ic) { for_each_inode(i, c, ic) {
while(ic->scan_dents) { while(ic->scan_dents) {
...@@ -161,7 +161,7 @@ static int jffs2_build_filesystem(struct jffs2_sb_info *c) ...@@ -161,7 +161,7 @@ static int jffs2_build_filesystem(struct jffs2_sb_info *c)
cond_resched(); cond_resched();
} }
c->flags &= ~JFFS2_SB_FLAG_BUILDING; c->flags &= ~JFFS2_SB_FLAG_BUILDING;
dbg_fsbuild("FS build complete\n"); dbg_fsbuild("FS build complete\n");
/* Rotate the lists by some number to ensure wear levelling */ /* Rotate the lists by some number to ensure wear levelling */
...@@ -191,7 +191,7 @@ static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *c, ...@@ -191,7 +191,7 @@ static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *c,
struct jffs2_full_dirent *fd; struct jffs2_full_dirent *fd;
dbg_fsbuild("removing ino #%u with nlink == zero.\n", ic->ino); dbg_fsbuild("removing ino #%u with nlink == zero.\n", ic->ino);
raw = ic->nodes; raw = ic->nodes;
while (raw != (void *)ic) { while (raw != (void *)ic) {
struct jffs2_raw_node_ref *next = raw->next_in_ino; struct jffs2_raw_node_ref *next = raw->next_in_ino;
...@@ -220,7 +220,7 @@ static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *c, ...@@ -220,7 +220,7 @@ static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *c,
whinged = 1; whinged = 1;
dbg_fsbuild("removing child \"%s\", ino #%u\n", fd->name, fd->ino); dbg_fsbuild("removing child \"%s\", ino #%u\n", fd->name, fd->ino);
child_ic = jffs2_get_ino_cache(c, fd->ino); child_ic = jffs2_get_ino_cache(c, fd->ino);
if (!child_ic) { if (!child_ic) {
dbg_fsbuild("cannot remove child \"%s\", ino #%u, because it doesn't exist\n", dbg_fsbuild("cannot remove child \"%s\", ino #%u, because it doesn't exist\n",
...@@ -229,11 +229,11 @@ static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *c, ...@@ -229,11 +229,11 @@ static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *c,
continue; continue;
} }
/* Reduce nlink of the child. If it's now zero, stick it on the /* Reduce nlink of the child. If it's now zero, stick it on the
dead_fds list to be cleaned up later. Else just free the fd */ dead_fds list to be cleaned up later. Else just free the fd */
child_ic->nlink--; child_ic->nlink--;
if (!child_ic->nlink) { if (!child_ic->nlink) {
dbg_fsbuild("inode #%u (\"%s\") has now got zero nlink, adding to dead_fds list.\n", dbg_fsbuild("inode #%u (\"%s\") has now got zero nlink, adding to dead_fds list.\n",
fd->ino, fd->name); fd->ino, fd->name);
...@@ -248,7 +248,7 @@ static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *c, ...@@ -248,7 +248,7 @@ static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *c,
} }
/* /*
We don't delete the inocache from the hash list and free it yet. We don't delete the inocache from the hash list and free it yet.
The erase code will do that, when all the nodes are completely gone. The erase code will do that, when all the nodes are completely gone.
*/ */
} }
...@@ -262,7 +262,7 @@ static void jffs2_calc_trigger_levels(struct jffs2_sb_info *c) ...@@ -262,7 +262,7 @@ static void jffs2_calc_trigger_levels(struct jffs2_sb_info *c)
because there's not enough free space... */ because there's not enough free space... */
c->resv_blocks_deletion = 2; c->resv_blocks_deletion = 2;
/* Be conservative about how much space we need before we allow writes. /* Be conservative about how much space we need before we allow writes.
On top of that which is required for deletia, require an extra 2% On top of that which is required for deletia, require an extra 2%
of the medium to be available, for overhead caused by nodes being of the medium to be available, for overhead caused by nodes being
split across blocks, etc. */ split across blocks, etc. */
...@@ -277,7 +277,7 @@ static void jffs2_calc_trigger_levels(struct jffs2_sb_info *c) ...@@ -277,7 +277,7 @@ static void jffs2_calc_trigger_levels(struct jffs2_sb_info *c)
c->resv_blocks_gctrigger = c->resv_blocks_write + 1; c->resv_blocks_gctrigger = c->resv_blocks_write + 1;
/* When do we allow garbage collection to merge nodes to make /* When do we allow garbage collection to merge nodes to make
long-term progress at the expense of short-term space exhaustion? */ long-term progress at the expense of short-term space exhaustion? */
c->resv_blocks_gcmerge = c->resv_blocks_deletion + 1; c->resv_blocks_gcmerge = c->resv_blocks_deletion + 1;
...@@ -303,7 +303,7 @@ static void jffs2_calc_trigger_levels(struct jffs2_sb_info *c) ...@@ -303,7 +303,7 @@ static void jffs2_calc_trigger_levels(struct jffs2_sb_info *c)
c->resv_blocks_gcbad, c->resv_blocks_gcbad*c->sector_size/1024); c->resv_blocks_gcbad, c->resv_blocks_gcbad*c->sector_size/1024);
dbg_fsbuild("Amount of dirty space required to GC: %d bytes\n", dbg_fsbuild("Amount of dirty space required to GC: %d bytes\n",
c->nospc_dirty_size); c->nospc_dirty_size);
} }
int jffs2_do_mount_fs(struct jffs2_sb_info *c) int jffs2_do_mount_fs(struct jffs2_sb_info *c)
{ {
...@@ -355,7 +355,7 @@ int jffs2_do_mount_fs(struct jffs2_sb_info *c) ...@@ -355,7 +355,7 @@ int jffs2_do_mount_fs(struct jffs2_sb_info *c)
#ifndef __ECOS #ifndef __ECOS
if (jffs2_blocks_use_vmalloc(c)) if (jffs2_blocks_use_vmalloc(c))
vfree(c->blocks); vfree(c->blocks);
else else
#endif #endif
kfree(c->blocks); kfree(c->blocks);
......
...@@ -9,7 +9,7 @@ ...@@ -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: compr.c,v 1.45 2005/07/26 13:24:40 havasi Exp $ * $Id: compr.c,v 1.46 2005/11/07 11:14:38 gleixner Exp $
* *
*/ */
...@@ -36,16 +36,16 @@ static uint32_t none_stat_compr_blocks=0,none_stat_decompr_blocks=0,none_stat_co ...@@ -36,16 +36,16 @@ static uint32_t none_stat_compr_blocks=0,none_stat_decompr_blocks=0,none_stat_co
* data. * data.
* *
* Returns: Lower byte to be stored with data indicating compression type used. * Returns: Lower byte to be stored with data indicating compression type used.
* Zero is used to show that the data could not be compressed - the * Zero is used to show that the data could not be compressed - the
* compressed version was actually larger than the original. * compressed version was actually larger than the original.
* Upper byte will be used later. (soon) * Upper byte will be used later. (soon)
* *
* If the cdata buffer isn't large enough to hold all the uncompressed data, * If the cdata buffer isn't large enough to hold all the uncompressed data,
* jffs2_compress should compress as much as will fit, and should set * jffs2_compress should compress as much as will fit, and should set
* *datalen accordingly to show the amount of data which were compressed. * *datalen accordingly to show the amount of data which were compressed.
*/ */
uint16_t jffs2_compress(struct jffs2_sb_info *c, struct jffs2_inode_info *f, uint16_t jffs2_compress(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
unsigned char *data_in, unsigned char **cpage_out, unsigned char *data_in, unsigned char **cpage_out,
uint32_t *datalen, uint32_t *cdatalen) uint32_t *datalen, uint32_t *cdatalen)
{ {
int ret = JFFS2_COMPR_NONE; int ret = JFFS2_COMPR_NONE;
...@@ -164,7 +164,7 @@ uint16_t jffs2_compress(struct jffs2_sb_info *c, struct jffs2_inode_info *f, ...@@ -164,7 +164,7 @@ uint16_t jffs2_compress(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
} }
int jffs2_decompress(struct jffs2_sb_info *c, struct jffs2_inode_info *f, int jffs2_decompress(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
uint16_t comprtype, unsigned char *cdata_in, uint16_t comprtype, unsigned char *cdata_in,
unsigned char *data_out, uint32_t cdatalen, uint32_t datalen) unsigned char *data_out, uint32_t cdatalen, uint32_t datalen)
{ {
struct jffs2_compressor *this; struct jffs2_compressor *this;
...@@ -298,7 +298,7 @@ char *jffs2_stats(void) ...@@ -298,7 +298,7 @@ char *jffs2_stats(void)
act_buf += sprintf(act_buf,"JFFS2 compressor statistics:\n"); act_buf += sprintf(act_buf,"JFFS2 compressor statistics:\n");
act_buf += sprintf(act_buf,"%10s ","none"); act_buf += sprintf(act_buf,"%10s ","none");
act_buf += sprintf(act_buf,"compr: %d blocks (%d) decompr: %d blocks\n", none_stat_compr_blocks, act_buf += sprintf(act_buf,"compr: %d blocks (%d) decompr: %d blocks\n", none_stat_compr_blocks,
none_stat_compr_size, none_stat_decompr_blocks); none_stat_compr_size, none_stat_decompr_blocks);
spin_lock(&jffs2_compressor_list_lock); spin_lock(&jffs2_compressor_list_lock);
list_for_each_entry(this, &jffs2_compressor_list, list) { list_for_each_entry(this, &jffs2_compressor_list, list) {
...@@ -307,8 +307,8 @@ char *jffs2_stats(void) ...@@ -307,8 +307,8 @@ char *jffs2_stats(void)
act_buf += sprintf(act_buf,"- "); act_buf += sprintf(act_buf,"- ");
else else
act_buf += sprintf(act_buf,"+ "); act_buf += sprintf(act_buf,"+ ");
act_buf += sprintf(act_buf,"compr: %d blocks (%d/%d) decompr: %d blocks ", this->stat_compr_blocks, act_buf += sprintf(act_buf,"compr: %d blocks (%d/%d) decompr: %d blocks ", this->stat_compr_blocks,
this->stat_compr_new_size, this->stat_compr_orig_size, this->stat_compr_new_size, this->stat_compr_orig_size,
this->stat_decompr_blocks); this->stat_decompr_blocks);
act_buf += sprintf(act_buf,"\n"); act_buf += sprintf(act_buf,"\n");
} }
...@@ -317,7 +317,7 @@ char *jffs2_stats(void) ...@@ -317,7 +317,7 @@ char *jffs2_stats(void)
return buf; return buf;
} }
char *jffs2_get_compression_mode_name(void) char *jffs2_get_compression_mode_name(void)
{ {
switch (jffs2_compression_mode) { switch (jffs2_compression_mode) {
case JFFS2_COMPR_MODE_NONE: case JFFS2_COMPR_MODE_NONE:
...@@ -330,7 +330,7 @@ char *jffs2_get_compression_mode_name(void) ...@@ -330,7 +330,7 @@ char *jffs2_get_compression_mode_name(void)
return "unkown"; return "unkown";
} }
int jffs2_set_compression_mode_name(const char *name) int jffs2_set_compression_mode_name(const char *name)
{ {
if (!strcmp("none",name)) { if (!strcmp("none",name)) {
jffs2_compression_mode = JFFS2_COMPR_MODE_NONE; jffs2_compression_mode = JFFS2_COMPR_MODE_NONE;
...@@ -355,7 +355,7 @@ static int jffs2_compressor_Xable(const char *name, int disabled) ...@@ -355,7 +355,7 @@ static int jffs2_compressor_Xable(const char *name, int disabled)
if (!strcmp(this->name, name)) { if (!strcmp(this->name, name)) {
this->disabled = disabled; this->disabled = disabled;
spin_unlock(&jffs2_compressor_list_lock); spin_unlock(&jffs2_compressor_list_lock);
return 0; return 0;
} }
} }
spin_unlock(&jffs2_compressor_list_lock); spin_unlock(&jffs2_compressor_list_lock);
...@@ -385,7 +385,7 @@ int jffs2_set_compressor_priority(const char *name, int priority) ...@@ -385,7 +385,7 @@ int jffs2_set_compressor_priority(const char *name, int priority)
} }
} }
spin_unlock(&jffs2_compressor_list_lock); spin_unlock(&jffs2_compressor_list_lock);
printk(KERN_WARNING "JFFS2: compressor %s not found.\n",name); printk(KERN_WARNING "JFFS2: compressor %s not found.\n",name);
return 1; return 1;
reinsert: reinsert:
/* list is sorted in the order of priority, so if /* list is sorted in the order of priority, so if
...@@ -412,7 +412,7 @@ void jffs2_free_comprbuf(unsigned char *comprbuf, unsigned char *orig) ...@@ -412,7 +412,7 @@ void jffs2_free_comprbuf(unsigned char *comprbuf, unsigned char *orig)
kfree(comprbuf); kfree(comprbuf);
} }
int jffs2_compressors_init(void) int jffs2_compressors_init(void)
{ {
/* Registering compressors */ /* Registering compressors */
#ifdef CONFIG_JFFS2_ZLIB #ifdef CONFIG_JFFS2_ZLIB
...@@ -440,7 +440,7 @@ int jffs2_compressors_init(void) ...@@ -440,7 +440,7 @@ int jffs2_compressors_init(void)
return 0; return 0;
} }
int jffs2_compressors_exit(void) int jffs2_compressors_exit(void)
{ {
/* Unregistering compressors */ /* Unregistering compressors */
#ifdef CONFIG_JFFS2_RUBIN #ifdef CONFIG_JFFS2_RUBIN
......
...@@ -4,10 +4,10 @@ ...@@ -4,10 +4,10 @@
* Copyright (C) 2004 Ferenc Havasi <havasi@inf.u-szeged.hu>, * Copyright (C) 2004 Ferenc Havasi <havasi@inf.u-szeged.hu>,
* University of Szeged, Hungary * University of Szeged, Hungary
* *
* For licensing information, see the file 'LICENCE' in the * For licensing information, see the file 'LICENCE' in the
* jffs2 directory. * jffs2 directory.
* *
* $Id: compr.h,v 1.8 2005/07/26 13:24:40 havasi Exp $ * $Id: compr.h,v 1.9 2005/11/07 11:14:38 gleixner Exp $
* *
*/ */
......
...@@ -24,8 +24,8 @@ ...@@ -24,8 +24,8 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/jffs2.h> #include <linux/jffs2.h>
#include "compr.h" #include "compr.h"
/* _compress returns the compressed size, -1 if bigger */ /* _compress returns the compressed size, -1 if bigger */
...@@ -38,19 +38,19 @@ static int jffs2_rtime_compress(unsigned char *data_in, ...@@ -38,19 +38,19 @@ static int jffs2_rtime_compress(unsigned char *data_in,
int outpos = 0; int outpos = 0;
int pos=0; int pos=0;
memset(positions,0,sizeof(positions)); memset(positions,0,sizeof(positions));
while (pos < (*sourcelen) && outpos <= (*dstlen)-2) { while (pos < (*sourcelen) && outpos <= (*dstlen)-2) {
int backpos, runlen=0; int backpos, runlen=0;
unsigned char value; unsigned char value;
value = data_in[pos]; value = data_in[pos];
cpage_out[outpos++] = data_in[pos++]; cpage_out[outpos++] = data_in[pos++];
backpos = positions[value]; backpos = positions[value];
positions[value]=pos; positions[value]=pos;
while ((backpos < pos) && (pos < (*sourcelen)) && while ((backpos < pos) && (pos < (*sourcelen)) &&
(data_in[pos]==data_in[backpos++]) && (runlen<255)) { (data_in[pos]==data_in[backpos++]) && (runlen<255)) {
pos++; pos++;
...@@ -63,12 +63,12 @@ static int jffs2_rtime_compress(unsigned char *data_in, ...@@ -63,12 +63,12 @@ static int jffs2_rtime_compress(unsigned char *data_in,
/* We failed */ /* We failed */
return -1; return -1;
} }
/* Tell the caller how much we managed to compress, and how much space it took */ /* Tell the caller how much we managed to compress, and how much space it took */
*sourcelen = pos; *sourcelen = pos;
*dstlen = outpos; *dstlen = outpos;
return 0; return 0;
} }
static int jffs2_rtime_decompress(unsigned char *data_in, static int jffs2_rtime_decompress(unsigned char *data_in,
...@@ -79,19 +79,19 @@ static int jffs2_rtime_decompress(unsigned char *data_in, ...@@ -79,19 +79,19 @@ static int jffs2_rtime_decompress(unsigned char *data_in,
short positions[256]; short positions[256];
int outpos = 0; int outpos = 0;
int pos=0; int pos=0;
memset(positions,0,sizeof(positions)); memset(positions,0,sizeof(positions));
while (outpos<destlen) { while (outpos<destlen) {
unsigned char value; unsigned char value;
int backoffs; int backoffs;
int repeat; int repeat;
value = data_in[pos++]; value = data_in[pos++];
cpage_out[outpos++] = value; /* first the verbatim copied byte */ cpage_out[outpos++] = value; /* first the verbatim copied byte */
repeat = data_in[pos++]; repeat = data_in[pos++];
backoffs = positions[value]; backoffs = positions[value];
positions[value]=outpos; positions[value]=outpos;
if (repeat) { if (repeat) {
if (backoffs + repeat >= outpos) { if (backoffs + repeat >= outpos) {
...@@ -101,12 +101,12 @@ static int jffs2_rtime_decompress(unsigned char *data_in, ...@@ -101,12 +101,12 @@ static int jffs2_rtime_decompress(unsigned char *data_in,
} }
} else { } else {
memcpy(&cpage_out[outpos],&cpage_out[backoffs],repeat); memcpy(&cpage_out[outpos],&cpage_out[backoffs],repeat);
outpos+=repeat; outpos+=repeat;
} }
} }
} }
return 0; return 0;
} }
static struct jffs2_compressor jffs2_rtime_comp = { static struct jffs2_compressor jffs2_rtime_comp = {
.priority = JFFS2_RTIME_PRIORITY, .priority = JFFS2_RTIME_PRIORITY,
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
* *
*/ */
#include <linux/string.h> #include <linux/string.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/jffs2.h> #include <linux/jffs2.h>
...@@ -20,7 +19,7 @@ ...@@ -20,7 +19,7 @@
#include "compr.h" #include "compr.h"
static void init_rubin(struct rubin_state *rs, int div, int *bits) static void init_rubin(struct rubin_state *rs, int div, int *bits)
{ {
int c; int c;
rs->q = 0; rs->q = 0;
...@@ -40,7 +39,7 @@ static int encode(struct rubin_state *rs, long A, long B, int symbol) ...@@ -40,7 +39,7 @@ static int encode(struct rubin_state *rs, long A, long B, int symbol)
while ((rs->q >= UPPER_BIT_RUBIN) || ((rs->p + rs->q) <= UPPER_BIT_RUBIN)) { while ((rs->q >= UPPER_BIT_RUBIN) || ((rs->p + rs->q) <= UPPER_BIT_RUBIN)) {
rs->bit_number++; rs->bit_number++;
ret = pushbit(&rs->pp, (rs->q & UPPER_BIT_RUBIN) ? 1 : 0, 0); ret = pushbit(&rs->pp, (rs->q & UPPER_BIT_RUBIN) ? 1 : 0, 0);
if (ret) if (ret)
return ret; return ret;
...@@ -68,7 +67,7 @@ static int encode(struct rubin_state *rs, long A, long B, int symbol) ...@@ -68,7 +67,7 @@ static int encode(struct rubin_state *rs, long A, long B, int symbol)
static void end_rubin(struct rubin_state *rs) static void end_rubin(struct rubin_state *rs)
{ {
int i; int i;
...@@ -82,7 +81,7 @@ static void end_rubin(struct rubin_state *rs) ...@@ -82,7 +81,7 @@ static void end_rubin(struct rubin_state *rs)
static void init_decode(struct rubin_state *rs, int div, int *bits) static void init_decode(struct rubin_state *rs, int div, int *bits)
{ {
init_rubin(rs, div, bits); init_rubin(rs, div, bits);
/* behalve lower */ /* behalve lower */
rs->rec_q = 0; rs->rec_q = 0;
...@@ -188,7 +187,7 @@ static int in_byte(struct rubin_state *rs) ...@@ -188,7 +187,7 @@ static int in_byte(struct rubin_state *rs)
static int rubin_do_compress(int bit_divider, int *bits, unsigned char *data_in, static int rubin_do_compress(int bit_divider, int *bits, unsigned char *data_in,
unsigned char *cpage_out, uint32_t *sourcelen, uint32_t *dstlen) unsigned char *cpage_out, uint32_t *sourcelen, uint32_t *dstlen)
{ {
int outpos = 0; int outpos = 0;
...@@ -198,31 +197,31 @@ static int rubin_do_compress(int bit_divider, int *bits, unsigned char *data_in, ...@@ -198,31 +197,31 @@ static int rubin_do_compress(int bit_divider, int *bits, unsigned char *data_in,
init_pushpull(&rs.pp, cpage_out, *dstlen * 8, 0, 32); init_pushpull(&rs.pp, cpage_out, *dstlen * 8, 0, 32);
init_rubin(&rs, bit_divider, bits); init_rubin(&rs, bit_divider, bits);
while (pos < (*sourcelen) && !out_byte(&rs, data_in[pos])) while (pos < (*sourcelen) && !out_byte(&rs, data_in[pos]))
pos++; pos++;
end_rubin(&rs); end_rubin(&rs);
if (outpos > pos) { if (outpos > pos) {
/* We failed */ /* We failed */
return -1; return -1;
} }
/* Tell the caller how much we managed to compress, /* Tell the caller how much we managed to compress,
* and how much space it took */ * and how much space it took */
outpos = (pushedbits(&rs.pp)+7)/8; outpos = (pushedbits(&rs.pp)+7)/8;
if (outpos >= pos) if (outpos >= pos)
return -1; /* We didn't actually compress */ return -1; /* We didn't actually compress */
*sourcelen = pos; *sourcelen = pos;
*dstlen = outpos; *dstlen = outpos;
return 0; return 0;
} }
#if 0 #if 0
/* _compress returns the compressed size, -1 if bigger */ /* _compress returns the compressed size, -1 if bigger */
int jffs2_rubinmips_compress(unsigned char *data_in, unsigned char *cpage_out, int jffs2_rubinmips_compress(unsigned char *data_in, unsigned char *cpage_out,
uint32_t *sourcelen, uint32_t *dstlen, void *model) uint32_t *sourcelen, uint32_t *dstlen, void *model)
{ {
return rubin_do_compress(BIT_DIVIDER_MIPS, bits_mips, data_in, cpage_out, sourcelen, dstlen); return rubin_do_compress(BIT_DIVIDER_MIPS, bits_mips, data_in, cpage_out, sourcelen, dstlen);
...@@ -277,7 +276,7 @@ static int jffs2_dynrubin_compress(unsigned char *data_in, ...@@ -277,7 +276,7 @@ static int jffs2_dynrubin_compress(unsigned char *data_in,
} }
ret = rubin_do_compress(256, bits, data_in, cpage_out+8, &mysrclen, &mydstlen); ret = rubin_do_compress(256, bits, data_in, cpage_out+8, &mysrclen, &mydstlen);
if (ret) if (ret)
return ret; return ret;
/* Add back the 8 bytes we took for the probabilities */ /* Add back the 8 bytes we took for the probabilities */
...@@ -293,19 +292,19 @@ static int jffs2_dynrubin_compress(unsigned char *data_in, ...@@ -293,19 +292,19 @@ static int jffs2_dynrubin_compress(unsigned char *data_in,
return 0; return 0;
} }
static void rubin_do_decompress(int bit_divider, int *bits, unsigned char *cdata_in, static void rubin_do_decompress(int bit_divider, int *bits, unsigned char *cdata_in,
unsigned char *page_out, uint32_t srclen, uint32_t destlen) unsigned char *page_out, uint32_t srclen, uint32_t destlen)
{ {
int outpos = 0; int outpos = 0;
struct rubin_state rs; struct rubin_state rs;
init_pushpull(&rs.pp, cdata_in, srclen, 0, 0); init_pushpull(&rs.pp, cdata_in, srclen, 0, 0);
init_decode(&rs, bit_divider, bits); init_decode(&rs, bit_divider, bits);
while (outpos < destlen) { while (outpos < destlen) {
page_out[outpos++] = in_byte(&rs); page_out[outpos++] = in_byte(&rs);
} }
} }
static int jffs2_rubinmips_decompress(unsigned char *data_in, static int jffs2_rubinmips_decompress(unsigned char *data_in,
......
/* Rubin encoder/decoder header */ /* Rubin encoder/decoder header */
/* work started at : aug 3, 1994 */ /* work started at : aug 3, 1994 */
/* last modification : aug 15, 1994 */ /* last modification : aug 15, 1994 */
/* $Id: compr_rubin.h,v 1.6 2002/01/25 01:49:26 dwmw2 Exp $ */ /* $Id: compr_rubin.h,v 1.7 2005/11/07 11:14:38 gleixner Exp $ */
#include "pushpull.h" #include "pushpull.h"
...@@ -11,8 +11,8 @@ ...@@ -11,8 +11,8 @@
struct rubin_state { struct rubin_state {
unsigned long p; unsigned long p;
unsigned long q; unsigned long q;
unsigned long rec_q; unsigned long rec_q;
long bit_number; long bit_number;
struct pushpull pp; struct pushpull pp;
......
...@@ -7,7 +7,7 @@ ...@@ -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: compr_zlib.c,v 1.31 2005/05/20 19:30:06 gleixner Exp $ * $Id: compr_zlib.c,v 1.32 2005/11/07 11:14:38 gleixner Exp $
* *
*/ */
...@@ -24,11 +24,11 @@ ...@@ -24,11 +24,11 @@
#include "nodelist.h" #include "nodelist.h"
#include "compr.h" #include "compr.h"
/* Plan: call deflate() with avail_in == *sourcelen, /* Plan: call deflate() with avail_in == *sourcelen,
avail_out = *dstlen - 12 and flush == Z_FINISH. avail_out = *dstlen - 12 and flush == Z_FINISH.
If it doesn't manage to finish, call it again with If it doesn't manage to finish, call it again with
avail_in == 0 and avail_out set to the remaining 12 avail_in == 0 and avail_out set to the remaining 12
bytes for it to clean up. bytes for it to clean up.
Q: Is 12 bytes sufficient? Q: Is 12 bytes sufficient?
*/ */
#define STREAM_END_SPACE 12 #define STREAM_END_SPACE 12
...@@ -89,7 +89,7 @@ static int jffs2_zlib_compress(unsigned char *data_in, ...@@ -89,7 +89,7 @@ static int jffs2_zlib_compress(unsigned char *data_in,
def_strm.next_in = data_in; def_strm.next_in = data_in;
def_strm.total_in = 0; def_strm.total_in = 0;
def_strm.next_out = cpage_out; def_strm.next_out = cpage_out;
def_strm.total_out = 0; def_strm.total_out = 0;
...@@ -99,7 +99,7 @@ static int jffs2_zlib_compress(unsigned char *data_in, ...@@ -99,7 +99,7 @@ static int jffs2_zlib_compress(unsigned char *data_in,
D1(printk(KERN_DEBUG "calling deflate with avail_in %d, avail_out %d\n", D1(printk(KERN_DEBUG "calling deflate with avail_in %d, avail_out %d\n",
def_strm.avail_in, def_strm.avail_out)); def_strm.avail_in, def_strm.avail_out));
ret = zlib_deflate(&def_strm, Z_PARTIAL_FLUSH); ret = zlib_deflate(&def_strm, Z_PARTIAL_FLUSH);
D1(printk(KERN_DEBUG "deflate returned with avail_in %d, avail_out %d, total_in %ld, total_out %ld\n", D1(printk(KERN_DEBUG "deflate returned with avail_in %d, avail_out %d, total_in %ld, total_out %ld\n",
def_strm.avail_in, def_strm.avail_out, def_strm.total_in, def_strm.total_out)); def_strm.avail_in, def_strm.avail_out, def_strm.total_in, def_strm.total_out));
if (ret != Z_OK) { if (ret != Z_OK) {
D1(printk(KERN_DEBUG "deflate in loop returned %d\n", ret)); D1(printk(KERN_DEBUG "deflate in loop returned %d\n", ret));
...@@ -150,7 +150,7 @@ static int jffs2_zlib_decompress(unsigned char *data_in, ...@@ -150,7 +150,7 @@ static int jffs2_zlib_decompress(unsigned char *data_in,
inf_strm.next_in = data_in; inf_strm.next_in = data_in;
inf_strm.avail_in = srclen; inf_strm.avail_in = srclen;
inf_strm.total_in = 0; inf_strm.total_in = 0;
inf_strm.next_out = cpage_out; inf_strm.next_out = cpage_out;
inf_strm.avail_out = destlen; inf_strm.avail_out = destlen;
inf_strm.total_out = 0; inf_strm.total_out = 0;
......
/* $Id: comprtest.c,v 1.5 2002/01/03 15:20:44 dwmw2 Exp $ */ /* $Id: comprtest.c,v 1.6 2005/11/07 11:14:38 gleixner Exp $ */
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/string.h> #include <linux/string.h>
...@@ -265,9 +265,9 @@ static unsigned char testdata[TESTDATA_LEN] = { ...@@ -265,9 +265,9 @@ static unsigned char testdata[TESTDATA_LEN] = {
static unsigned char comprbuf[TESTDATA_LEN]; static unsigned char comprbuf[TESTDATA_LEN];
static unsigned char decomprbuf[TESTDATA_LEN]; static unsigned char decomprbuf[TESTDATA_LEN];
int jffs2_decompress(unsigned char comprtype, unsigned char *cdata_in, int jffs2_decompress(unsigned char comprtype, unsigned char *cdata_in,
unsigned char *data_out, uint32_t cdatalen, uint32_t datalen); unsigned char *data_out, uint32_t cdatalen, uint32_t datalen);
unsigned char jffs2_compress(unsigned char *data_in, unsigned char *cpage_out, unsigned char jffs2_compress(unsigned char *data_in, unsigned char *cpage_out,
uint32_t *datalen, uint32_t *cdatalen); uint32_t *datalen, uint32_t *cdatalen);
int init_module(void ) { int init_module(void ) {
...@@ -276,10 +276,10 @@ int init_module(void ) { ...@@ -276,10 +276,10 @@ int init_module(void ) {
int ret; int ret;
printk("Original data: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n", printk("Original data: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n",
testdata[0],testdata[1],testdata[2],testdata[3], testdata[0],testdata[1],testdata[2],testdata[3],
testdata[4],testdata[5],testdata[6],testdata[7], testdata[4],testdata[5],testdata[6],testdata[7],
testdata[8],testdata[9],testdata[10],testdata[11], testdata[8],testdata[9],testdata[10],testdata[11],
testdata[12],testdata[13],testdata[14],testdata[15]); testdata[12],testdata[13],testdata[14],testdata[15]);
d = TESTDATA_LEN; d = TESTDATA_LEN;
c = TESTDATA_LEN; c = TESTDATA_LEN;
comprtype = jffs2_compress(testdata, comprbuf, &d, &c); comprtype = jffs2_compress(testdata, comprbuf, &d, &c);
...@@ -287,18 +287,18 @@ int init_module(void ) { ...@@ -287,18 +287,18 @@ int init_module(void ) {
printk("jffs2_compress used compression type %d. Compressed size %d, uncompressed size %d\n", printk("jffs2_compress used compression type %d. Compressed size %d, uncompressed size %d\n",
comprtype, c, d); comprtype, c, d);
printk("Compressed data: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n", printk("Compressed data: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n",
comprbuf[0],comprbuf[1],comprbuf[2],comprbuf[3], comprbuf[0],comprbuf[1],comprbuf[2],comprbuf[3],
comprbuf[4],comprbuf[5],comprbuf[6],comprbuf[7], comprbuf[4],comprbuf[5],comprbuf[6],comprbuf[7],
comprbuf[8],comprbuf[9],comprbuf[10],comprbuf[11], comprbuf[8],comprbuf[9],comprbuf[10],comprbuf[11],
comprbuf[12],comprbuf[13],comprbuf[14],comprbuf[15]); comprbuf[12],comprbuf[13],comprbuf[14],comprbuf[15]);
ret = jffs2_decompress(comprtype, comprbuf, decomprbuf, c, d); ret = jffs2_decompress(comprtype, comprbuf, decomprbuf, c, d);
printk("jffs2_decompress returned %d\n", ret); printk("jffs2_decompress returned %d\n", ret);
printk("Decompressed data: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n", printk("Decompressed data: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n",
decomprbuf[0],decomprbuf[1],decomprbuf[2],decomprbuf[3], decomprbuf[0],decomprbuf[1],decomprbuf[2],decomprbuf[3],
decomprbuf[4],decomprbuf[5],decomprbuf[6],decomprbuf[7], decomprbuf[4],decomprbuf[5],decomprbuf[6],decomprbuf[7],
decomprbuf[8],decomprbuf[9],decomprbuf[10],decomprbuf[11], decomprbuf[8],decomprbuf[9],decomprbuf[10],decomprbuf[11],
decomprbuf[12],decomprbuf[13],decomprbuf[14],decomprbuf[15]); decomprbuf[12],decomprbuf[13],decomprbuf[14],decomprbuf[15]);
if (memcmp(decomprbuf, testdata, d)) if (memcmp(decomprbuf, testdata, d))
printk("Compression and decompression corrupted data\n"); printk("Compression and decompression corrupted data\n");
else else
......
...@@ -7,7 +7,7 @@ ...@@ -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: debug.c,v 1.11 2005/09/21 13:28:35 dedekind Exp $ * $Id: debug.c,v 1.12 2005/11/07 11:14:39 gleixner Exp $
* *
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -67,7 +67,7 @@ __jffs2_dbg_fragtree_paranoia_check(struct jffs2_inode_info *f) ...@@ -67,7 +67,7 @@ __jffs2_dbg_fragtree_paranoia_check(struct jffs2_inode_info *f)
__jffs2_dbg_fragtree_paranoia_check_nolock(f); __jffs2_dbg_fragtree_paranoia_check_nolock(f);
up(&f->sem); up(&f->sem);
} }
void void
__jffs2_dbg_fragtree_paranoia_check_nolock(struct jffs2_inode_info *f) __jffs2_dbg_fragtree_paranoia_check_nolock(struct jffs2_inode_info *f)
{ {
...@@ -165,7 +165,7 @@ __jffs2_dbg_acct_paranoia_check(struct jffs2_sb_info *c, ...@@ -165,7 +165,7 @@ __jffs2_dbg_acct_paranoia_check(struct jffs2_sb_info *c,
__jffs2_dbg_acct_paranoia_check_nolock(c, jeb); __jffs2_dbg_acct_paranoia_check_nolock(c, jeb);
spin_unlock(&c->erase_completion_lock); spin_unlock(&c->erase_completion_lock);
} }
void void
__jffs2_dbg_acct_paranoia_check_nolock(struct jffs2_sb_info *c, __jffs2_dbg_acct_paranoia_check_nolock(struct jffs2_sb_info *c,
struct jffs2_eraseblock *jeb) struct jffs2_eraseblock *jeb)
...@@ -237,7 +237,7 @@ __jffs2_dbg_acct_paranoia_check_nolock(struct jffs2_sb_info *c, ...@@ -237,7 +237,7 @@ __jffs2_dbg_acct_paranoia_check_nolock(struct jffs2_sb_info *c,
__jffs2_dbg_dump_jeb_nolock(jeb); __jffs2_dbg_dump_jeb_nolock(jeb);
__jffs2_dbg_dump_block_lists_nolock(c); __jffs2_dbg_dump_block_lists_nolock(c);
BUG(); BUG();
} }
#endif /* JFFS2_DBG_PARANOIA_CHECKS */ #endif /* JFFS2_DBG_PARANOIA_CHECKS */
...@@ -321,7 +321,7 @@ void ...@@ -321,7 +321,7 @@ void
__jffs2_dbg_dump_block_lists_nolock(struct jffs2_sb_info *c) __jffs2_dbg_dump_block_lists_nolock(struct jffs2_sb_info *c)
{ {
printk(JFFS2_DBG_MSG_PREFIX " dump JFFS2 blocks lists:\n"); printk(JFFS2_DBG_MSG_PREFIX " dump JFFS2 blocks lists:\n");
printk(JFFS2_DBG "flash_size: %#08x\n", c->flash_size); printk(JFFS2_DBG "flash_size: %#08x\n", c->flash_size);
printk(JFFS2_DBG "used_size: %#08x\n", c->used_size); printk(JFFS2_DBG "used_size: %#08x\n", c->used_size);
printk(JFFS2_DBG "dirty_size: %#08x\n", c->dirty_size); printk(JFFS2_DBG "dirty_size: %#08x\n", c->dirty_size);
...@@ -577,15 +577,15 @@ __jffs2_dbg_dump_buffer(unsigned char *buf, int len, uint32_t offs) ...@@ -577,15 +577,15 @@ __jffs2_dbg_dump_buffer(unsigned char *buf, int len, uint32_t offs)
{ {
int skip; int skip;
int i; int i;
printk(JFFS2_DBG_MSG_PREFIX " dump from offset %#08x to offset %#08x (%x bytes).\n", printk(JFFS2_DBG_MSG_PREFIX " dump from offset %#08x to offset %#08x (%x bytes).\n",
offs, offs + len, len); offs, offs + len, len);
i = skip = offs % JFFS2_BUFDUMP_BYTES_PER_LINE; i = skip = offs % JFFS2_BUFDUMP_BYTES_PER_LINE;
offs = offs & ~(JFFS2_BUFDUMP_BYTES_PER_LINE - 1); offs = offs & ~(JFFS2_BUFDUMP_BYTES_PER_LINE - 1);
if (skip != 0) if (skip != 0)
printk(JFFS2_DBG "%#08x: ", offs); printk(JFFS2_DBG "%#08x: ", offs);
while (skip--) while (skip--)
printk(" "); printk(" ");
...@@ -598,7 +598,7 @@ __jffs2_dbg_dump_buffer(unsigned char *buf, int len, uint32_t offs) ...@@ -598,7 +598,7 @@ __jffs2_dbg_dump_buffer(unsigned char *buf, int len, uint32_t offs)
} }
printk("%02x ", buf[i]); printk("%02x ", buf[i]);
i += 1; i += 1;
} }
...@@ -616,7 +616,7 @@ __jffs2_dbg_dump_node(struct jffs2_sb_info *c, uint32_t ofs) ...@@ -616,7 +616,7 @@ __jffs2_dbg_dump_node(struct jffs2_sb_info *c, uint32_t ofs)
size_t retlen; size_t retlen;
uint32_t crc; uint32_t crc;
int ret; int ret;
printk(JFFS2_DBG_MSG_PREFIX " dump node at offset %#08x.\n", ofs); printk(JFFS2_DBG_MSG_PREFIX " dump node at offset %#08x.\n", ofs);
ret = jffs2_flash_read(c, ofs, len, &retlen, (unsigned char *)&node); ret = jffs2_flash_read(c, ofs, len, &retlen, (unsigned char *)&node);
...@@ -630,13 +630,13 @@ __jffs2_dbg_dump_node(struct jffs2_sb_info *c, uint32_t ofs) ...@@ -630,13 +630,13 @@ __jffs2_dbg_dump_node(struct jffs2_sb_info *c, uint32_t ofs)
printk(JFFS2_DBG "nodetype:\t%#04x\n", je16_to_cpu(node.u.nodetype)); printk(JFFS2_DBG "nodetype:\t%#04x\n", je16_to_cpu(node.u.nodetype));
printk(JFFS2_DBG "totlen:\t%#08x\n", je32_to_cpu(node.u.totlen)); printk(JFFS2_DBG "totlen:\t%#08x\n", je32_to_cpu(node.u.totlen));
printk(JFFS2_DBG "hdr_crc:\t%#08x\n", je32_to_cpu(node.u.hdr_crc)); printk(JFFS2_DBG "hdr_crc:\t%#08x\n", je32_to_cpu(node.u.hdr_crc));
crc = crc32(0, &node.u, sizeof(node.u) - 4); crc = crc32(0, &node.u, sizeof(node.u) - 4);
if (crc != je32_to_cpu(node.u.hdr_crc)) { if (crc != je32_to_cpu(node.u.hdr_crc)) {
JFFS2_ERROR("wrong common header CRC.\n"); JFFS2_ERROR("wrong common header CRC.\n");
return; return;
} }
if (je16_to_cpu(node.u.magic) != JFFS2_MAGIC_BITMASK && if (je16_to_cpu(node.u.magic) != JFFS2_MAGIC_BITMASK &&
je16_to_cpu(node.u.magic) != JFFS2_OLD_MAGIC_BITMASK) je16_to_cpu(node.u.magic) != JFFS2_OLD_MAGIC_BITMASK)
{ {
...@@ -668,7 +668,7 @@ __jffs2_dbg_dump_node(struct jffs2_sb_info *c, uint32_t ofs) ...@@ -668,7 +668,7 @@ __jffs2_dbg_dump_node(struct jffs2_sb_info *c, uint32_t ofs)
printk(JFFS2_DBG "data_crc:\t%#08x\n", je32_to_cpu(node.i.data_crc)); printk(JFFS2_DBG "data_crc:\t%#08x\n", je32_to_cpu(node.i.data_crc));
printk(JFFS2_DBG "node_crc:\t%#08x\n", je32_to_cpu(node.i.node_crc)); printk(JFFS2_DBG "node_crc:\t%#08x\n", je32_to_cpu(node.i.node_crc));
crc = crc32(0, &node.i, sizeof(node.i) - 8); crc = crc32(0, &node.i, sizeof(node.i) - 8);
if (crc != je32_to_cpu(node.i.node_crc)) { if (crc != je32_to_cpu(node.i.node_crc)) {
JFFS2_ERROR("wrong node header CRC.\n"); JFFS2_ERROR("wrong node header CRC.\n");
return; return;
...@@ -686,11 +686,11 @@ __jffs2_dbg_dump_node(struct jffs2_sb_info *c, uint32_t ofs) ...@@ -686,11 +686,11 @@ __jffs2_dbg_dump_node(struct jffs2_sb_info *c, uint32_t ofs)
printk(JFFS2_DBG "type:\t%#02x\n", node.d.type); printk(JFFS2_DBG "type:\t%#02x\n", node.d.type);
printk(JFFS2_DBG "node_crc:\t%#08x\n", je32_to_cpu(node.d.node_crc)); printk(JFFS2_DBG "node_crc:\t%#08x\n", je32_to_cpu(node.d.node_crc));
printk(JFFS2_DBG "name_crc:\t%#08x\n", je32_to_cpu(node.d.name_crc)); printk(JFFS2_DBG "name_crc:\t%#08x\n", je32_to_cpu(node.d.name_crc));
node.d.name[node.d.nsize] = '\0'; node.d.name[node.d.nsize] = '\0';
printk(JFFS2_DBG "name:\t\"%s\"\n", node.d.name); printk(JFFS2_DBG "name:\t\"%s\"\n", node.d.name);
crc = crc32(0, &node.d, sizeof(node.d) - 8); crc = crc32(0, &node.d, sizeof(node.d) - 8);
if (crc != je32_to_cpu(node.d.node_crc)) { if (crc != je32_to_cpu(node.d.node_crc)) {
JFFS2_ERROR("wrong node header CRC.\n"); JFFS2_ERROR("wrong node header CRC.\n");
return; return;
......
...@@ -7,7 +7,7 @@ ...@@ -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: debug.h,v 1.20 2005/10/24 16:22:34 dedekind Exp $ * $Id: debug.h,v 1.21 2005/11/07 11:14:39 gleixner Exp $
* *
*/ */
#ifndef _JFFS2_DEBUG_H_ #ifndef _JFFS2_DEBUG_H_
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#define JFFS2_DBG_PARANOIA_CHECKS #define JFFS2_DBG_PARANOIA_CHECKS
#define JFFS2_DBG_DUMPS #define JFFS2_DBG_DUMPS
/* /*
* By defining/undefining the below macros one may select debugging messages * By defining/undefining the below macros one may select debugging messages
* fro specific JFFS2 subsystems. * fro specific JFFS2 subsystems.
*/ */
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
/* Sanity checks are supposed to be light-weight and enabled by default */ /* Sanity checks are supposed to be light-weight and enabled by default */
#define JFFS2_DBG_SANITY_CHECKS #define JFFS2_DBG_SANITY_CHECKS
/* /*
* Dx() are mainly used for debugging messages, they must go away and be * Dx() are mainly used for debugging messages, they must go away and be
* superseded by nicer dbg_xxx() macros... * superseded by nicer dbg_xxx() macros...
*/ */
...@@ -91,7 +91,7 @@ ...@@ -91,7 +91,7 @@
" (%d) %s: " fmt, current->pid, \ " (%d) %s: " fmt, current->pid, \
__FUNCTION__, ##__VA_ARGS__); \ __FUNCTION__, ##__VA_ARGS__); \
} while(0) } while(0)
#define JFFS2_NOTICE(fmt, ...) \ #define JFFS2_NOTICE(fmt, ...) \
do { \ do { \
printk(JFFS2_NOTICE_MSG_PREFIX \ printk(JFFS2_NOTICE_MSG_PREFIX \
...@@ -106,7 +106,7 @@ ...@@ -106,7 +106,7 @@
__FUNCTION__, ##__VA_ARGS__); \ __FUNCTION__, ##__VA_ARGS__); \
} while(0) } while(0)
/* /*
* We split our debugging messages on several parts, depending on the JFFS2 * We split our debugging messages on several parts, depending on the JFFS2
* subsystem the message belongs to. * subsystem the message belongs to.
*/ */
......
...@@ -7,7 +7,7 @@ ...@@ -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: dir.c,v 1.89 2005/09/07 08:34:54 havasi Exp $ * $Id: dir.c,v 1.90 2005/11/07 11:14:39 gleixner Exp $
* *
*/ */
...@@ -64,7 +64,7 @@ struct inode_operations jffs2_dir_inode_operations = ...@@ -64,7 +64,7 @@ struct inode_operations jffs2_dir_inode_operations =
/* We keep the dirent list sorted in increasing order of name hash, /* We keep the dirent list sorted in increasing order of name hash,
and we use the same hash function as the dentries. Makes this and we use the same hash function as the dentries. Makes this
nice and simple nice and simple
*/ */
static struct dentry *jffs2_lookup(struct inode *dir_i, struct dentry *target, static struct dentry *jffs2_lookup(struct inode *dir_i, struct dentry *target,
...@@ -85,7 +85,7 @@ static struct dentry *jffs2_lookup(struct inode *dir_i, struct dentry *target, ...@@ -85,7 +85,7 @@ static struct dentry *jffs2_lookup(struct inode *dir_i, struct dentry *target,
/* NB: The 2.2 backport will need to explicitly check for '.' and '..' here */ /* NB: The 2.2 backport will need to explicitly check for '.' and '..' here */
for (fd_list = dir_f->dents; fd_list && fd_list->nhash <= target->d_name.hash; fd_list = fd_list->next) { for (fd_list = dir_f->dents; fd_list && fd_list->nhash <= target->d_name.hash; fd_list = fd_list->next) {
if (fd_list->nhash == target->d_name.hash && if (fd_list->nhash == target->d_name.hash &&
(!fd || fd_list->version > fd->version) && (!fd || fd_list->version > fd->version) &&
strlen(fd_list->name) == target->d_name.len && strlen(fd_list->name) == target->d_name.len &&
!strncmp(fd_list->name, target->d_name.name, target->d_name.len)) { !strncmp(fd_list->name, target->d_name.name, target->d_name.len)) {
...@@ -147,7 +147,7 @@ static int jffs2_readdir(struct file *filp, void *dirent, filldir_t filldir) ...@@ -147,7 +147,7 @@ static int jffs2_readdir(struct file *filp, void *dirent, filldir_t filldir)
curofs++; curofs++;
/* First loop: curofs = 2; offset = 2 */ /* First loop: curofs = 2; offset = 2 */
if (curofs < offset) { if (curofs < offset) {
D2(printk(KERN_DEBUG "Skipping dirent: \"%s\", ino #%u, type %d, because curofs %ld < offset %ld\n", D2(printk(KERN_DEBUG "Skipping dirent: \"%s\", ino #%u, type %d, because curofs %ld < offset %ld\n",
fd->name, fd->ino, fd->type, curofs, offset)); fd->name, fd->ino, fd->type, curofs, offset));
continue; continue;
} }
...@@ -182,7 +182,7 @@ static int jffs2_create(struct inode *dir_i, struct dentry *dentry, int mode, ...@@ -182,7 +182,7 @@ static int jffs2_create(struct inode *dir_i, struct dentry *dentry, int mode,
ri = jffs2_alloc_raw_inode(); ri = jffs2_alloc_raw_inode();
if (!ri) if (!ri)
return -ENOMEM; return -ENOMEM;
c = JFFS2_SB_INFO(dir_i->i_sb); c = JFFS2_SB_INFO(dir_i->i_sb);
D1(printk(KERN_DEBUG "jffs2_create()\n")); D1(printk(KERN_DEBUG "jffs2_create()\n"));
...@@ -203,7 +203,7 @@ static int jffs2_create(struct inode *dir_i, struct dentry *dentry, int mode, ...@@ -203,7 +203,7 @@ static int jffs2_create(struct inode *dir_i, struct dentry *dentry, int mode,
f = JFFS2_INODE_INFO(inode); f = JFFS2_INODE_INFO(inode);
dir_f = JFFS2_INODE_INFO(dir_i); dir_f = JFFS2_INODE_INFO(dir_i);
ret = jffs2_do_create(c, dir_f, f, ri, ret = jffs2_do_create(c, dir_f, f, ri,
dentry->d_name.name, dentry->d_name.len); dentry->d_name.name, dentry->d_name.len);
if (ret) { if (ret) {
...@@ -234,7 +234,7 @@ static int jffs2_unlink(struct inode *dir_i, struct dentry *dentry) ...@@ -234,7 +234,7 @@ static int jffs2_unlink(struct inode *dir_i, struct dentry *dentry)
int ret; int ret;
uint32_t now = get_seconds(); uint32_t now = get_seconds();
ret = jffs2_do_unlink(c, dir_f, dentry->d_name.name, ret = jffs2_do_unlink(c, dir_f, dentry->d_name.name,
dentry->d_name.len, dead_f, now); dentry->d_name.len, dead_f, now);
if (dead_f->inocache) if (dead_f->inocache)
dentry->d_inode->i_nlink = dead_f->inocache->nlink; dentry->d_inode->i_nlink = dead_f->inocache->nlink;
...@@ -303,11 +303,11 @@ static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char ...@@ -303,11 +303,11 @@ static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char
if (!ri) if (!ri)
return -ENOMEM; return -ENOMEM;
c = JFFS2_SB_INFO(dir_i->i_sb); c = JFFS2_SB_INFO(dir_i->i_sb);
/* Try to reserve enough space for both node and dirent. /* Try to reserve enough space for both node and dirent.
* Just the node will do for now, though * Just the node will do for now, though
*/ */
namelen = dentry->d_name.len; namelen = dentry->d_name.len;
ret = jffs2_reserve_space(c, sizeof(*ri) + targetlen, &phys_ofs, &alloclen, ret = jffs2_reserve_space(c, sizeof(*ri) + targetlen, &phys_ofs, &alloclen,
...@@ -338,7 +338,7 @@ static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char ...@@ -338,7 +338,7 @@ static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char
ri->compr = JFFS2_COMPR_NONE; ri->compr = JFFS2_COMPR_NONE;
ri->data_crc = cpu_to_je32(crc32(0, target, targetlen)); ri->data_crc = cpu_to_je32(crc32(0, target, targetlen));
ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8)); ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
fn = jffs2_write_dnode(c, f, ri, target, targetlen, phys_ofs, ALLOC_NORMAL); fn = jffs2_write_dnode(c, f, ri, target, targetlen, phys_ofs, ALLOC_NORMAL);
jffs2_free_raw_inode(ri); jffs2_free_raw_inode(ri);
...@@ -364,7 +364,7 @@ static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char ...@@ -364,7 +364,7 @@ static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char
memcpy(f->target, target, targetlen + 1); memcpy(f->target, target, targetlen + 1);
D1(printk(KERN_DEBUG "jffs2_symlink: symlink's target '%s' cached\n", (char *)f->target)); D1(printk(KERN_DEBUG "jffs2_symlink: symlink's target '%s' cached\n", (char *)f->target));
/* No data here. Only a metadata node, which will be /* No data here. Only a metadata node, which will be
obsoleted by the first data write obsoleted by the first data write
*/ */
f->metadata = fn; f->metadata = fn;
...@@ -407,7 +407,7 @@ static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char ...@@ -407,7 +407,7 @@ static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char
fd = jffs2_write_dirent(c, dir_f, rd, dentry->d_name.name, namelen, phys_ofs, ALLOC_NORMAL); fd = jffs2_write_dirent(c, dir_f, rd, dentry->d_name.name, namelen, phys_ofs, ALLOC_NORMAL);
if (IS_ERR(fd)) { if (IS_ERR(fd)) {
/* dirent failed to write. Delete the inode normally /* dirent failed to write. Delete the inode normally
as if it were the final unlink() */ as if it were the final unlink() */
jffs2_complete_reservation(c); jffs2_complete_reservation(c);
jffs2_free_raw_dirent(rd); jffs2_free_raw_dirent(rd);
...@@ -450,11 +450,11 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode) ...@@ -450,11 +450,11 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode)
ri = jffs2_alloc_raw_inode(); ri = jffs2_alloc_raw_inode();
if (!ri) if (!ri)
return -ENOMEM; return -ENOMEM;
c = JFFS2_SB_INFO(dir_i->i_sb); c = JFFS2_SB_INFO(dir_i->i_sb);
/* Try to reserve enough space for both node and dirent. /* Try to reserve enough space for both node and dirent.
* Just the node will do for now, though * Just the node will do for now, though
*/ */
namelen = dentry->d_name.len; namelen = dentry->d_name.len;
ret = jffs2_reserve_space(c, sizeof(*ri), &phys_ofs, &alloclen, ALLOC_NORMAL, ret = jffs2_reserve_space(c, sizeof(*ri), &phys_ofs, &alloclen, ALLOC_NORMAL,
...@@ -482,7 +482,7 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode) ...@@ -482,7 +482,7 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode)
ri->data_crc = cpu_to_je32(0); ri->data_crc = cpu_to_je32(0);
ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8)); ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
fn = jffs2_write_dnode(c, f, ri, NULL, 0, phys_ofs, ALLOC_NORMAL); fn = jffs2_write_dnode(c, f, ri, NULL, 0, phys_ofs, ALLOC_NORMAL);
jffs2_free_raw_inode(ri); jffs2_free_raw_inode(ri);
...@@ -494,7 +494,7 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode) ...@@ -494,7 +494,7 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode)
jffs2_clear_inode(inode); jffs2_clear_inode(inode);
return PTR_ERR(fn); return PTR_ERR(fn);
} }
/* No data here. Only a metadata node, which will be /* No data here. Only a metadata node, which will be
obsoleted by the first data write obsoleted by the first data write
*/ */
f->metadata = fn; f->metadata = fn;
...@@ -508,7 +508,7 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode) ...@@ -508,7 +508,7 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode)
jffs2_clear_inode(inode); jffs2_clear_inode(inode);
return ret; return ret;
} }
rd = jffs2_alloc_raw_dirent(); rd = jffs2_alloc_raw_dirent();
if (!rd) { if (!rd) {
/* Argh. Now we treat it like a normal delete */ /* Argh. Now we treat it like a normal delete */
...@@ -535,9 +535,9 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode) ...@@ -535,9 +535,9 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode)
rd->name_crc = cpu_to_je32(crc32(0, dentry->d_name.name, namelen)); rd->name_crc = cpu_to_je32(crc32(0, dentry->d_name.name, namelen));
fd = jffs2_write_dirent(c, dir_f, rd, dentry->d_name.name, namelen, phys_ofs, ALLOC_NORMAL); fd = jffs2_write_dirent(c, dir_f, rd, dentry->d_name.name, namelen, phys_ofs, ALLOC_NORMAL);
if (IS_ERR(fd)) { if (IS_ERR(fd)) {
/* dirent failed to write. Delete the inode normally /* dirent failed to write. Delete the inode normally
as if it were the final unlink() */ as if it were the final unlink() */
jffs2_complete_reservation(c); jffs2_complete_reservation(c);
jffs2_free_raw_dirent(rd); jffs2_free_raw_dirent(rd);
...@@ -599,16 +599,16 @@ static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, int mode, de ...@@ -599,16 +599,16 @@ static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, int mode, de
ri = jffs2_alloc_raw_inode(); ri = jffs2_alloc_raw_inode();
if (!ri) if (!ri)
return -ENOMEM; return -ENOMEM;
c = JFFS2_SB_INFO(dir_i->i_sb); c = JFFS2_SB_INFO(dir_i->i_sb);
if (S_ISBLK(mode) || S_ISCHR(mode)) { if (S_ISBLK(mode) || S_ISCHR(mode)) {
dev = cpu_to_je16(old_encode_dev(rdev)); dev = cpu_to_je16(old_encode_dev(rdev));
devlen = sizeof(dev); devlen = sizeof(dev);
} }
/* Try to reserve enough space for both node and dirent. /* Try to reserve enough space for both node and dirent.
* Just the node will do for now, though * Just the node will do for now, though
*/ */
namelen = dentry->d_name.len; namelen = dentry->d_name.len;
ret = jffs2_reserve_space(c, sizeof(*ri) + devlen, &phys_ofs, &alloclen, ret = jffs2_reserve_space(c, sizeof(*ri) + devlen, &phys_ofs, &alloclen,
...@@ -638,7 +638,7 @@ static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, int mode, de ...@@ -638,7 +638,7 @@ static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, int mode, de
ri->compr = JFFS2_COMPR_NONE; ri->compr = JFFS2_COMPR_NONE;
ri->data_crc = cpu_to_je32(crc32(0, &dev, devlen)); ri->data_crc = cpu_to_je32(crc32(0, &dev, devlen));
ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8)); ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
fn = jffs2_write_dnode(c, f, ri, (char *)&dev, devlen, phys_ofs, ALLOC_NORMAL); fn = jffs2_write_dnode(c, f, ri, (char *)&dev, devlen, phys_ofs, ALLOC_NORMAL);
jffs2_free_raw_inode(ri); jffs2_free_raw_inode(ri);
...@@ -650,7 +650,7 @@ static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, int mode, de ...@@ -650,7 +650,7 @@ static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, int mode, de
jffs2_clear_inode(inode); jffs2_clear_inode(inode);
return PTR_ERR(fn); return PTR_ERR(fn);
} }
/* No data here. Only a metadata node, which will be /* No data here. Only a metadata node, which will be
obsoleted by the first data write obsoleted by the first data write
*/ */
f->metadata = fn; f->metadata = fn;
...@@ -694,9 +694,9 @@ static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, int mode, de ...@@ -694,9 +694,9 @@ static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, int mode, de
rd->name_crc = cpu_to_je32(crc32(0, dentry->d_name.name, namelen)); rd->name_crc = cpu_to_je32(crc32(0, dentry->d_name.name, namelen));
fd = jffs2_write_dirent(c, dir_f, rd, dentry->d_name.name, namelen, phys_ofs, ALLOC_NORMAL); fd = jffs2_write_dirent(c, dir_f, rd, dentry->d_name.name, namelen, phys_ofs, ALLOC_NORMAL);
if (IS_ERR(fd)) { if (IS_ERR(fd)) {
/* dirent failed to write. Delete the inode normally /* dirent failed to write. Delete the inode normally
as if it were the final unlink() */ as if it were the final unlink() */
jffs2_complete_reservation(c); jffs2_complete_reservation(c);
jffs2_free_raw_dirent(rd); jffs2_free_raw_dirent(rd);
...@@ -730,7 +730,7 @@ static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry, ...@@ -730,7 +730,7 @@ static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry,
uint8_t type; uint8_t type;
uint32_t now; uint32_t now;
/* The VFS will check for us and prevent trying to rename a /* The VFS will check for us and prevent trying to rename a
* file over a directory and vice versa, but if it's a directory, * file over a directory and vice versa, but if it's a directory,
* the VFS can't check whether the victim is empty. The filesystem * the VFS can't check whether the victim is empty. The filesystem
* needs to do that for itself. * needs to do that for itself.
...@@ -752,18 +752,18 @@ static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry, ...@@ -752,18 +752,18 @@ static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry,
} }
/* XXX: We probably ought to alloc enough space for /* XXX: We probably ought to alloc enough space for
both nodes at the same time. Writing the new link, both nodes at the same time. Writing the new link,
then getting -ENOSPC, is quite bad :) then getting -ENOSPC, is quite bad :)
*/ */
/* Make a hard link */ /* Make a hard link */
/* XXX: This is ugly */ /* XXX: This is ugly */
type = (old_dentry->d_inode->i_mode & S_IFMT) >> 12; type = (old_dentry->d_inode->i_mode & S_IFMT) >> 12;
if (!type) type = DT_REG; if (!type) type = DT_REG;
now = get_seconds(); now = get_seconds();
ret = jffs2_do_link(c, JFFS2_INODE_INFO(new_dir_i), ret = jffs2_do_link(c, JFFS2_INODE_INFO(new_dir_i),
old_dentry->d_inode->i_ino, type, old_dentry->d_inode->i_ino, type,
new_dentry->d_name.name, new_dentry->d_name.len, now); new_dentry->d_name.name, new_dentry->d_name.len, now);
...@@ -782,13 +782,13 @@ static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry, ...@@ -782,13 +782,13 @@ static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry,
} }
} }
/* If it was a directory we moved, and there was no victim, /* If it was a directory we moved, and there was no victim,
increase i_nlink on its new parent */ increase i_nlink on its new parent */
if (S_ISDIR(old_dentry->d_inode->i_mode) && !victim_f) if (S_ISDIR(old_dentry->d_inode->i_mode) && !victim_f)
new_dir_i->i_nlink++; new_dir_i->i_nlink++;
/* Unlink the original */ /* Unlink the original */
ret = jffs2_do_unlink(c, JFFS2_INODE_INFO(old_dir_i), ret = jffs2_do_unlink(c, JFFS2_INODE_INFO(old_dir_i),
old_dentry->d_name.name, old_dentry->d_name.len, NULL, now); old_dentry->d_name.name, old_dentry->d_name.len, NULL, now);
/* We don't touch inode->i_nlink */ /* We don't touch inode->i_nlink */
......
...@@ -24,7 +24,7 @@ struct erase_priv_struct { ...@@ -24,7 +24,7 @@ struct erase_priv_struct {
struct jffs2_eraseblock *jeb; struct jffs2_eraseblock *jeb;
struct jffs2_sb_info *c; struct jffs2_sb_info *c;
}; };
#ifndef __ECOS #ifndef __ECOS
static void jffs2_erase_callback(struct erase_info *); static void jffs2_erase_callback(struct erase_info *);
#endif #endif
...@@ -71,7 +71,7 @@ static void jffs2_erase_block(struct jffs2_sb_info *c, ...@@ -71,7 +71,7 @@ static void jffs2_erase_block(struct jffs2_sb_info *c,
instr->callback = jffs2_erase_callback; instr->callback = jffs2_erase_callback;
instr->priv = (unsigned long)(&instr[1]); instr->priv = (unsigned long)(&instr[1]);
instr->fail_addr = 0xffffffff; instr->fail_addr = 0xffffffff;
((struct erase_priv_struct *)instr->priv)->jeb = jeb; ((struct erase_priv_struct *)instr->priv)->jeb = jeb;
((struct erase_priv_struct *)instr->priv)->c = c; ((struct erase_priv_struct *)instr->priv)->c = c;
...@@ -96,7 +96,7 @@ static void jffs2_erase_block(struct jffs2_sb_info *c, ...@@ -96,7 +96,7 @@ static void jffs2_erase_block(struct jffs2_sb_info *c,
return; return;
} }
if (ret == -EROFS) if (ret == -EROFS)
printk(KERN_WARNING "Erase at 0x%08x failed immediately: -EROFS. Is the sector locked?\n", jeb->offset); printk(KERN_WARNING "Erase at 0x%08x failed immediately: -EROFS. Is the sector locked?\n", jeb->offset);
else else
printk(KERN_WARNING "Erase at 0x%08x failed immediately: errno %d\n", jeb->offset, ret); printk(KERN_WARNING "Erase at 0x%08x failed immediately: errno %d\n", jeb->offset, ret);
...@@ -197,7 +197,7 @@ static void jffs2_erase_failed(struct jffs2_sb_info *c, struct jffs2_eraseblock ...@@ -197,7 +197,7 @@ static void jffs2_erase_failed(struct jffs2_sb_info *c, struct jffs2_eraseblock
c->nr_erasing_blocks--; c->nr_erasing_blocks--;
spin_unlock(&c->erase_completion_lock); spin_unlock(&c->erase_completion_lock);
wake_up(&c->erase_wait); wake_up(&c->erase_wait);
} }
#ifndef __ECOS #ifndef __ECOS
static void jffs2_erase_callback(struct erase_info *instr) static void jffs2_erase_callback(struct erase_info *instr)
...@@ -209,7 +209,7 @@ static void jffs2_erase_callback(struct erase_info *instr) ...@@ -209,7 +209,7 @@ static void jffs2_erase_callback(struct erase_info *instr)
jffs2_erase_failed(priv->c, priv->jeb, instr->fail_addr); jffs2_erase_failed(priv->c, priv->jeb, instr->fail_addr);
} else { } else {
jffs2_erase_succeeded(priv->c, priv->jeb); jffs2_erase_succeeded(priv->c, priv->jeb);
} }
kfree(instr); kfree(instr);
} }
#endif /* !__ECOS */ #endif /* !__ECOS */
...@@ -227,13 +227,13 @@ static inline void jffs2_remove_node_refs_from_ino_list(struct jffs2_sb_info *c, ...@@ -227,13 +227,13 @@ static inline void jffs2_remove_node_refs_from_ino_list(struct jffs2_sb_info *c,
/* Walk the inode's list once, removing any nodes from this eraseblock */ /* Walk the inode's list once, removing any nodes from this eraseblock */
while (1) { while (1) {
if (!(*prev)->next_in_ino) { if (!(*prev)->next_in_ino) {
/* We're looking at the jffs2_inode_cache, which is /* We're looking at the jffs2_inode_cache, which is
at the end of the linked list. Stash it and continue at the end of the linked list. Stash it and continue
from the beginning of the list */ from the beginning of the list */
ic = (struct jffs2_inode_cache *)(*prev); ic = (struct jffs2_inode_cache *)(*prev);
prev = &ic->nodes; prev = &ic->nodes;
continue; continue;
} }
if (SECTOR_ADDR((*prev)->flash_offset) == jeb->offset) { if (SECTOR_ADDR((*prev)->flash_offset) == jeb->offset) {
/* It's in the block we're erasing */ /* It's in the block we're erasing */
...@@ -267,7 +267,7 @@ static inline void jffs2_remove_node_refs_from_ino_list(struct jffs2_sb_info *c, ...@@ -267,7 +267,7 @@ static inline void jffs2_remove_node_refs_from_ino_list(struct jffs2_sb_info *c,
printk(KERN_DEBUG "After remove_node_refs_from_ino_list: \n" KERN_DEBUG); printk(KERN_DEBUG "After remove_node_refs_from_ino_list: \n" KERN_DEBUG);
this = ic->nodes; this = ic->nodes;
while(this) { while(this) {
printk( "0x%08x(%d)->", ref_offset(this), ref_flags(this)); printk( "0x%08x(%d)->", ref_offset(this), ref_flags(this));
if (++i == 5) { if (++i == 5) {
...@@ -290,7 +290,7 @@ static void jffs2_free_all_node_refs(struct jffs2_sb_info *c, struct jffs2_erase ...@@ -290,7 +290,7 @@ static void jffs2_free_all_node_refs(struct jffs2_sb_info *c, struct jffs2_erase
while(jeb->first_node) { while(jeb->first_node) {
ref = jeb->first_node; ref = jeb->first_node;
jeb->first_node = ref->next_phys; jeb->first_node = ref->next_phys;
/* Remove from the inode-list */ /* Remove from the inode-list */
if (ref->next_in_ino) if (ref->next_in_ino)
jffs2_remove_node_refs_from_ino_list(c, ref, jeb); jffs2_remove_node_refs_from_ino_list(c, ref, jeb);
...@@ -307,7 +307,7 @@ static int jffs2_block_check_erase(struct jffs2_sb_info *c, struct jffs2_erasebl ...@@ -307,7 +307,7 @@ static int jffs2_block_check_erase(struct jffs2_sb_info *c, struct jffs2_erasebl
uint32_t ofs; uint32_t ofs;
size_t retlen; size_t retlen;
int ret = -EIO; int ret = -EIO;
ebuf = kmalloc(PAGE_SIZE, GFP_KERNEL); ebuf = kmalloc(PAGE_SIZE, GFP_KERNEL);
if (!ebuf) { if (!ebuf) {
printk(KERN_WARNING "Failed to allocate page buffer for verifying erase at 0x%08x. Refiling\n", jeb->offset); printk(KERN_WARNING "Failed to allocate page buffer for verifying erase at 0x%08x. Refiling\n", jeb->offset);
...@@ -361,7 +361,7 @@ static void jffs2_mark_erased_block(struct jffs2_sb_info *c, struct jffs2_eraseb ...@@ -361,7 +361,7 @@ static void jffs2_mark_erased_block(struct jffs2_sb_info *c, struct jffs2_eraseb
case -EIO: goto filebad; case -EIO: goto filebad;
} }
/* Write the erase complete marker */ /* Write the erase complete marker */
D1(printk(KERN_DEBUG "Writing erased marker to block at 0x%08x\n", jeb->offset)); D1(printk(KERN_DEBUG "Writing erased marker to block at 0x%08x\n", jeb->offset));
bad_offset = jeb->offset; bad_offset = jeb->offset;
...@@ -399,7 +399,7 @@ static void jffs2_mark_erased_block(struct jffs2_sb_info *c, struct jffs2_eraseb ...@@ -399,7 +399,7 @@ static void jffs2_mark_erased_block(struct jffs2_sb_info *c, struct jffs2_eraseb
vecs[0].iov_base = (unsigned char *) &marker; vecs[0].iov_base = (unsigned char *) &marker;
vecs[0].iov_len = sizeof(marker); vecs[0].iov_len = sizeof(marker);
ret = jffs2_flash_direct_writev(c, vecs, 1, jeb->offset, &retlen); ret = jffs2_flash_direct_writev(c, vecs, 1, jeb->offset, &retlen);
if (ret || retlen != sizeof(marker)) { if (ret || retlen != sizeof(marker)) {
if (ret) if (ret)
printk(KERN_WARNING "Write clean marker to block at 0x%08x failed: %d\n", printk(KERN_WARNING "Write clean marker to block at 0x%08x failed: %d\n",
...@@ -416,9 +416,9 @@ static void jffs2_mark_erased_block(struct jffs2_sb_info *c, struct jffs2_eraseb ...@@ -416,9 +416,9 @@ static void jffs2_mark_erased_block(struct jffs2_sb_info *c, struct jffs2_eraseb
marker_ref->next_phys = NULL; marker_ref->next_phys = NULL;
marker_ref->flash_offset = jeb->offset | REF_NORMAL; marker_ref->flash_offset = jeb->offset | REF_NORMAL;
marker_ref->__totlen = c->cleanmarker_size; marker_ref->__totlen = c->cleanmarker_size;
jeb->first_node = jeb->last_node = marker_ref; jeb->first_node = jeb->last_node = marker_ref;
jeb->free_size = c->sector_size - c->cleanmarker_size; jeb->free_size = c->sector_size - c->cleanmarker_size;
jeb->used_size = c->cleanmarker_size; jeb->used_size = c->cleanmarker_size;
jeb->dirty_size = 0; jeb->dirty_size = 0;
......
...@@ -34,8 +34,8 @@ int jffs2_fsync(struct file *filp, struct dentry *dentry, int datasync) ...@@ -34,8 +34,8 @@ int jffs2_fsync(struct file *filp, struct dentry *dentry, int datasync)
/* Trigger GC to flush any pending writes for this inode */ /* Trigger GC to flush any pending writes for this inode */
jffs2_flush_wbuf_gc(c, inode->i_ino); jffs2_flush_wbuf_gc(c, inode->i_ino);
return 0; return 0;
} }
struct file_operations jffs2_file_operations = struct file_operations jffs2_file_operations =
...@@ -107,7 +107,7 @@ static int jffs2_readpage (struct file *filp, struct page *pg) ...@@ -107,7 +107,7 @@ static int jffs2_readpage (struct file *filp, struct page *pg)
{ {
struct jffs2_inode_info *f = JFFS2_INODE_INFO(pg->mapping->host); struct jffs2_inode_info *f = JFFS2_INODE_INFO(pg->mapping->host);
int ret; int ret;
down(&f->sem); down(&f->sem);
ret = jffs2_do_readpage_unlock(pg->mapping->host, pg); ret = jffs2_do_readpage_unlock(pg->mapping->host, pg);
up(&f->sem); up(&f->sem);
...@@ -130,7 +130,7 @@ static int jffs2_prepare_write (struct file *filp, struct page *pg, ...@@ -130,7 +130,7 @@ static int jffs2_prepare_write (struct file *filp, struct page *pg,
struct jffs2_raw_inode ri; struct jffs2_raw_inode ri;
struct jffs2_full_dnode *fn; struct jffs2_full_dnode *fn;
uint32_t phys_ofs, alloc_len; uint32_t phys_ofs, alloc_len;
D1(printk(KERN_DEBUG "Writing new hole frag 0x%x-0x%x between current EOF and new page\n", D1(printk(KERN_DEBUG "Writing new hole frag 0x%x-0x%x between current EOF and new page\n",
(unsigned int)inode->i_size, pageofs)); (unsigned int)inode->i_size, pageofs));
...@@ -160,7 +160,7 @@ static int jffs2_prepare_write (struct file *filp, struct page *pg, ...@@ -160,7 +160,7 @@ static int jffs2_prepare_write (struct file *filp, struct page *pg,
ri.compr = JFFS2_COMPR_ZERO; ri.compr = JFFS2_COMPR_ZERO;
ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8)); ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8));
ri.data_crc = cpu_to_je32(0); ri.data_crc = cpu_to_je32(0);
fn = jffs2_write_dnode(c, f, &ri, NULL, 0, phys_ofs, ALLOC_NORMAL); fn = jffs2_write_dnode(c, f, &ri, NULL, 0, phys_ofs, ALLOC_NORMAL);
if (IS_ERR(fn)) { if (IS_ERR(fn)) {
...@@ -187,7 +187,7 @@ static int jffs2_prepare_write (struct file *filp, struct page *pg, ...@@ -187,7 +187,7 @@ static int jffs2_prepare_write (struct file *filp, struct page *pg,
inode->i_size = pageofs; inode->i_size = pageofs;
up(&f->sem); up(&f->sem);
} }
/* Read in the page if it wasn't already present, unless it's a whole page */ /* Read in the page if it wasn't already present, unless it's a whole page */
if (!PageUptodate(pg) && (start || end < PAGE_CACHE_SIZE)) { if (!PageUptodate(pg) && (start || end < PAGE_CACHE_SIZE)) {
down(&f->sem); down(&f->sem);
...@@ -218,7 +218,7 @@ static int jffs2_commit_write (struct file *filp, struct page *pg, ...@@ -218,7 +218,7 @@ static int jffs2_commit_write (struct file *filp, struct page *pg,
if (!start && end == PAGE_CACHE_SIZE) { if (!start && end == PAGE_CACHE_SIZE) {
/* We need to avoid deadlock with page_cache_read() in /* We need to avoid deadlock with page_cache_read() in
jffs2_garbage_collect_pass(). So we have to mark the jffs2_garbage_collect_pass(). So we have to mark the
page up to date, to prevent page_cache_read() from page up to date, to prevent page_cache_read() from
trying to re-lock it. */ trying to re-lock it. */
SetPageUptodate(pg); SetPageUptodate(pg);
} }
...@@ -252,7 +252,7 @@ static int jffs2_commit_write (struct file *filp, struct page *pg, ...@@ -252,7 +252,7 @@ static int jffs2_commit_write (struct file *filp, struct page *pg,
/* There was an error writing. */ /* There was an error writing. */
SetPageError(pg); SetPageError(pg);
} }
/* Adjust writtenlen for the padding we did, so we don't confuse our caller */ /* Adjust writtenlen for the padding we did, so we don't confuse our caller */
if (writtenlen < (start&3)) if (writtenlen < (start&3))
writtenlen = 0; writtenlen = 0;
...@@ -263,7 +263,7 @@ static int jffs2_commit_write (struct file *filp, struct page *pg, ...@@ -263,7 +263,7 @@ static int jffs2_commit_write (struct file *filp, struct page *pg,
if (inode->i_size < (pg->index << PAGE_CACHE_SHIFT) + start + writtenlen) { if (inode->i_size < (pg->index << PAGE_CACHE_SHIFT) + start + writtenlen) {
inode->i_size = (pg->index << PAGE_CACHE_SHIFT) + start + writtenlen; inode->i_size = (pg->index << PAGE_CACHE_SHIFT) + start + writtenlen;
inode->i_blocks = (inode->i_size + 511) >> 9; inode->i_blocks = (inode->i_size + 511) >> 9;
inode->i_ctime = inode->i_mtime = ITIME(je32_to_cpu(ri->ctime)); inode->i_ctime = inode->i_mtime = ITIME(je32_to_cpu(ri->ctime));
} }
} }
...@@ -272,7 +272,7 @@ static int jffs2_commit_write (struct file *filp, struct page *pg, ...@@ -272,7 +272,7 @@ static int jffs2_commit_write (struct file *filp, struct page *pg,
if (start+writtenlen < end) { if (start+writtenlen < end) {
/* generic_file_write has written more to the page cache than we've /* generic_file_write has written more to the page cache than we've
actually written to the medium. Mark the page !Uptodate so that actually written to the medium. Mark the page !Uptodate so that
it gets reread */ it gets reread */
D1(printk(KERN_DEBUG "jffs2_commit_write(): Not all bytes written. Marking page !uptodate\n")); D1(printk(KERN_DEBUG "jffs2_commit_write(): Not all bytes written. Marking page !uptodate\n"));
SetPageError(pg); SetPageError(pg);
......
...@@ -40,7 +40,7 @@ static int jffs2_do_setattr (struct inode *inode, struct iattr *iattr) ...@@ -40,7 +40,7 @@ static int jffs2_do_setattr (struct inode *inode, struct iattr *iattr)
int ret; int ret;
D1(printk(KERN_DEBUG "jffs2_setattr(): ino #%lu\n", inode->i_ino)); D1(printk(KERN_DEBUG "jffs2_setattr(): ino #%lu\n", inode->i_ino));
ret = inode_change_ok(inode, iattr); ret = inode_change_ok(inode, iattr);
if (ret) if (ret)
return ret; return ret;
/* Special cases - we don't want more than one data node /* Special cases - we don't want more than one data node
...@@ -73,7 +73,7 @@ static int jffs2_do_setattr (struct inode *inode, struct iattr *iattr) ...@@ -73,7 +73,7 @@ static int jffs2_do_setattr (struct inode *inode, struct iattr *iattr)
kfree(mdata); kfree(mdata);
return -ENOMEM; return -ENOMEM;
} }
ret = jffs2_reserve_space(c, sizeof(*ri) + mdatalen, &phys_ofs, &alloclen, ret = jffs2_reserve_space(c, sizeof(*ri) + mdatalen, &phys_ofs, &alloclen,
ALLOC_NORMAL, JFFS2_SUMMARY_INODE_SIZE); ALLOC_NORMAL, JFFS2_SUMMARY_INODE_SIZE);
if (ret) { if (ret) {
...@@ -84,7 +84,7 @@ static int jffs2_do_setattr (struct inode *inode, struct iattr *iattr) ...@@ -84,7 +84,7 @@ static int jffs2_do_setattr (struct inode *inode, struct iattr *iattr)
} }
down(&f->sem); down(&f->sem);
ivalid = iattr->ia_valid; ivalid = iattr->ia_valid;
ri->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); ri->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
ri->nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE); ri->nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
ri->totlen = cpu_to_je32(sizeof(*ri) + mdatalen); ri->totlen = cpu_to_je32(sizeof(*ri) + mdatalen);
...@@ -100,7 +100,7 @@ static int jffs2_do_setattr (struct inode *inode, struct iattr *iattr) ...@@ -100,7 +100,7 @@ static int jffs2_do_setattr (struct inode *inode, struct iattr *iattr)
if (iattr->ia_mode & S_ISGID && if (iattr->ia_mode & S_ISGID &&
!in_group_p(je16_to_cpu(ri->gid)) && !capable(CAP_FSETID)) !in_group_p(je16_to_cpu(ri->gid)) && !capable(CAP_FSETID))
ri->mode = cpu_to_jemode(iattr->ia_mode & ~S_ISGID); ri->mode = cpu_to_jemode(iattr->ia_mode & ~S_ISGID);
else else
ri->mode = cpu_to_jemode(iattr->ia_mode); ri->mode = cpu_to_jemode(iattr->ia_mode);
else else
ri->mode = cpu_to_jemode(inode->i_mode); ri->mode = cpu_to_jemode(inode->i_mode);
...@@ -129,7 +129,7 @@ static int jffs2_do_setattr (struct inode *inode, struct iattr *iattr) ...@@ -129,7 +129,7 @@ static int jffs2_do_setattr (struct inode *inode, struct iattr *iattr)
new_metadata = jffs2_write_dnode(c, f, ri, mdata, mdatalen, phys_ofs, ALLOC_NORMAL); new_metadata = jffs2_write_dnode(c, f, ri, mdata, mdatalen, phys_ofs, ALLOC_NORMAL);
if (S_ISLNK(inode->i_mode)) if (S_ISLNK(inode->i_mode))
kfree(mdata); kfree(mdata);
if (IS_ERR(new_metadata)) { if (IS_ERR(new_metadata)) {
jffs2_complete_reservation(c); jffs2_complete_reservation(c);
jffs2_free_raw_inode(ri); jffs2_free_raw_inode(ri);
...@@ -167,7 +167,7 @@ static int jffs2_do_setattr (struct inode *inode, struct iattr *iattr) ...@@ -167,7 +167,7 @@ static int jffs2_do_setattr (struct inode *inode, struct iattr *iattr)
jffs2_complete_reservation(c); jffs2_complete_reservation(c);
/* We have to do the vmtruncate() without f->sem held, since /* We have to do the vmtruncate() without f->sem held, since
some pages may be locked and waiting for it in readpage(). some pages may be locked and waiting for it in readpage().
We are protected from a simultaneous write() extending i_size We are protected from a simultaneous write() extending i_size
back past iattr->ia_size, because do_truncate() holds the back past iattr->ia_size, because do_truncate() holds the
generic inode semaphore. */ generic inode semaphore. */
...@@ -210,12 +210,12 @@ int jffs2_statfs(struct super_block *sb, struct kstatfs *buf) ...@@ -210,12 +210,12 @@ int jffs2_statfs(struct super_block *sb, struct kstatfs *buf)
void jffs2_clear_inode (struct inode *inode) void jffs2_clear_inode (struct inode *inode)
{ {
/* We can forget about this inode for now - drop all /* We can forget about this inode for now - drop all
* the nodelists associated with it, etc. * the nodelists associated with it, etc.
*/ */
struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb); struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode); struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
D1(printk(KERN_DEBUG "jffs2_clear_inode(): ino #%lu mode %o\n", inode->i_ino, inode->i_mode)); D1(printk(KERN_DEBUG "jffs2_clear_inode(): ino #%lu mode %o\n", inode->i_ino, inode->i_mode));
jffs2_do_clear_inode(c, f); jffs2_do_clear_inode(c, f);
...@@ -234,7 +234,7 @@ void jffs2_read_inode (struct inode *inode) ...@@ -234,7 +234,7 @@ void jffs2_read_inode (struct inode *inode)
c = JFFS2_SB_INFO(inode->i_sb); c = JFFS2_SB_INFO(inode->i_sb);
jffs2_init_inode_info(f); jffs2_init_inode_info(f);
ret = jffs2_do_read_inode(c, f, inode->i_ino, &latest_node); ret = jffs2_do_read_inode(c, f, inode->i_ino, &latest_node);
if (ret) { if (ret) {
...@@ -254,14 +254,14 @@ void jffs2_read_inode (struct inode *inode) ...@@ -254,14 +254,14 @@ void jffs2_read_inode (struct inode *inode)
inode->i_blksize = PAGE_SIZE; inode->i_blksize = PAGE_SIZE;
inode->i_blocks = (inode->i_size + 511) >> 9; inode->i_blocks = (inode->i_size + 511) >> 9;
switch (inode->i_mode & S_IFMT) { switch (inode->i_mode & S_IFMT) {
jint16_t rdev; jint16_t rdev;
case S_IFLNK: case S_IFLNK:
inode->i_op = &jffs2_symlink_inode_operations; inode->i_op = &jffs2_symlink_inode_operations;
break; break;
case S_IFDIR: case S_IFDIR:
{ {
struct jffs2_full_dirent *fd; struct jffs2_full_dirent *fd;
...@@ -298,7 +298,7 @@ void jffs2_read_inode (struct inode *inode) ...@@ -298,7 +298,7 @@ void jffs2_read_inode (struct inode *inode)
jffs2_do_clear_inode(c, f); jffs2_do_clear_inode(c, f);
make_bad_inode(inode); make_bad_inode(inode);
return; return;
} }
case S_IFSOCK: case S_IFSOCK:
case S_IFIFO: case S_IFIFO:
...@@ -354,11 +354,11 @@ int jffs2_remount_fs (struct super_block *sb, int *flags, char *data) ...@@ -354,11 +354,11 @@ int jffs2_remount_fs (struct super_block *sb, int *flags, char *data)
down(&c->alloc_sem); down(&c->alloc_sem);
jffs2_flush_wbuf_pad(c); jffs2_flush_wbuf_pad(c);
up(&c->alloc_sem); up(&c->alloc_sem);
} }
if (!(*flags & MS_RDONLY)) if (!(*flags & MS_RDONLY))
jffs2_start_garbage_collect_thread(c); jffs2_start_garbage_collect_thread(c);
*flags |= MS_NOATIME; *flags |= MS_NOATIME;
return 0; return 0;
...@@ -392,9 +392,9 @@ struct inode *jffs2_new_inode (struct inode *dir_i, int mode, struct jffs2_raw_i ...@@ -392,9 +392,9 @@ struct inode *jffs2_new_inode (struct inode *dir_i, int mode, struct jffs2_raw_i
D1(printk(KERN_DEBUG "jffs2_new_inode(): dir_i %ld, mode 0x%x\n", dir_i->i_ino, mode)); D1(printk(KERN_DEBUG "jffs2_new_inode(): dir_i %ld, mode 0x%x\n", dir_i->i_ino, mode));
c = JFFS2_SB_INFO(sb); c = JFFS2_SB_INFO(sb);
inode = new_inode(sb); inode = new_inode(sb);
if (!inode) if (!inode)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
...@@ -458,14 +458,14 @@ int jffs2_do_fill_super(struct super_block *sb, void *data, int silent) ...@@ -458,14 +458,14 @@ int jffs2_do_fill_super(struct super_block *sb, void *data, int silent)
#endif #endif
c->flash_size = c->mtd->size; c->flash_size = c->mtd->size;
c->sector_size = c->mtd->erasesize; c->sector_size = c->mtd->erasesize;
blocks = c->flash_size / c->sector_size; blocks = c->flash_size / c->sector_size;
/* /*
* Size alignment check * Size alignment check
*/ */
if ((c->sector_size * blocks) != c->flash_size) { if ((c->sector_size * blocks) != c->flash_size) {
c->flash_size = c->sector_size * blocks; c->flash_size = c->sector_size * blocks;
printk(KERN_INFO "jffs2: Flash size not aligned to erasesize, reducing to %dKiB\n", printk(KERN_INFO "jffs2: Flash size not aligned to erasesize, reducing to %dKiB\n",
c->flash_size / 1024); c->flash_size / 1024);
} }
...@@ -543,16 +543,16 @@ struct jffs2_inode_info *jffs2_gc_fetch_inode(struct jffs2_sb_info *c, ...@@ -543,16 +543,16 @@ struct jffs2_inode_info *jffs2_gc_fetch_inode(struct jffs2_sb_info *c,
struct jffs2_inode_cache *ic; struct jffs2_inode_cache *ic;
if (!nlink) { if (!nlink) {
/* The inode has zero nlink but its nodes weren't yet marked /* The inode has zero nlink but its nodes weren't yet marked
obsolete. This has to be because we're still waiting for obsolete. This has to be because we're still waiting for
the final (close() and) iput() to happen. the final (close() and) iput() to happen.
There's a possibility that the final iput() could have There's a possibility that the final iput() could have
happened while we were contemplating. In order to ensure happened while we were contemplating. In order to ensure
that we don't cause a new read_inode() (which would fail) that we don't cause a new read_inode() (which would fail)
for the inode in question, we use ilookup() in this case for the inode in question, we use ilookup() in this case
instead of iget(). instead of iget().
The nlink can't _become_ zero at this point because we're The nlink can't _become_ zero at this point because we're
holding the alloc_sem, and jffs2_do_unlink() would also holding the alloc_sem, and jffs2_do_unlink() would also
need that while decrementing nlink on any inode. need that while decrementing nlink on any inode.
*/ */
...@@ -599,19 +599,19 @@ struct jffs2_inode_info *jffs2_gc_fetch_inode(struct jffs2_sb_info *c, ...@@ -599,19 +599,19 @@ struct jffs2_inode_info *jffs2_gc_fetch_inode(struct jffs2_sb_info *c,
return JFFS2_INODE_INFO(inode); return JFFS2_INODE_INFO(inode);
} }
unsigned char *jffs2_gc_fetch_page(struct jffs2_sb_info *c, unsigned char *jffs2_gc_fetch_page(struct jffs2_sb_info *c,
struct jffs2_inode_info *f, struct jffs2_inode_info *f,
unsigned long offset, unsigned long offset,
unsigned long *priv) unsigned long *priv)
{ {
struct inode *inode = OFNI_EDONI_2SFFJ(f); struct inode *inode = OFNI_EDONI_2SFFJ(f);
struct page *pg; struct page *pg;
pg = read_cache_page(inode->i_mapping, offset >> PAGE_CACHE_SHIFT, pg = read_cache_page(inode->i_mapping, offset >> PAGE_CACHE_SHIFT,
(void *)jffs2_do_readpage_unlock, inode); (void *)jffs2_do_readpage_unlock, inode);
if (IS_ERR(pg)) if (IS_ERR(pg))
return (void *)pg; return (void *)pg;
*priv = (unsigned long)pg; *priv = (unsigned long)pg;
return kmap(pg); return kmap(pg);
} }
...@@ -628,7 +628,7 @@ void jffs2_gc_release_page(struct jffs2_sb_info *c, ...@@ -628,7 +628,7 @@ void jffs2_gc_release_page(struct jffs2_sb_info *c,
static int jffs2_flash_setup(struct jffs2_sb_info *c) { static int jffs2_flash_setup(struct jffs2_sb_info *c) {
int ret = 0; int ret = 0;
if (jffs2_cleanmarker_oob(c)) { if (jffs2_cleanmarker_oob(c)) {
/* NAND flash... do setup accordingly */ /* NAND flash... do setup accordingly */
ret = jffs2_nand_flash_setup(c); ret = jffs2_nand_flash_setup(c);
...@@ -642,7 +642,7 @@ static int jffs2_flash_setup(struct jffs2_sb_info *c) { ...@@ -642,7 +642,7 @@ static int jffs2_flash_setup(struct jffs2_sb_info *c) {
if (ret) if (ret)
return ret; return ret;
} }
/* and Dataflash */ /* and Dataflash */
if (jffs2_dataflash(c)) { if (jffs2_dataflash(c)) {
ret = jffs2_dataflash_setup(c); ret = jffs2_dataflash_setup(c);
...@@ -670,7 +670,7 @@ void jffs2_flash_cleanup(struct jffs2_sb_info *c) { ...@@ -670,7 +670,7 @@ void jffs2_flash_cleanup(struct jffs2_sb_info *c) {
if (jffs2_nor_ecc(c)) { if (jffs2_nor_ecc(c)) {
jffs2_nor_ecc_flash_cleanup(c); jffs2_nor_ecc_flash_cleanup(c);
} }
/* and DataFlash */ /* and DataFlash */
if (jffs2_dataflash(c)) { if (jffs2_dataflash(c)) {
jffs2_dataflash_cleanup(c); jffs2_dataflash_cleanup(c);
......
This diff is collapsed.
/* This file provides the bit-probabilities for the input file */ /* This file provides the bit-probabilities for the input file */
#define BIT_DIVIDER 629 #define BIT_DIVIDER 629
static int bits[9] = { 179,167,183,165,159,198,178,119,}; /* ia32 .so files */ static int bits[9] = { 179,167,183,165,159,198,178,119,}; /* ia32 .so files */
#define BIT_DIVIDER_MIPS 1043 #define BIT_DIVIDER_MIPS 1043
static int bits_mips[8] = { 277,249,290,267,229,341,212,241}; /* mips32 */ static int bits_mips[8] = { 277,249,290,267,229,341,212,241}; /* mips32 */
...@@ -7,17 +7,17 @@ ...@@ -7,17 +7,17 @@
* *
* For licensing information, see the file 'LICENCE' in this directory. * For licensing information, see the file 'LICENCE' in this directory.
* *
* $Id: ioctl.c,v 1.9 2004/11/16 20:36:11 dwmw2 Exp $ * $Id: ioctl.c,v 1.10 2005/11/07 11:14:40 gleixner Exp $
* *
*/ */
#include <linux/fs.h> #include <linux/fs.h>
int jffs2_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, int jffs2_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
unsigned long arg) unsigned long arg)
{ {
/* Later, this will provide for lsattr.jffs2 and chattr.jffs2, which /* Later, this will provide for lsattr.jffs2 and chattr.jffs2, which
will include compression support etc. */ will include compression support etc. */
return -ENOTTY; return -ENOTTY;
} }
...@@ -7,7 +7,7 @@ ...@@ -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: malloc.c,v 1.30 2005/09/20 14:27:34 dedekind Exp $ * $Id: malloc.c,v 1.31 2005/11/07 11:14:40 gleixner Exp $
* *
*/ */
...@@ -29,7 +29,7 @@ static kmem_cache_t *inode_cache_slab; ...@@ -29,7 +29,7 @@ static kmem_cache_t *inode_cache_slab;
int __init jffs2_create_slab_caches(void) int __init jffs2_create_slab_caches(void)
{ {
full_dnode_slab = kmem_cache_create("jffs2_full_dnode", full_dnode_slab = kmem_cache_create("jffs2_full_dnode",
sizeof(struct jffs2_full_dnode), sizeof(struct jffs2_full_dnode),
0, 0, NULL, NULL); 0, 0, NULL, NULL);
if (!full_dnode_slab) if (!full_dnode_slab)
......
This diff is collapsed.
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
#define je16_to_cpu(x) (le16_to_cpu(x.v16)) #define je16_to_cpu(x) (le16_to_cpu(x.v16))
#define je32_to_cpu(x) (le32_to_cpu(x.v32)) #define je32_to_cpu(x) (le32_to_cpu(x.v32))
#define jemode_to_cpu(x) (le32_to_cpu(jffs2_to_os_mode((x).m))) #define jemode_to_cpu(x) (le32_to_cpu(jffs2_to_os_mode((x).m)))
#else #else
#error wibble #error wibble
#endif #endif
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
/* /*
This is all we need to keep in-core for each raw node during normal This is all we need to keep in-core for each raw node during normal
operation. As and when we do read_inode on a particular inode, we can operation. As and when we do read_inode on a particular inode, we can
scan the nodes which are listed for it and build up a proper map of scan the nodes which are listed for it and build up a proper map of
which nodes are currently valid. JFFSv1 always used to keep that whole which nodes are currently valid. JFFSv1 always used to keep that whole
map in core for each inode. map in core for each inode.
*/ */
...@@ -85,7 +85,7 @@ struct jffs2_raw_node_ref ...@@ -85,7 +85,7 @@ struct jffs2_raw_node_ref
/* flash_offset & 3 always has to be zero, because nodes are /* flash_offset & 3 always has to be zero, because nodes are
always aligned at 4 bytes. So we have a couple of extra bits always aligned at 4 bytes. So we have a couple of extra bits
to play with, which indicate the node's status; see below: */ to play with, which indicate the node's status; see below: */
#define REF_UNCHECKED 0 /* We haven't yet checked the CRC or built its inode */ #define REF_UNCHECKED 0 /* We haven't yet checked the CRC or built its inode */
#define REF_OBSOLETE 1 /* Obsolete, can be completely ignored */ #define REF_OBSOLETE 1 /* Obsolete, can be completely ignored */
#define REF_PRISTINE 2 /* Completely clean. GC without looking */ #define REF_PRISTINE 2 /* Completely clean. GC without looking */
...@@ -98,7 +98,7 @@ struct jffs2_raw_node_ref ...@@ -98,7 +98,7 @@ struct jffs2_raw_node_ref
/* For each inode in the filesystem, we need to keep a record of /* For each inode in the filesystem, we need to keep a record of
nlink, because it would be a PITA to scan the whole directory tree nlink, because it would be a PITA to scan the whole directory tree
at read_inode() time to calculate it, and to keep sufficient information at read_inode() time to calculate it, and to keep sufficient information
in the raw_node_ref (basically both parent and child inode number for in the raw_node_ref (basically both parent and child inode number for
dirent nodes) would take more space than this does. We also keep dirent nodes) would take more space than this does. We also keep
a pointer to the first physical node which is part of this inode, too. a pointer to the first physical node which is part of this inode, too.
*/ */
...@@ -128,7 +128,7 @@ struct jffs2_inode_cache { ...@@ -128,7 +128,7 @@ struct jffs2_inode_cache {
#define INOCACHE_HASHSIZE 128 #define INOCACHE_HASHSIZE 128
/* /*
Larger representation of a raw node, kept in-core only when the Larger representation of a raw node, kept in-core only when the
struct inode for this particular ino is instantiated. struct inode for this particular ino is instantiated.
*/ */
...@@ -138,11 +138,11 @@ struct jffs2_full_dnode ...@@ -138,11 +138,11 @@ struct jffs2_full_dnode
uint32_t ofs; /* The offset to which the data of this node belongs */ uint32_t ofs; /* The offset to which the data of this node belongs */
uint32_t size; uint32_t size;
uint32_t frags; /* Number of fragments which currently refer uint32_t frags; /* Number of fragments which currently refer
to this node. When this reaches zero, to this node. When this reaches zero,
the node is obsolete. */ the node is obsolete. */
}; };
/* /*
Even larger representation of a raw node, kept in-core only while Even larger representation of a raw node, kept in-core only while
we're actually building up the original map of which nodes go where, we're actually building up the original map of which nodes go where,
in read_inode() in read_inode()
...@@ -155,7 +155,7 @@ struct jffs2_tmp_dnode_info ...@@ -155,7 +155,7 @@ struct jffs2_tmp_dnode_info
uint32_t data_crc; uint32_t data_crc;
uint32_t partial_crc; uint32_t partial_crc;
uint32_t csize; uint32_t csize;
}; };
struct jffs2_full_dirent struct jffs2_full_dirent
{ {
...@@ -169,7 +169,7 @@ struct jffs2_full_dirent ...@@ -169,7 +169,7 @@ struct jffs2_full_dirent
}; };
/* /*
Fragments - used to build a map of which raw node to obtain Fragments - used to build a map of which raw node to obtain
data from for each part of the ino data from for each part of the ino
*/ */
struct jffs2_node_frag struct jffs2_node_frag
...@@ -209,7 +209,7 @@ static inline uint32_t __ref_totlen(struct jffs2_sb_info *c, ...@@ -209,7 +209,7 @@ static inline uint32_t __ref_totlen(struct jffs2_sb_info *c,
struct jffs2_raw_node_ref *ref) struct jffs2_raw_node_ref *ref)
{ {
uint32_t ref_end; uint32_t ref_end;
if (ref->next_phys) if (ref->next_phys)
ref_end = ref_offset(ref->next_phys); ref_end = ref_offset(ref->next_phys);
else { else {
...@@ -264,7 +264,7 @@ static inline uint32_t ref_totlen(struct jffs2_sb_info *c, ...@@ -264,7 +264,7 @@ static inline uint32_t ref_totlen(struct jffs2_sb_info *c,
#define VERYDIRTY(c, size) ((size) >= ((c)->sector_size / 2)) #define VERYDIRTY(c, size) ((size) >= ((c)->sector_size / 2))
/* check if dirty space is more than 255 Byte */ /* check if dirty space is more than 255 Byte */
#define ISDIRTY(size) ((size) > sizeof (struct jffs2_raw_inode) + JFFS2_MIN_DATA_LEN) #define ISDIRTY(size) ((size) > sizeof (struct jffs2_raw_inode) + JFFS2_MIN_DATA_LEN)
#define PAD(x) (((x)+3)&~3) #define PAD(x) (((x)+3)&~3)
...@@ -341,7 +341,7 @@ int jffs2_do_new_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, uint ...@@ -341,7 +341,7 @@ int jffs2_do_new_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, uint
struct jffs2_full_dnode *jffs2_write_dnode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, struct jffs2_raw_inode *ri, const unsigned char *data, uint32_t datalen, uint32_t flash_ofs, int alloc_mode); struct jffs2_full_dnode *jffs2_write_dnode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, struct jffs2_raw_inode *ri, const unsigned char *data, uint32_t datalen, uint32_t flash_ofs, int alloc_mode);
struct jffs2_full_dirent *jffs2_write_dirent(struct jffs2_sb_info *c, struct jffs2_inode_info *f, struct jffs2_raw_dirent *rd, const unsigned char *name, uint32_t namelen, uint32_t flash_ofs, int alloc_mode); struct jffs2_full_dirent *jffs2_write_dirent(struct jffs2_sb_info *c, struct jffs2_inode_info *f, struct jffs2_raw_dirent *rd, const unsigned char *name, uint32_t namelen, uint32_t flash_ofs, int alloc_mode);
int jffs2_write_inode_range(struct jffs2_sb_info *c, struct jffs2_inode_info *f, int jffs2_write_inode_range(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
struct jffs2_raw_inode *ri, unsigned char *buf, struct jffs2_raw_inode *ri, unsigned char *buf,
uint32_t offset, uint32_t writelen, uint32_t *retlen); uint32_t offset, uint32_t writelen, uint32_t *retlen);
int jffs2_do_create(struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f, struct jffs2_inode_info *f, struct jffs2_raw_inode *ri, const char *name, int namelen); int jffs2_do_create(struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f, struct jffs2_inode_info *f, struct jffs2_raw_inode *ri, const char *name, int namelen);
int jffs2_do_unlink(struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f, const char *name, int namelen, struct jffs2_inode_info *dead_f, uint32_t time); int jffs2_do_unlink(struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f, const char *name, int namelen, struct jffs2_inode_info *dead_f, uint32_t time);
...@@ -349,7 +349,7 @@ int jffs2_do_link (struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f, uint ...@@ -349,7 +349,7 @@ int jffs2_do_link (struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f, uint
/* readinode.c */ /* readinode.c */
int jffs2_do_read_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, int jffs2_do_read_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
uint32_t ino, struct jffs2_raw_inode *latest_node); uint32_t ino, struct jffs2_raw_inode *latest_node);
int jffs2_do_crccheck_inode(struct jffs2_sb_info *c, struct jffs2_inode_cache *ic); int jffs2_do_crccheck_inode(struct jffs2_sb_info *c, struct jffs2_inode_cache *ic);
void jffs2_do_clear_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f); void jffs2_do_clear_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f);
......
...@@ -88,12 +88,12 @@ int jffs2_reserve_space(struct jffs2_sb_info *c, uint32_t minsize, uint32_t *ofs ...@@ -88,12 +88,12 @@ int jffs2_reserve_space(struct jffs2_sb_info *c, uint32_t minsize, uint32_t *ofs
up(&c->alloc_sem); up(&c->alloc_sem);
return -ENOSPC; return -ENOSPC;
} }
/* Calc possibly available space. Possibly available means that we /* Calc possibly available space. Possibly available means that we
* don't know, if unchecked size contains obsoleted nodes, which could give us some * don't know, if unchecked size contains obsoleted nodes, which could give us some
* more usable space. This will affect the sum only once, as gc first finishes checking * more usable space. This will affect the sum only once, as gc first finishes checking
* of nodes. * of nodes.
+ Return -ENOSPC, if the maximum possibly available space is less or equal than + Return -ENOSPC, if the maximum possibly available space is less or equal than
* blocksneeded * sector_size. * blocksneeded * sector_size.
* This blocks endless gc looping on a filesystem, which is nearly full, even if * This blocks endless gc looping on a filesystem, which is nearly full, even if
* the check above passes. * the check above passes.
...@@ -118,7 +118,7 @@ int jffs2_reserve_space(struct jffs2_sb_info *c, uint32_t minsize, uint32_t *ofs ...@@ -118,7 +118,7 @@ int jffs2_reserve_space(struct jffs2_sb_info *c, uint32_t minsize, uint32_t *ofs
c->nr_free_blocks, c->nr_erasing_blocks, c->free_size, c->dirty_size, c->wasted_size, c->used_size, c->erasing_size, c->bad_size, c->nr_free_blocks, c->nr_erasing_blocks, c->free_size, c->dirty_size, c->wasted_size, c->used_size, c->erasing_size, c->bad_size,
c->free_size + c->dirty_size + c->wasted_size + c->used_size + c->erasing_size + c->bad_size, c->flash_size)); c->free_size + c->dirty_size + c->wasted_size + c->used_size + c->erasing_size + c->bad_size, c->flash_size));
spin_unlock(&c->erase_completion_lock); spin_unlock(&c->erase_completion_lock);
ret = jffs2_garbage_collect_pass(c); ret = jffs2_garbage_collect_pass(c);
if (ret) if (ret)
return ret; return ret;
...@@ -183,7 +183,7 @@ static void jffs2_close_nextblock(struct jffs2_sb_info *c, struct jffs2_eraseblo ...@@ -183,7 +183,7 @@ static void jffs2_close_nextblock(struct jffs2_sb_info *c, struct jffs2_eraseblo
jeb->offset, jeb->free_size, jeb->dirty_size, jeb->used_size)); jeb->offset, jeb->free_size, jeb->dirty_size, jeb->used_size));
list_add_tail(&jeb->list, &c->dirty_list); list_add_tail(&jeb->list, &c->dirty_list);
} }
} else { } else {
D1(printk(KERN_DEBUG "Adding full erase block at 0x%08x to clean_list (free 0x%08x, dirty 0x%08x, used 0x%08x\n", D1(printk(KERN_DEBUG "Adding full erase block at 0x%08x to clean_list (free 0x%08x, dirty 0x%08x, used 0x%08x\n",
jeb->offset, jeb->free_size, jeb->dirty_size, jeb->used_size)); jeb->offset, jeb->free_size, jeb->dirty_size, jeb->used_size));
list_add_tail(&jeb->list, &c->clean_list); list_add_tail(&jeb->list, &c->clean_list);
...@@ -197,7 +197,7 @@ static void jffs2_close_nextblock(struct jffs2_sb_info *c, struct jffs2_eraseblo ...@@ -197,7 +197,7 @@ static void jffs2_close_nextblock(struct jffs2_sb_info *c, struct jffs2_eraseblo
static int jffs2_find_nextblock(struct jffs2_sb_info *c) static int jffs2_find_nextblock(struct jffs2_sb_info *c)
{ {
struct list_head *next; struct list_head *next;
/* Take the next block off the 'free' list */ /* Take the next block off the 'free' list */
if (list_empty(&c->free_list)) { if (list_empty(&c->free_list)) {
...@@ -229,8 +229,8 @@ static int jffs2_find_nextblock(struct jffs2_sb_info *c) ...@@ -229,8 +229,8 @@ static int jffs2_find_nextblock(struct jffs2_sb_info *c)
if (!c->nr_erasing_blocks) { if (!c->nr_erasing_blocks) {
/* Ouch. We're in GC, or we wouldn't have got here. /* Ouch. We're in GC, or we wouldn't have got here.
And there's no space left. At all. */ And there's no space left. At all. */
printk(KERN_CRIT "Argh. No free space left for GC. nr_erasing_blocks is %d. nr_free_blocks is %d. (erasableempty: %s, erasingempty: %s, erasependingempty: %s)\n", printk(KERN_CRIT "Argh. No free space left for GC. nr_erasing_blocks is %d. nr_free_blocks is %d. (erasableempty: %s, erasingempty: %s, erasependingempty: %s)\n",
c->nr_erasing_blocks, c->nr_free_blocks, list_empty(&c->erasable_list)?"yes":"no", c->nr_erasing_blocks, c->nr_free_blocks, list_empty(&c->erasable_list)?"yes":"no",
list_empty(&c->erasing_list)?"yes":"no", list_empty(&c->erase_pending_list)?"yes":"no"); list_empty(&c->erasing_list)?"yes":"no", list_empty(&c->erase_pending_list)?"yes":"no");
return -ENOSPC; return -ENOSPC;
} }
...@@ -250,7 +250,7 @@ static int jffs2_find_nextblock(struct jffs2_sb_info *c) ...@@ -250,7 +250,7 @@ static int jffs2_find_nextblock(struct jffs2_sb_info *c)
list_del(next); list_del(next);
c->nextblock = list_entry(next, struct jffs2_eraseblock, list); c->nextblock = list_entry(next, struct jffs2_eraseblock, list);
c->nr_free_blocks--; c->nr_free_blocks--;
jffs2_sum_reset_collected(c->summary); /* reset collected summary */ jffs2_sum_reset_collected(c->summary); /* reset collected summary */
D1(printk(KERN_DEBUG "jffs2_find_nextblock(): new nextblock = 0x%08x\n", c->nextblock->offset)); D1(printk(KERN_DEBUG "jffs2_find_nextblock(): new nextblock = 0x%08x\n", c->nextblock->offset));
...@@ -354,9 +354,9 @@ static int jffs2_do_reserve_space(struct jffs2_sb_info *c, uint32_t minsize, uin ...@@ -354,9 +354,9 @@ static int jffs2_do_reserve_space(struct jffs2_sb_info *c, uint32_t minsize, uin
if (c->cleanmarker_size && jeb->used_size == c->cleanmarker_size && if (c->cleanmarker_size && jeb->used_size == c->cleanmarker_size &&
!jeb->first_node->next_in_ino) { !jeb->first_node->next_in_ino) {
/* Only node in it beforehand was a CLEANMARKER node (we think). /* Only node in it beforehand was a CLEANMARKER node (we think).
So mark it obsolete now that there's going to be another node So mark it obsolete now that there's going to be another node
in the block. This will reduce used_size to zero but We've in the block. This will reduce used_size to zero but We've
already set c->nextblock so that jffs2_mark_node_obsolete() already set c->nextblock so that jffs2_mark_node_obsolete()
won't try to refile it to the dirty_list. won't try to refile it to the dirty_list.
*/ */
...@@ -376,12 +376,12 @@ static int jffs2_do_reserve_space(struct jffs2_sb_info *c, uint32_t minsize, uin ...@@ -376,12 +376,12 @@ static int jffs2_do_reserve_space(struct jffs2_sb_info *c, uint32_t minsize, uin
* @len: length of this physical node * @len: length of this physical node
* @dirty: dirty flag for new node * @dirty: dirty flag for new node
* *
* Should only be used to report nodes for which space has been allocated * Should only be used to report nodes for which space has been allocated
* by jffs2_reserve_space. * by jffs2_reserve_space.
* *
* Must be called with the alloc_sem held. * Must be called with the alloc_sem held.
*/ */
int jffs2_add_physical_node_ref(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *new) int jffs2_add_physical_node_ref(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *new)
{ {
struct jffs2_eraseblock *jeb; struct jffs2_eraseblock *jeb;
...@@ -488,8 +488,8 @@ void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref ...@@ -488,8 +488,8 @@ void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref
if (jffs2_can_mark_obsolete(c) && !jffs2_is_readonly(c) && if (jffs2_can_mark_obsolete(c) && !jffs2_is_readonly(c) &&
!(c->flags & (JFFS2_SB_FLAG_SCANNING | JFFS2_SB_FLAG_BUILDING))) { !(c->flags & (JFFS2_SB_FLAG_SCANNING | JFFS2_SB_FLAG_BUILDING))) {
/* Hm. This may confuse static lock analysis. If any of the above /* Hm. This may confuse static lock analysis. If any of the above
three conditions is false, we're going to return from this three conditions is false, we're going to return from this
function without actually obliterating any nodes or freeing function without actually obliterating any nodes or freeing
any jffs2_raw_node_refs. So we don't need to stop erases from any jffs2_raw_node_refs. So we don't need to stop erases from
happening, or protect against people holding an obsolete happening, or protect against people holding an obsolete
...@@ -546,17 +546,17 @@ void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref ...@@ -546,17 +546,17 @@ void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref
D1(printk(KERN_DEBUG "Wasting\n")); D1(printk(KERN_DEBUG "Wasting\n"));
addedsize = 0; addedsize = 0;
jeb->wasted_size += ref_totlen(c, jeb, ref); jeb->wasted_size += ref_totlen(c, jeb, ref);
c->wasted_size += ref_totlen(c, jeb, ref); c->wasted_size += ref_totlen(c, jeb, ref);
} }
ref->flash_offset = ref_offset(ref) | REF_OBSOLETE; ref->flash_offset = ref_offset(ref) | REF_OBSOLETE;
jffs2_dbg_acct_sanity_check_nolock(c, jeb); jffs2_dbg_acct_sanity_check_nolock(c, jeb);
jffs2_dbg_acct_paranoia_check_nolock(c, jeb); jffs2_dbg_acct_paranoia_check_nolock(c, jeb);
if (c->flags & JFFS2_SB_FLAG_SCANNING) { if (c->flags & JFFS2_SB_FLAG_SCANNING) {
/* Flash scanning is in progress. Don't muck about with the block /* Flash scanning is in progress. Don't muck about with the block
lists because they're not ready yet, and don't actually lists because they're not ready yet, and don't actually
obliterate nodes that look obsolete. If they weren't obliterate nodes that look obsolete. If they weren't
marked obsolete on the flash at the time they _became_ marked obsolete on the flash at the time they _became_
obsolete, there was probably a reason for that. */ obsolete, there was probably a reason for that. */
spin_unlock(&c->erase_completion_lock); spin_unlock(&c->erase_completion_lock);
...@@ -590,7 +590,7 @@ void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref ...@@ -590,7 +590,7 @@ void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref
immediately reused, and we spread the load a bit. */ immediately reused, and we spread the load a bit. */
D1(printk(KERN_DEBUG "...and adding to erasable_list\n")); D1(printk(KERN_DEBUG "...and adding to erasable_list\n"));
list_add_tail(&jeb->list, &c->erasable_list); list_add_tail(&jeb->list, &c->erasable_list);
} }
} }
D1(printk(KERN_DEBUG "Done OK\n")); D1(printk(KERN_DEBUG "Done OK\n"));
} else if (jeb == c->gcblock) { } else if (jeb == c->gcblock) {
...@@ -608,8 +608,8 @@ void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref ...@@ -608,8 +608,8 @@ void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref
list_add_tail(&jeb->list, &c->very_dirty_list); list_add_tail(&jeb->list, &c->very_dirty_list);
} else { } else {
D1(printk(KERN_DEBUG "Eraseblock at 0x%08x not moved anywhere. (free 0x%08x, dirty 0x%08x, used 0x%08x)\n", D1(printk(KERN_DEBUG "Eraseblock at 0x%08x not moved anywhere. (free 0x%08x, dirty 0x%08x, used 0x%08x)\n",
jeb->offset, jeb->free_size, jeb->dirty_size, jeb->used_size)); jeb->offset, jeb->free_size, jeb->dirty_size, jeb->used_size));
} }
spin_unlock(&c->erase_completion_lock); spin_unlock(&c->erase_completion_lock);
...@@ -656,11 +656,11 @@ void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref ...@@ -656,11 +656,11 @@ void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref
/* Nodes which have been marked obsolete no longer need to be /* Nodes which have been marked obsolete no longer need to be
associated with any inode. Remove them from the per-inode list. associated with any inode. Remove them from the per-inode list.
Note we can't do this for NAND at the moment because we need Note we can't do this for NAND at the moment because we need
obsolete dirent nodes to stay on the lists, because of the obsolete dirent nodes to stay on the lists, because of the
horridness in jffs2_garbage_collect_deletion_dirent(). Also horridness in jffs2_garbage_collect_deletion_dirent(). Also
because we delete the inocache, and on NAND we need that to because we delete the inocache, and on NAND we need that to
stay around until all the nodes are actually erased, in order stay around until all the nodes are actually erased, in order
to stop us from giving the same inode number to another newly to stop us from giving the same inode number to another newly
created inode. */ created inode. */
...@@ -689,7 +689,7 @@ void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref ...@@ -689,7 +689,7 @@ void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref
if (ref->next_phys && ref_obsolete(ref->next_phys) && if (ref->next_phys && ref_obsolete(ref->next_phys) &&
!ref->next_phys->next_in_ino) { !ref->next_phys->next_in_ino) {
struct jffs2_raw_node_ref *n = ref->next_phys; struct jffs2_raw_node_ref *n = ref->next_phys;
spin_lock(&c->erase_completion_lock); spin_lock(&c->erase_completion_lock);
ref->__totlen += n->__totlen; ref->__totlen += n->__totlen;
...@@ -703,7 +703,7 @@ void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref ...@@ -703,7 +703,7 @@ void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref
jffs2_free_raw_node_ref(n); jffs2_free_raw_node_ref(n);
} }
/* Also merge with the previous node in the list, if there is one /* Also merge with the previous node in the list, if there is one
and that one is obsolete */ and that one is obsolete */
if (ref != jeb->first_node ) { if (ref != jeb->first_node ) {
...@@ -713,7 +713,7 @@ void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref ...@@ -713,7 +713,7 @@ void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref
while (p->next_phys != ref) while (p->next_phys != ref)
p = p->next_phys; p = p->next_phys;
if (ref_obsolete(p) && !ref->next_in_ino) { if (ref_obsolete(p) && !ref->next_in_ino) {
p->__totlen += ref->__totlen; p->__totlen += ref->__totlen;
if (jeb->last_node == ref) { if (jeb->last_node == ref) {
...@@ -753,11 +753,11 @@ int jffs2_thread_should_wake(struct jffs2_sb_info *c) ...@@ -753,11 +753,11 @@ int jffs2_thread_should_wake(struct jffs2_sb_info *c)
*/ */
dirty = c->dirty_size + c->erasing_size - c->nr_erasing_blocks * c->sector_size; dirty = c->dirty_size + c->erasing_size - c->nr_erasing_blocks * c->sector_size;
if (c->nr_free_blocks + c->nr_erasing_blocks < c->resv_blocks_gctrigger && if (c->nr_free_blocks + c->nr_erasing_blocks < c->resv_blocks_gctrigger &&
(dirty > c->nospc_dirty_size)) (dirty > c->nospc_dirty_size))
ret = 1; ret = 1;
D1(printk(KERN_DEBUG "jffs2_thread_should_wake(): nr_free_blocks %d, nr_erasing_blocks %d, dirty_size 0x%x: %s\n", D1(printk(KERN_DEBUG "jffs2_thread_should_wake(): nr_free_blocks %d, nr_erasing_blocks %d, dirty_size 0x%x: %s\n",
c->nr_free_blocks, c->nr_erasing_blocks, c->dirty_size, ret?"yes":"no")); c->nr_free_blocks, c->nr_erasing_blocks, c->dirty_size, ret?"yes":"no"));
return ret; return ret;
......
...@@ -191,18 +191,18 @@ void jffs2_gc_release_inode(struct jffs2_sb_info *c, ...@@ -191,18 +191,18 @@ void jffs2_gc_release_inode(struct jffs2_sb_info *c,
struct jffs2_inode_info *jffs2_gc_fetch_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *jffs2_gc_fetch_inode(struct jffs2_sb_info *c,
int inum, int nlink); int inum, int nlink);
unsigned char *jffs2_gc_fetch_page(struct jffs2_sb_info *c, unsigned char *jffs2_gc_fetch_page(struct jffs2_sb_info *c,
struct jffs2_inode_info *f, struct jffs2_inode_info *f,
unsigned long offset, unsigned long offset,
unsigned long *priv); unsigned long *priv);
void jffs2_gc_release_page(struct jffs2_sb_info *c, void jffs2_gc_release_page(struct jffs2_sb_info *c,
unsigned char *pg, unsigned char *pg,
unsigned long *priv); unsigned long *priv);
void jffs2_flash_cleanup(struct jffs2_sb_info *c); void jffs2_flash_cleanup(struct jffs2_sb_info *c);
/* writev.c */ /* writev.c */
int jffs2_flash_direct_writev(struct jffs2_sb_info *c, const struct kvec *vecs, int jffs2_flash_direct_writev(struct jffs2_sb_info *c, const struct kvec *vecs,
unsigned long count, loff_t to, size_t *retlen); unsigned long count, loff_t to, size_t *retlen);
int jffs2_flash_direct_write(struct jffs2_sb_info *c, loff_t ofs, size_t len, int jffs2_flash_direct_write(struct jffs2_sb_info *c, loff_t ofs, size_t len,
size_t *retlen, const u_char *buf); size_t *retlen, const u_char *buf);
......
...@@ -7,7 +7,7 @@ ...@@ -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: read.c,v 1.41 2005/07/22 10:32:08 dedekind Exp $ * $Id: read.c,v 1.42 2005/11/07 11:14:41 gleixner Exp $
* *
*/ */
...@@ -43,7 +43,7 @@ int jffs2_read_dnode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, ...@@ -43,7 +43,7 @@ int jffs2_read_dnode(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
} }
if (readlen != sizeof(*ri)) { if (readlen != sizeof(*ri)) {
jffs2_free_raw_inode(ri); jffs2_free_raw_inode(ri);
printk(KERN_WARNING "Short read from 0x%08x: wanted 0x%zx bytes, got 0x%zx\n", printk(KERN_WARNING "Short read from 0x%08x: wanted 0x%zx bytes, got 0x%zx\n",
ref_offset(fd->raw), sizeof(*ri), readlen); ref_offset(fd->raw), sizeof(*ri), readlen);
return -EIO; return -EIO;
} }
...@@ -61,7 +61,7 @@ int jffs2_read_dnode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, ...@@ -61,7 +61,7 @@ int jffs2_read_dnode(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
} }
/* There was a bug where we wrote hole nodes out with csize/dsize /* There was a bug where we wrote hole nodes out with csize/dsize
swapped. Deal with it */ swapped. Deal with it */
if (ri->compr == JFFS2_COMPR_ZERO && !je32_to_cpu(ri->dsize) && if (ri->compr == JFFS2_COMPR_ZERO && !je32_to_cpu(ri->dsize) &&
je32_to_cpu(ri->csize)) { je32_to_cpu(ri->csize)) {
ri->dsize = ri->csize; ri->dsize = ri->csize;
ri->csize = cpu_to_je32(0); ri->csize = cpu_to_je32(0);
...@@ -74,7 +74,7 @@ int jffs2_read_dnode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, ...@@ -74,7 +74,7 @@ int jffs2_read_dnode(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
goto out_ri; goto out_ri;
}); });
if (ri->compr == JFFS2_COMPR_ZERO) { if (ri->compr == JFFS2_COMPR_ZERO) {
memset(buf, 0, len); memset(buf, 0, len);
goto out_ri; goto out_ri;
...@@ -82,8 +82,8 @@ int jffs2_read_dnode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, ...@@ -82,8 +82,8 @@ int jffs2_read_dnode(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
/* Cases: /* Cases:
Reading whole node and it's uncompressed - read directly to buffer provided, check CRC. Reading whole node and it's uncompressed - read directly to buffer provided, check CRC.
Reading whole node and it's compressed - read into comprbuf, check CRC and decompress to buffer provided Reading whole node and it's compressed - read into comprbuf, check CRC and decompress to buffer provided
Reading partial node and it's uncompressed - read into readbuf, check CRC, and copy Reading partial node and it's uncompressed - read into readbuf, check CRC, and copy
Reading partial node and it's compressed - read into readbuf, check checksum, decompress to decomprbuf and copy Reading partial node and it's compressed - read into readbuf, check checksum, decompress to decomprbuf and copy
*/ */
if (ri->compr == JFFS2_COMPR_NONE && len == je32_to_cpu(ri->dsize)) { if (ri->compr == JFFS2_COMPR_NONE && len == je32_to_cpu(ri->dsize)) {
...@@ -129,7 +129,7 @@ int jffs2_read_dnode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, ...@@ -129,7 +129,7 @@ int jffs2_read_dnode(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
D2(printk(KERN_DEBUG "Data CRC matches calculated CRC %08x\n", crc)); D2(printk(KERN_DEBUG "Data CRC matches calculated CRC %08x\n", crc));
if (ri->compr != JFFS2_COMPR_NONE) { if (ri->compr != JFFS2_COMPR_NONE) {
D2(printk(KERN_DEBUG "Decompress %d bytes from %p to %d bytes at %p\n", D2(printk(KERN_DEBUG "Decompress %d bytes from %p to %d bytes at %p\n",
je32_to_cpu(ri->csize), readbuf, je32_to_cpu(ri->dsize), decomprbuf)); je32_to_cpu(ri->csize), readbuf, je32_to_cpu(ri->dsize), decomprbuf));
ret = jffs2_decompress(c, f, ri->compr | (ri->usercompr << 8), readbuf, decomprbuf, je32_to_cpu(ri->csize), je32_to_cpu(ri->dsize)); ret = jffs2_decompress(c, f, ri->compr | (ri->usercompr << 8), readbuf, decomprbuf, je32_to_cpu(ri->csize), je32_to_cpu(ri->dsize));
if (ret) { if (ret) {
printk(KERN_WARNING "Error: jffs2_decompress returned %d\n", ret); printk(KERN_WARNING "Error: jffs2_decompress returned %d\n", ret);
...@@ -191,7 +191,7 @@ int jffs2_read_inode_range(struct jffs2_sb_info *c, struct jffs2_inode_info *f, ...@@ -191,7 +191,7 @@ int jffs2_read_inode_range(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
} else { } else {
uint32_t readlen; uint32_t readlen;
uint32_t fragofs; /* offset within the frag to start reading */ uint32_t fragofs; /* offset within the frag to start reading */
fragofs = offset - frag->ofs; fragofs = offset - frag->ofs;
readlen = min(frag->size - fragofs, end - offset); readlen = min(frag->size - fragofs, end - offset);
D1(printk(KERN_DEBUG "Reading %d-%d from node at 0x%08x (%d)\n", D1(printk(KERN_DEBUG "Reading %d-%d from node at 0x%08x (%d)\n",
......
This diff is collapsed.
This diff is collapsed.
...@@ -82,7 +82,7 @@ static int jffs2_sum_add_mem(struct jffs2_summary *s, union jffs2_sum_mem *item) ...@@ -82,7 +82,7 @@ static int jffs2_sum_add_mem(struct jffs2_summary *s, union jffs2_sum_mem *item)
je32_to_cpu(item->d.ino)); je32_to_cpu(item->d.ino));
break; break;
default: default:
JFFS2_WARNING("UNKNOWN node type %u\n", JFFS2_WARNING("UNKNOWN node type %u\n",
je16_to_cpu(item->u.nodetype)); je16_to_cpu(item->u.nodetype));
return 1; return 1;
} }
...@@ -174,7 +174,7 @@ void jffs2_sum_disable_collecting(struct jffs2_summary *s) ...@@ -174,7 +174,7 @@ void jffs2_sum_disable_collecting(struct jffs2_summary *s)
s->sum_size = JFFS2_SUMMARY_NOSUM_SIZE; s->sum_size = JFFS2_SUMMARY_NOSUM_SIZE;
} }
int jffs2_sum_is_disabled(struct jffs2_summary *s) int jffs2_sum_is_disabled(struct jffs2_summary *s)
{ {
return (s->sum_size == JFFS2_SUMMARY_NOSUM_SIZE); return (s->sum_size == JFFS2_SUMMARY_NOSUM_SIZE);
} }
...@@ -609,7 +609,7 @@ static int jffs2_sum_write_data(struct jffs2_sb_info *c, struct jffs2_eraseblock ...@@ -609,7 +609,7 @@ static int jffs2_sum_write_data(struct jffs2_sb_info *c, struct jffs2_eraseblock
sdrnt_ptr->nsize = c->summary->sum_list_head->d.nsize; sdrnt_ptr->nsize = c->summary->sum_list_head->d.nsize;
sdrnt_ptr->type = c->summary->sum_list_head->d.type; sdrnt_ptr->type = c->summary->sum_list_head->d.type;
memcpy(sdrnt_ptr->name, c->summary->sum_list_head->d.name, memcpy(sdrnt_ptr->name, c->summary->sum_list_head->d.name,
c->summary->sum_list_head->d.nsize); c->summary->sum_list_head->d.nsize);
wpage += JFFS2_SUMMARY_DIRENT_SIZE(c->summary->sum_list_head->d.nsize); wpage += JFFS2_SUMMARY_DIRENT_SIZE(c->summary->sum_list_head->d.nsize);
...@@ -687,7 +687,7 @@ int jffs2_sum_write_sumnode(struct jffs2_sb_info *c) ...@@ -687,7 +687,7 @@ int jffs2_sum_write_sumnode(struct jffs2_sb_info *c)
datasize = c->summary->sum_size + sizeof(struct jffs2_sum_marker); datasize = c->summary->sum_size + sizeof(struct jffs2_sum_marker);
infosize = sizeof(struct jffs2_raw_summary) + datasize; infosize = sizeof(struct jffs2_raw_summary) + datasize;
padsize = jeb->free_size - infosize; padsize = jeb->free_size - infosize;
infosize += padsize; infosize += padsize;
datasize += padsize; datasize += padsize;
/* Is there enough space for summary? */ /* Is there enough space for summary? */
......
...@@ -7,7 +7,7 @@ ...@@ -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.109 2005/09/07 08:34:55 havasi Exp $ * $Id: super.c,v 1.110 2005/11/07 11:14:42 gleixner Exp $
* *
*/ */
...@@ -62,7 +62,7 @@ static int jffs2_sync_fs(struct super_block *sb, int wait) ...@@ -62,7 +62,7 @@ static int jffs2_sync_fs(struct super_block *sb, int wait)
down(&c->alloc_sem); down(&c->alloc_sem);
jffs2_flush_wbuf_pad(c); jffs2_flush_wbuf_pad(c);
up(&c->alloc_sem); up(&c->alloc_sem);
return 0; return 0;
} }
...@@ -112,7 +112,7 @@ static int jffs2_sb_set(struct super_block *sb, void *data) ...@@ -112,7 +112,7 @@ static int jffs2_sb_set(struct super_block *sb, void *data)
} }
static struct super_block *jffs2_get_sb_mtd(struct file_system_type *fs_type, static struct super_block *jffs2_get_sb_mtd(struct file_system_type *fs_type,
int flags, const char *dev_name, int flags, const char *dev_name,
void *data, struct mtd_info *mtd) void *data, struct mtd_info *mtd)
{ {
struct super_block *sb; struct super_block *sb;
...@@ -172,7 +172,7 @@ static struct super_block *jffs2_get_sb_mtd(struct file_system_type *fs_type, ...@@ -172,7 +172,7 @@ static struct super_block *jffs2_get_sb_mtd(struct file_system_type *fs_type,
} }
static struct super_block *jffs2_get_sb_mtdnr(struct file_system_type *fs_type, static struct super_block *jffs2_get_sb_mtdnr(struct file_system_type *fs_type,
int flags, const char *dev_name, int flags, const char *dev_name,
void *data, int mtdnr) void *data, int mtdnr)
{ {
struct mtd_info *mtd; struct mtd_info *mtd;
...@@ -201,7 +201,7 @@ static struct super_block *jffs2_get_sb(struct file_system_type *fs_type, ...@@ -201,7 +201,7 @@ static struct super_block *jffs2_get_sb(struct file_system_type *fs_type,
/* The preferred way of mounting in future; especially when /* The preferred way of mounting in future; especially when
CONFIG_BLK_DEV is implemented - we specify the underlying CONFIG_BLK_DEV is implemented - we specify the underlying
MTD device by number or by name, so that we don't require MTD device by number or by name, so that we don't require
block device support to be present in the kernel. */ block device support to be present in the kernel. */
/* FIXME: How to do the root fs this way? */ /* FIXME: How to do the root fs this way? */
...@@ -225,7 +225,7 @@ static struct super_block *jffs2_get_sb(struct file_system_type *fs_type, ...@@ -225,7 +225,7 @@ static struct super_block *jffs2_get_sb(struct file_system_type *fs_type,
} else if (isdigit(dev_name[3])) { } else if (isdigit(dev_name[3])) {
/* Mount by MTD device number name */ /* Mount by MTD device number name */
char *endptr; char *endptr;
mtdnr = simple_strtoul(dev_name+3, &endptr, 0); mtdnr = simple_strtoul(dev_name+3, &endptr, 0);
if (!*endptr) { if (!*endptr) {
/* It was a valid number */ /* It was a valid number */
...@@ -235,7 +235,7 @@ static struct super_block *jffs2_get_sb(struct file_system_type *fs_type, ...@@ -235,7 +235,7 @@ static struct super_block *jffs2_get_sb(struct file_system_type *fs_type,
} }
} }
/* Try the old way - the hack where we allowed users to mount /* Try the old way - the hack where we allowed users to mount
/dev/mtdblock$(n) but didn't actually _use_ the blkdev */ /dev/mtdblock$(n) but didn't actually _use_ the blkdev */
err = path_lookup(dev_name, LOOKUP_FOLLOW, &nd); err = path_lookup(dev_name, LOOKUP_FOLLOW, &nd);
...@@ -376,5 +376,5 @@ module_exit(exit_jffs2_fs); ...@@ -376,5 +376,5 @@ module_exit(exit_jffs2_fs);
MODULE_DESCRIPTION("The Journalling Flash File System, v2"); MODULE_DESCRIPTION("The Journalling Flash File System, v2");
MODULE_AUTHOR("Red Hat, Inc."); MODULE_AUTHOR("Red Hat, Inc.");
MODULE_LICENSE("GPL"); // Actually dual-licensed, but it doesn't matter for MODULE_LICENSE("GPL"); // Actually dual-licensed, but it doesn't matter for
// the sake of this tag. It's Free Software. // the sake of this tag. It's Free Software.
...@@ -7,7 +7,7 @@ ...@@ -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: symlink.c,v 1.18 2005/11/06 11:03:27 gleixner Exp $ * $Id: symlink.c,v 1.19 2005/11/07 11:14:42 gleixner Exp $
* *
*/ */
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
static void *jffs2_follow_link(struct dentry *dentry, struct nameidata *nd); static void *jffs2_follow_link(struct dentry *dentry, struct nameidata *nd);
struct inode_operations jffs2_symlink_inode_operations = struct inode_operations jffs2_symlink_inode_operations =
{ {
.readlink = generic_readlink, .readlink = generic_readlink,
.follow_link = jffs2_follow_link, .follow_link = jffs2_follow_link,
.setattr = jffs2_setattr .setattr = jffs2_setattr
...@@ -44,7 +44,7 @@ static void *jffs2_follow_link(struct dentry *dentry, struct nameidata *nd) ...@@ -44,7 +44,7 @@ static void *jffs2_follow_link(struct dentry *dentry, struct nameidata *nd)
* stopped using our f->target string which we provide by means of * stopped using our f->target string which we provide by means of
* nd_set_link() call. * nd_set_link() call.
*/ */
if (!p) { if (!p) {
printk(KERN_ERR "jffs2_follow_link(): can't find symlink taerget\n"); printk(KERN_ERR "jffs2_follow_link(): can't find symlink taerget\n");
p = ERR_PTR(-EIO); p = ERR_PTR(-EIO);
...@@ -52,7 +52,7 @@ static void *jffs2_follow_link(struct dentry *dentry, struct nameidata *nd) ...@@ -52,7 +52,7 @@ static void *jffs2_follow_link(struct dentry *dentry, struct nameidata *nd)
D1(printk(KERN_DEBUG "jffs2_follow_link(): target path is '%s'\n", (char *) f->target)); D1(printk(KERN_DEBUG "jffs2_follow_link(): target path is '%s'\n", (char *) f->target));
nd_set_link(nd, p); nd_set_link(nd, p);
/* /*
* We will unlock the f->sem mutex but VFS will use the f->target string. This is safe * We will unlock the f->sem mutex but VFS will use the f->target string. This is safe
* since the only way that may cause f->target to be changed is iput() operation. * since the only way that may cause f->target to be changed is iput() operation.
......
This diff is collapsed.
This diff is collapsed.
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* *
* Created by David Woodhouse <dwmw2@infradead.org> * Created by David Woodhouse <dwmw2@infradead.org>
* *
* For licensing information, see the file 'LICENCE' in the * For licensing information, see the file 'LICENCE' in the
* jffs2 directory. * jffs2 directory.
* *
* $Id: jffs2.h,v 1.38 2005/09/26 11:37:23 havasi Exp $ * $Id: jffs2.h,v 1.38 2005/09/26 11:37:23 havasi Exp $
...@@ -70,10 +70,10 @@ ...@@ -70,10 +70,10 @@
//#define JFFS2_NODETYPE_OPTIONS (JFFS2_FEATURE_RWCOMPAT_COPY | JFFS2_NODE_ACCURATE | 4) //#define JFFS2_NODETYPE_OPTIONS (JFFS2_FEATURE_RWCOMPAT_COPY | JFFS2_NODE_ACCURATE | 4)
#define JFFS2_INO_FLAG_PREREAD 1 /* Do read_inode() for this one at #define JFFS2_INO_FLAG_PREREAD 1 /* Do read_inode() for this one at
mount time, don't wait for it to mount time, don't wait for it to
happen later */ happen later */
#define JFFS2_INO_FLAG_USERCOMPR 2 /* User has requested a specific #define JFFS2_INO_FLAG_USERCOMPR 2 /* User has requested a specific
compression type */ compression type */
...@@ -120,7 +120,7 @@ struct jffs2_raw_dirent ...@@ -120,7 +120,7 @@ struct jffs2_raw_dirent
} __attribute__((packed)); } __attribute__((packed));
/* The JFFS2 raw inode structure: Used for storage on physical media. */ /* The JFFS2 raw inode structure: Used for storage on physical media. */
/* The uid, gid, atime, mtime and ctime members could be longer, but /* The uid, gid, atime, mtime and ctime members could be longer, but
are left like this for space efficiency. If and when people decide are left like this for space efficiency. If and when people decide
they really need them extended, it's simple enough to add support for they really need them extended, it's simple enough to add support for
a new type of raw node. a new type of raw node.
...@@ -165,7 +165,7 @@ struct jffs2_raw_summary ...@@ -165,7 +165,7 @@ struct jffs2_raw_summary
jint32_t sum[0]; /* inode summary info */ jint32_t sum[0]; /* inode summary info */
} __attribute__((packed)); } __attribute__((packed));
union jffs2_node_union union jffs2_node_union
{ {
struct jffs2_raw_inode i; struct jffs2_raw_inode i;
struct jffs2_raw_dirent d; struct jffs2_raw_dirent d;
......
/* $Id: jffs2_fs_i.h,v 1.18 2005/07/17 11:13:48 dedekind Exp $ */ /* $Id: jffs2_fs_i.h,v 1.19 2005/11/07 11:14:52 gleixner Exp $ */
#ifndef _JFFS2_FS_I #ifndef _JFFS2_FS_I
#define _JFFS2_FS_I #define _JFFS2_FS_I
...@@ -25,7 +25,7 @@ struct jffs2_inode_info { ...@@ -25,7 +25,7 @@ struct jffs2_inode_info {
/* There may be one datanode which isn't referenced by any of the /* There may be one datanode which isn't referenced by any of the
above fragments, if it contains a metadata update but no actual above fragments, if it contains a metadata update but no actual
data - or if this is a directory inode */ data - or if this is a directory inode */
/* This also holds the _only_ dnode for symlinks/device nodes, /* This also holds the _only_ dnode for symlinks/device nodes,
etc. */ etc. */
struct jffs2_full_dnode *metadata; struct jffs2_full_dnode *metadata;
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
struct jffs2_inodirty; struct jffs2_inodirty;
/* A struct for the overall file system control. Pointers to /* A struct for the overall file system control. Pointers to
jffs2_sb_info structs are named `c' in the source code. jffs2_sb_info structs are named `c' in the source code.
Nee jffs_control Nee jffs_control
*/ */
struct jffs2_sb_info { struct jffs2_sb_info {
...@@ -35,7 +35,7 @@ struct jffs2_sb_info { ...@@ -35,7 +35,7 @@ struct jffs2_sb_info {
struct completion gc_thread_start; /* GC thread start completion */ struct completion gc_thread_start; /* GC thread start completion */
struct completion gc_thread_exit; /* GC thread exit completion port */ struct completion gc_thread_exit; /* GC thread exit completion port */
struct semaphore alloc_sem; /* Used to protect all the following struct semaphore alloc_sem; /* Used to protect all the following
fields, and also to protect against fields, and also to protect against
out-of-order writing of nodes. And GC. */ out-of-order writing of nodes. And GC. */
uint32_t cleanmarker_size; /* Size of an _inline_ CLEANMARKER uint32_t cleanmarker_size; /* Size of an _inline_ CLEANMARKER
...@@ -64,7 +64,7 @@ struct jffs2_sb_info { ...@@ -64,7 +64,7 @@ struct jffs2_sb_info {
uint32_t nospc_dirty_size; uint32_t nospc_dirty_size;
uint32_t nr_blocks; uint32_t nr_blocks;
struct jffs2_eraseblock *blocks; /* The whole array of blocks. Used for getting blocks struct jffs2_eraseblock *blocks; /* The whole array of blocks. Used for getting blocks
* from the offset (blocks[ofs / sector_size]) */ * from the offset (blocks[ofs / sector_size]) */
struct jffs2_eraseblock *nextblock; /* The block we're currently filling */ struct jffs2_eraseblock *nextblock; /* The block we're currently filling */
...@@ -82,21 +82,21 @@ struct jffs2_sb_info { ...@@ -82,21 +82,21 @@ struct jffs2_sb_info {
struct list_head bad_list; /* Bad blocks. */ struct list_head bad_list; /* Bad blocks. */
struct list_head bad_used_list; /* Bad blocks with valid data in. */ struct list_head bad_used_list; /* Bad blocks with valid data in. */
spinlock_t erase_completion_lock; /* Protect free_list and erasing_list spinlock_t erase_completion_lock; /* Protect free_list and erasing_list
against erase completion handler */ against erase completion handler */
wait_queue_head_t erase_wait; /* For waiting for erases to complete */ wait_queue_head_t erase_wait; /* For waiting for erases to complete */
wait_queue_head_t inocache_wq; wait_queue_head_t inocache_wq;
struct jffs2_inode_cache **inocache_list; struct jffs2_inode_cache **inocache_list;
spinlock_t inocache_lock; spinlock_t inocache_lock;
/* Sem to allow jffs2_garbage_collect_deletion_dirent to /* Sem to allow jffs2_garbage_collect_deletion_dirent to
drop the erase_completion_lock while it's holding a pointer drop the erase_completion_lock while it's holding a pointer
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;
uint32_t wbuf_pagesize; /* 0 for NOR and other flashes with no wbuf */ uint32_t wbuf_pagesize; /* 0 for NOR and other flashes with no wbuf */
#ifdef CONFIG_JFFS2_FS_WRITEBUFFER #ifdef CONFIG_JFFS2_FS_WRITEBUFFER
/* Write-behind buffer for NAND flash */ /* Write-behind buffer for NAND flash */
unsigned char *wbuf; unsigned char *wbuf;
......
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