projects
/
yaffs2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
More clean up
[yaffs2.git]
/
yaffs_checkptrw.c
diff --git
a/yaffs_checkptrw.c
b/yaffs_checkptrw.c
index d8970449b04812de994f85737f749fe6120c0e7b..f67d6be2c2c6e8a2aa3a7b9503f2e931861f4be4 100644
(file)
--- a/
yaffs_checkptrw.c
+++ b/
yaffs_checkptrw.c
@@
-16,11
+16,22
@@
struct yaffs_checkpt_chunk_hdr {
int version;
struct yaffs_checkpt_chunk_hdr {
int version;
-
int
seq;
+
u32
seq;
u32 sum;
u32 xor;
} ;
u32 sum;
u32 xor;
} ;
+
+static int apply_chunk_offset(struct yaffs_dev *dev, int chunk)
+{
+ return chunk - dev->chunk_offset;
+}
+
+static int apply_block_offset(struct yaffs_dev *dev, int block)
+{
+ return block - dev->block_offset;
+}
+
static void yaffs2_checkpt_init_chunk_hdr(struct yaffs_dev *dev)
{
struct yaffs_checkpt_chunk_hdr hdr;
static void yaffs2_checkpt_init_chunk_hdr(struct yaffs_dev *dev)
{
struct yaffs_checkpt_chunk_hdr hdr;
@@
-61,9
+72,9
@@
static int yaffs2_checkpt_space_ok(struct yaffs_dev *dev)
static int yaffs_checkpt_erase(struct yaffs_dev *dev)
{
static int yaffs_checkpt_erase(struct yaffs_dev *dev)
{
-
int
i;
+
u32
i;
- if (!dev->
param.
erase_fn)
+ if (!dev->
drv.drv_
erase_fn)
return 0;
yaffs_trace(YAFFS_TRACE_CHECKPOINT,
"checking blocks %d to %d",
return 0;
yaffs_trace(YAFFS_TRACE_CHECKPOINT,
"checking blocks %d to %d",
@@
-71,21
+82,23
@@
static int yaffs_checkpt_erase(struct yaffs_dev *dev)
for (i = dev->internal_start_block; i <= dev->internal_end_block; i++) {
struct yaffs_block_info *bi = yaffs_get_block_info(dev, i);
for (i = dev->internal_start_block; i <= dev->internal_end_block; i++) {
struct yaffs_block_info *bi = yaffs_get_block_info(dev, i);
+ int offset_i = apply_block_offset(dev, i);
+ int result;
+
if (bi->block_state == YAFFS_BLOCK_STATE_CHECKPOINT) {
yaffs_trace(YAFFS_TRACE_CHECKPOINT,
"erasing checkpt block %d", i);
dev->n_erasures++;
if (bi->block_state == YAFFS_BLOCK_STATE_CHECKPOINT) {
yaffs_trace(YAFFS_TRACE_CHECKPOINT,
"erasing checkpt block %d", i);
dev->n_erasures++;
- if (dev->param.
- erase_fn(dev,
- i - dev->block_offset /* realign */)) {
+ result = dev->drv.drv_erase_fn(dev, offset_i);
+ if(result) {
bi->block_state = YAFFS_BLOCK_STATE_EMPTY;
dev->n_erased_blocks++;
dev->n_free_chunks +=
dev->param.chunks_per_block;
} else {
bi->block_state = YAFFS_BLOCK_STATE_EMPTY;
dev->n_erased_blocks++;
dev->n_free_chunks +=
dev->param.chunks_per_block;
} else {
- dev->
param.bad_block_fn(dev,
i);
+ dev->
drv.drv_mark_bad_fn(dev, offset_
i);
bi->block_state = YAFFS_BLOCK_STATE_DEAD;
}
}
bi->block_state = YAFFS_BLOCK_STATE_DEAD;
}
}
@@
-98,7
+111,7
@@
static int yaffs_checkpt_erase(struct yaffs_dev *dev)
static void yaffs2_checkpt_find_erased_block(struct yaffs_dev *dev)
{
static void yaffs2_checkpt_find_erased_block(struct yaffs_dev *dev)
{
-
int
i;
+
u32
i;
int blocks_avail = dev->n_erased_blocks - dev->param.n_reserved_blocks;
yaffs_trace(YAFFS_TRACE_CHECKPOINT,
int blocks_avail = dev->n_erased_blocks - dev->param.n_reserved_blocks;
yaffs_trace(YAFFS_TRACE_CHECKPOINT,
@@
-106,14
+119,15
@@
static void yaffs2_checkpt_find_erased_block(struct yaffs_dev *dev)
dev->n_erased_blocks, dev->param.n_reserved_blocks,
blocks_avail, dev->checkpt_next_block);
dev->n_erased_blocks, dev->param.n_reserved_blocks,
blocks_avail, dev->checkpt_next_block);
- if (dev->checkpt_next_block >=
0
&&
+ if (dev->checkpt_next_block >=
dev->internal_start_block
&&
dev->checkpt_next_block <= dev->internal_end_block &&
blocks_avail > 0) {
for (i = dev->checkpt_next_block; i <= dev->internal_end_block;
i++) {
dev->checkpt_next_block <= dev->internal_end_block &&
blocks_avail > 0) {
for (i = dev->checkpt_next_block; i <= dev->internal_end_block;
i++) {
- struct yaffs_block_info *bi =
- yaffs_get_block_info(dev, i);
+ struct yaffs_block_info *bi;
+
+ bi = yaffs_get_block_info(dev, i);
if (bi->block_state == YAFFS_BLOCK_STATE_EMPTY) {
dev->checkpt_next_block = i + 1;
dev->checkpt_cur_block = i;
if (bi->block_state == YAFFS_BLOCK_STATE_EMPTY) {
dev->checkpt_next_block = i + 1;
dev->checkpt_cur_block = i;
@@
-125,13
+139,13
@@
static void yaffs2_checkpt_find_erased_block(struct yaffs_dev *dev)
}
yaffs_trace(YAFFS_TRACE_CHECKPOINT, "out of checkpt blocks");
}
yaffs_trace(YAFFS_TRACE_CHECKPOINT, "out of checkpt blocks");
- dev->checkpt_next_block =
-1
;
- dev->checkpt_cur_block =
-1
;
+ dev->checkpt_next_block =
0
;
+ dev->checkpt_cur_block =
0
;
}
static void yaffs2_checkpt_find_block(struct yaffs_dev *dev)
{
}
static void yaffs2_checkpt_find_block(struct yaffs_dev *dev)
{
-
int
i;
+
u32
i;
struct yaffs_ext_tags tags;
yaffs_trace(YAFFS_TRACE_CHECKPOINT,
struct yaffs_ext_tags tags;
yaffs_trace(YAFFS_TRACE_CHECKPOINT,
@@
-141,13
+155,13
@@
static void yaffs2_checkpt_find_block(struct yaffs_dev *dev)
if (dev->blocks_in_checkpt < dev->checkpt_max_blocks)
for (i = dev->checkpt_next_block; i <= dev->internal_end_block;
i++) {
if (dev->blocks_in_checkpt < dev->checkpt_max_blocks)
for (i = dev->checkpt_next_block; i <= dev->internal_end_block;
i++) {
- int chunk = i * dev->param.chunks_per_block;
- int realigned_chunk = chunk - dev->chunk_offset;
+ u32 chunk = i * dev->param.chunks_per_block;
enum yaffs_block_state state;
u32 seq;
enum yaffs_block_state state;
u32 seq;
- dev->param.read_chunk_tags_fn(dev, realigned_chunk,
- NULL, &tags);
+ dev->tagger.read_chunk_tags_fn(dev,
+ apply_chunk_offset(dev, chunk),
+ NULL, &tags);
yaffs_trace(YAFFS_TRACE_CHECKPOINT,
"find next checkpt block: search: block %d state %d oid %d seq %d eccr %d",
i, (int) state,
yaffs_trace(YAFFS_TRACE_CHECKPOINT,
"find next checkpt block: search: block %d state %d oid %d seq %d eccr %d",
i, (int) state,
@@
-157,7
+171,9
@@
static void yaffs2_checkpt_find_block(struct yaffs_dev *dev)
if (tags.seq_number != YAFFS_SEQUENCE_CHECKPOINT_DATA)
continue;
if (tags.seq_number != YAFFS_SEQUENCE_CHECKPOINT_DATA)
continue;
- dev->param.query_block_fn(dev, i, &state, &seq);
+ dev->tagger.query_block_fn(dev,
+ apply_block_offset(dev, i),
+ &state, &seq);
if (state == YAFFS_BLOCK_STATE_DEAD)
continue;
if (state == YAFFS_BLOCK_STATE_DEAD)
continue;
@@
-173,8
+189,8
@@
static void yaffs2_checkpt_find_block(struct yaffs_dev *dev)
yaffs_trace(YAFFS_TRACE_CHECKPOINT, "found no more checkpt blocks");
yaffs_trace(YAFFS_TRACE_CHECKPOINT, "found no more checkpt blocks");
- dev->checkpt_next_block =
-1
;
- dev->checkpt_cur_block =
-1
;
+ dev->checkpt_next_block =
0
;
+ dev->checkpt_cur_block =
0
;
}
int yaffs2_checkpt_open(struct yaffs_dev *dev, int writing)
}
int yaffs2_checkpt_open(struct yaffs_dev *dev, int writing)
@@
-184,9
+200,10
@@
int yaffs2_checkpt_open(struct yaffs_dev *dev, int writing)
dev->checkpt_open_write = writing;
/* Got the functions we need? */
dev->checkpt_open_write = writing;
/* Got the functions we need? */
- if (!dev->param.write_chunk_tags_fn ||
- !dev->param.read_chunk_tags_fn ||
- !dev->param.erase_fn || !dev->param.bad_block_fn)
+ if (!dev->tagger.write_chunk_tags_fn ||
+ !dev->tagger.read_chunk_tags_fn ||
+ !dev->drv.drv_erase_fn ||
+ !dev->drv.drv_mark_bad_fn)
return 0;
if (writing && !yaffs2_checkpt_space_ok(dev))
return 0;
if (writing && !yaffs2_checkpt_space_ok(dev))
@@
-202,8
+219,8
@@
int yaffs2_checkpt_open(struct yaffs_dev *dev, int writing)
dev->checkpt_byte_count = 0;
dev->checkpt_sum = 0;
dev->checkpt_xor = 0;
dev->checkpt_byte_count = 0;
dev->checkpt_sum = 0;
dev->checkpt_xor = 0;
- dev->checkpt_cur_block =
-1
;
- dev->checkpt_cur_chunk =
-1
;
+ dev->checkpt_cur_block =
0
;
+ dev->checkpt_cur_chunk =
0
;
dev->checkpt_next_block = dev->internal_start_block;
if (writing) {
dev->checkpt_next_block = dev->internal_start_block;
if (writing) {
@@
-244,15
+261,15
@@
int yaffs2_get_checkpt_sum(struct yaffs_dev *dev, u32 * sum)
static int yaffs2_checkpt_flush_buffer(struct yaffs_dev *dev)
{
int chunk;
static int yaffs2_checkpt_flush_buffer(struct yaffs_dev *dev)
{
int chunk;
- int
realigned
_chunk;
+ int
offset
_chunk;
struct yaffs_ext_tags tags;
struct yaffs_ext_tags tags;
- if (dev->checkpt_cur_block <
0
) {
+ if (dev->checkpt_cur_block <
dev->internal_start_block
) {
yaffs2_checkpt_find_erased_block(dev);
dev->checkpt_cur_chunk = 0;
}
yaffs2_checkpt_find_erased_block(dev);
dev->checkpt_cur_chunk = 0;
}
- if (dev->checkpt_cur_block <
0
)
+ if (dev->checkpt_cur_block <
dev->internal_start_block
)
return 0;
tags.is_deleted = 0;
return 0;
tags.is_deleted = 0;
@@
-278,17
+295,17
@@
static int yaffs2_checkpt_flush_buffer(struct yaffs_dev *dev)
chunk, dev->checkpt_cur_block, dev->checkpt_cur_chunk,
tags.obj_id, tags.chunk_id);
chunk, dev->checkpt_cur_block, dev->checkpt_cur_chunk,
tags.obj_id, tags.chunk_id);
-
realigned_chunk = chunk - dev->chunk_offset
;
+
offset_chunk = apply_chunk_offset(dev, chunk)
;
dev->n_page_writes++;
dev->n_page_writes++;
- dev->
param.write_chunk_tags_fn(dev, realigned
_chunk,
+ dev->
tagger.write_chunk_tags_fn(dev, offset
_chunk,
dev->checkpt_buffer, &tags);
dev->checkpt_page_seq++;
dev->checkpt_cur_chunk++;
if (dev->checkpt_cur_chunk >= dev->param.chunks_per_block) {
dev->checkpt_cur_chunk = 0;
dev->checkpt_buffer, &tags);
dev->checkpt_page_seq++;
dev->checkpt_cur_chunk++;
if (dev->checkpt_cur_chunk >= dev->param.chunks_per_block) {
dev->checkpt_cur_chunk = 0;
- dev->checkpt_cur_block =
-1
;
+ dev->checkpt_cur_block =
0
;
}
memset(dev->checkpt_buffer, 0, dev->data_bytes_per_chunk);
}
memset(dev->checkpt_buffer, 0, dev->data_bytes_per_chunk);
@@
-320,8
+337,7
@@
int yaffs2_checkpt_wr(struct yaffs_dev *dev, const void *data, int n_bytes)
data_bytes++;
dev->checkpt_byte_count++;
data_bytes++;
dev->checkpt_byte_count++;
- if (dev->checkpt_byte_offs < 0 ||
- dev->checkpt_byte_offs >= dev->data_bytes_per_chunk)
+ if (dev->checkpt_byte_offs >= dev->data_bytes_per_chunk)
ok = yaffs2_checkpt_flush_buffer(dev);
}
ok = yaffs2_checkpt_flush_buffer(dev);
}
@@
-334,7
+350,7
@@
int yaffs2_checkpt_rd(struct yaffs_dev *dev, void *data, int n_bytes)
int ok = 1;
struct yaffs_ext_tags tags;
int chunk;
int ok = 1;
struct yaffs_ext_tags tags;
int chunk;
- int
realigned
_chunk;
+ int
offset
_chunk;
u8 *data_bytes = (u8 *) data;
if (!dev->checkpt_buffer)
u8 *data_bytes = (u8 *) data;
if (!dev->checkpt_buffer)
@@
-345,15
+361,16
@@
int yaffs2_checkpt_rd(struct yaffs_dev *dev, void *data, int n_bytes)
while (i < n_bytes && ok) {
while (i < n_bytes && ok) {
- if (dev->checkpt_byte_offs < 0 ||
- dev->checkpt_byte_offs >= dev->data_bytes_per_chunk) {
+ if (dev->checkpt_byte_offs >= dev->data_bytes_per_chunk) {
- if (dev->checkpt_cur_block < 0) {
+ if (dev->checkpt_cur_block <
+ dev->internal_start_block) {
yaffs2_checkpt_find_block(dev);
dev->checkpt_cur_chunk = 0;
}
yaffs2_checkpt_find_block(dev);
dev->checkpt_cur_chunk = 0;
}
- if (dev->checkpt_cur_block < 0) {
+ if (dev->checkpt_cur_block <
+ dev->internal_start_block) {
ok = 0;
break;
}
ok = 0;
break;
}
@@
-362,12
+379,12
@@
int yaffs2_checkpt_rd(struct yaffs_dev *dev, void *data, int n_bytes)
dev->param.chunks_per_block +
dev->checkpt_cur_chunk;
dev->param.chunks_per_block +
dev->checkpt_cur_chunk;
-
realigned_chunk = chunk - dev->chunk_offset
;
+
offset_chunk = apply_chunk_offset(dev, chunk)
;
dev->n_page_reads++;
/* read in the next chunk */
dev->n_page_reads++;
/* read in the next chunk */
- dev->
param
.read_chunk_tags_fn(dev,
-
realigned
_chunk,
+ dev->
tagger
.read_chunk_tags_fn(dev,
+
offset
_chunk,
dev->checkpt_buffer,
&tags);
dev->checkpt_buffer,
&tags);
@@
-385,9
+402,9
@@
int yaffs2_checkpt_rd(struct yaffs_dev *dev, void *data, int n_bytes)
dev->checkpt_page_seq++;
dev->checkpt_cur_chunk++;
dev->checkpt_page_seq++;
dev->checkpt_cur_chunk++;
- if (dev->checkpt_cur_chunk >
=
+ if (dev->checkpt_cur_chunk >
dev->param.chunks_per_block)
dev->param.chunks_per_block)
- dev->checkpt_cur_block =
-1
;
+ dev->checkpt_cur_block =
0
;
}
}
@@
-414,8
+431,8
@@
int yaffs_checkpt_close(struct yaffs_dev *dev)
} else if (dev->checkpt_block_list) {
for (i = 0;
i < dev->blocks_in_checkpt &&
} else if (dev->checkpt_block_list) {
for (i = 0;
i < dev->blocks_in_checkpt &&
- dev->checkpt_block_list[i] >
=
0; i++) {
-
int
blk = dev->checkpt_block_list[i];
+ dev->checkpt_block_list[i] > 0; i++) {
+
u32
blk = dev->checkpt_block_list[i];
struct yaffs_block_info *bi = NULL;
if (dev->internal_start_block <= blk &&
struct yaffs_block_info *bi = NULL;
if (dev->internal_start_block <= blk &&