projects
/
yaffs2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add ability to hide lost_n_found directory
[yaffs2.git]
/
yaffs_yaffs2.c
diff --git
a/yaffs_yaffs2.c
b/yaffs_yaffs2.c
index 093e485ac2d064318db67b60b1eb5b508e90b555..f2f98a4c08770e8d3542de0f24a4f40fa6c51072 100644
(file)
--- a/
yaffs_yaffs2.c
+++ b/
yaffs_yaffs2.c
@@
-432,11
+432,12
@@
static int yaffs2_checkpt_obj_to_obj(struct yaffs_obj *obj,
obj->serial = cp->serial;
obj->n_data_chunks = cp->n_data_chunks;
obj->serial = cp->serial;
obj->n_data_chunks = cp->n_data_chunks;
- if (obj->variant_type == YAFFS_OBJECT_TYPE_FILE)
+ if (obj->variant_type == YAFFS_OBJECT_TYPE_FILE)
{
obj->variant.file_variant.file_size = cp->size_or_equiv_obj;
obj->variant.file_variant.file_size = cp->size_or_equiv_obj;
- else if (obj->variant_type == YAFFS_OBJECT_TYPE_HARDLINK)
+ obj->variant.file_variant.stored_size = cp->size_or_equiv_obj;
+ } else if (obj->variant_type == YAFFS_OBJECT_TYPE_HARDLINK) {
obj->variant.hardlink_variant.equiv_id = cp->size_or_equiv_obj;
obj->variant.hardlink_variant.equiv_id = cp->size_or_equiv_obj;
-
+ }
if (obj->hdr_chunk > 0)
obj->lazy_loaded = 1;
return 1;
if (obj->hdr_chunk > 0)
obj->lazy_loaded = 1;
return 1;
@@
-836,7
+837,7
@@
int yaffs2_handle_hole(struct yaffs_obj *obj, loff_t new_size)
* of hole marker.
*/
loff_t old_file_size;
* of hole marker.
*/
loff_t old_file_size;
-
in
t increase;
+
loff_
t increase;
int small_hole;
int result = YAFFS_OK;
struct yaffs_dev *dev = NULL;
int small_hole;
int result = YAFFS_OK;
struct yaffs_dev *dev = NULL;
@@
-873,7
+874,7
@@
int yaffs2_handle_hole(struct yaffs_obj *obj, loff_t new_size)
if (local_buffer) {
/* fill hole with zero bytes */
if (local_buffer) {
/* fill hole with zero bytes */
-
in
t pos = old_file_size;
+
loff_
t pos = old_file_size;
int this_write;
int written;
memset(local_buffer, 0, dev->data_bytes_per_chunk);
int this_write;
int written;
memset(local_buffer, 0, dev->data_bytes_per_chunk);
@@
-942,7
+943,7
@@
static inline int yaffs2_scan_chunk(struct yaffs_dev *dev,
struct yaffs_obj *in;
struct yaffs_obj *parent;
int equiv_id;
struct yaffs_obj *in;
struct yaffs_obj *parent;
int equiv_id;
-
in
t file_size;
+
loff_
t file_size;
int is_shrink;
int is_unlinked;
struct yaffs_ext_tags tags;
int is_shrink;
int is_unlinked;
struct yaffs_ext_tags tags;
@@
-1023,6
+1024,7
@@
static inline int yaffs2_scan_chunk(struct yaffs_dev *dev,
dev->n_free_chunks++;
} else if (tags.obj_id > YAFFS_MAX_OBJECT_ID ||
tags.chunk_id > YAFFS_MAX_CHUNK_ID ||
dev->n_free_chunks++;
} else if (tags.obj_id > YAFFS_MAX_OBJECT_ID ||
tags.chunk_id > YAFFS_MAX_CHUNK_ID ||
+ tags.obj_id == YAFFS_OBJECTID_SUMMARY ||
(tags.chunk_id > 0 &&
tags.n_bytes > dev->data_bytes_per_chunk) ||
tags.seq_number != bi->seq_number) {
(tags.chunk_id > 0 &&
tags.n_bytes > dev->data_bytes_per_chunk) ||
tags.seq_number != bi->seq_number) {
@@
-1033,8
+1035,8
@@
static inline int yaffs2_scan_chunk(struct yaffs_dev *dev,
dev->n_free_chunks++;
} else if (tags.chunk_id > 0) {
/* chunk_id > 0 so it is a data chunk... */
dev->n_free_chunks++;
} else if (tags.chunk_id > 0) {
/* chunk_id > 0 so it is a data chunk... */
-
unsigned in
t endpos;
-
u32
chunk_base = (tags.chunk_id - 1) *
+
loff_
t endpos;
+
loff_t
chunk_base = (tags.chunk_id - 1) *
dev->data_bytes_per_chunk;
*found_chunks = 1;
dev->data_bytes_per_chunk;
*found_chunks = 1;
@@
-1067,9
+1069,9
@@
static inline int yaffs2_scan_chunk(struct yaffs_dev *dev,
endpos = chunk_base + tags.n_bytes;
if (!in->valid &&
endpos = chunk_base + tags.n_bytes;
if (!in->valid &&
- in->variant.file_variant.s
cann
ed_size < endpos) {
+ in->variant.file_variant.s
tor
ed_size < endpos) {
in->variant.file_variant.
in->variant.file_variant.
- s
cann
ed_size = endpos;
+ s
tor
ed_size = endpos;
in->variant.file_variant.
file_size = endpos;
}
in->variant.file_variant.
file_size = endpos;
}
@@
-1156,9
+1158,9
@@
static inline int yaffs2_scan_chunk(struct yaffs_dev *dev,
(tags.extra_available &&
tags.extra_obj_type == YAFFS_OBJECT_TYPE_FILE)
)) {
(tags.extra_available &&
tags.extra_obj_type == YAFFS_OBJECT_TYPE_FILE)
)) {
-
u32
this_size = (oh) ?
-
oh->file_size
:
- tags.extra_
length
;
+
loff_t
this_size = (oh) ?
+
yaffs_oh_to_size(oh)
:
+ tags.extra_
file_size
;
u32 parent_obj_id = (oh) ?
oh->parent_obj_id :
tags.extra_parent_id;
u32 parent_obj_id = (oh) ?
oh->parent_obj_id :
tags.extra_parent_id;
@@
-1192,12
+1194,14
@@
static inline int yaffs2_scan_chunk(struct yaffs_dev *dev,
}
if (!in->valid && in->variant_type !=
}
if (!in->valid && in->variant_type !=
- (oh ? oh->type : tags.extra_obj_type))
+ (oh ? oh->type : tags.extra_obj_type))
{
yaffs_trace(YAFFS_TRACE_ERROR,
yaffs_trace(YAFFS_TRACE_ERROR,
- "yaffs tragedy: Bad
object
type, %d != %d, for object %d at chunk %d during scan",
+ "yaffs tragedy: Bad type, %d != %d, for object %d at chunk %d during scan",
oh ? oh->type : tags.extra_obj_type,
in->variant_type, tags.obj_id,
chunk);
oh ? oh->type : tags.extra_obj_type,
in->variant_type, tags.obj_id,
chunk);
+ in = yaffs_retype_obj(in, oh ? oh->type : tags.extra_obj_type);
+ }
if (!in->valid &&
(tags.obj_id == YAFFS_OBJECTID_ROOT ||
if (!in->valid &&
(tags.obj_id == YAFFS_OBJECTID_ROOT ||
@@
-1232,7
+1236,7
@@
static inline int yaffs2_scan_chunk(struct yaffs_dev *dev,
parent = yaffs_find_or_create_by_number(dev,
oh->parent_obj_id,
YAFFS_OBJECT_TYPE_DIRECTORY);
parent = yaffs_find_or_create_by_number(dev,
oh->parent_obj_id,
YAFFS_OBJECT_TYPE_DIRECTORY);
- file_size =
oh->file_size
;
+ file_size =
yaffs_oh_to_size(oh)
;
is_shrink = oh->is_shrink;
equiv_id = oh->equiv_id;
} else {
is_shrink = oh->is_shrink;
equiv_id = oh->equiv_id;
} else {
@@
-1240,7
+1244,7
@@
static inline int yaffs2_scan_chunk(struct yaffs_dev *dev,
parent = yaffs_find_or_create_by_number(dev,
tags.extra_parent_id,
YAFFS_OBJECT_TYPE_DIRECTORY);
parent = yaffs_find_or_create_by_number(dev,
tags.extra_parent_id,
YAFFS_OBJECT_TYPE_DIRECTORY);
- file_size = tags.extra_
length
;
+ file_size = tags.extra_
file_size
;
is_shrink = tags.extra_is_shrink;
equiv_id = tags.extra_equiv_id;
in->lazy_loaded = 1;
is_shrink = tags.extra_is_shrink;
equiv_id = tags.extra_equiv_id;
in->lazy_loaded = 1;
@@
-1296,7
+1300,7
@@
static inline int yaffs2_scan_chunk(struct yaffs_dev *dev,
break;
case YAFFS_OBJECT_TYPE_FILE:
file_var = &in->variant.file_variant;
break;
case YAFFS_OBJECT_TYPE_FILE:
file_var = &in->variant.file_variant;
- if (file_var->s
cann
ed_size < file_size) {
+ if (file_var->s
tor
ed_size < file_size) {
/* This covers the case where the file
* size is greater than the data held.
* This will happen if the file is
/* This covers the case where the file
* size is greater than the data held.
* This will happen if the file is
@@
-1304,7
+1308,7
@@
static inline int yaffs2_scan_chunk(struct yaffs_dev *dev,
* current data extents.
*/
file_var->file_size = file_size;
* current data extents.
*/
file_var->file_size = file_size;
- file_var->s
cann
ed_size = file_size;
+ file_var->s
tor
ed_size = file_size;
}
if (file_var->shrink_size > file_size)
}
if (file_var->shrink_size > file_size)
@@
-1348,7
+1352,6
@@
int yaffs2_scan_backwards(struct yaffs_dev *dev)
int n_to_scan = 0;
enum yaffs_block_state state;
int c;
int n_to_scan = 0;
enum yaffs_block_state state;
int c;
- int deleted;
LIST_HEAD(hard_list);
struct yaffs_block_info *bi;
u32 seq_number;
LIST_HEAD(hard_list);
struct yaffs_block_info *bi;
u32 seq_number;
@@
-1438,7
+1441,7
@@
int yaffs2_scan_backwards(struct yaffs_dev *dev)
bi++;
}
bi++;
}
- yaffs_trace(YAFFS_TRACE_
SCAN
, "%d blocks to be sorted...", n_to_scan);
+ yaffs_trace(YAFFS_TRACE_
ALWAYS
, "%d blocks to be sorted...", n_to_scan);
cond_resched();
cond_resched();
@@
-1466,13
+1469,12
@@
int yaffs2_scan_backwards(struct yaffs_dev *dev)
/* get the block to scan in the correct order */
blk = block_index[block_iter].block;
bi = yaffs_get_block_info(dev, blk);
/* get the block to scan in the correct order */
blk = block_index[block_iter].block;
bi = yaffs_get_block_info(dev, blk);
- deleted = 0;
summary_available = yaffs_summary_read(dev, dev->sum_tags, blk);
/* For each chunk in each block that needs scanning.... */
found_chunks = 0;
summary_available = yaffs_summary_read(dev, dev->sum_tags, blk);
/* For each chunk in each block that needs scanning.... */
found_chunks = 0;
- if(summary_available)
+ if
(summary_available)
c = dev->chunks_per_summary - 1;
else
c = dev->param.chunks_per_block - 1;
c = dev->chunks_per_summary - 1;
else
c = dev->param.chunks_per_block - 1;