projects
/
yaffs2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Remove trace that should not be in mounting.
[yaffs2.git]
/
yaffs_guts.c
diff --git
a/yaffs_guts.c
b/yaffs_guts.c
index 146fb2b75ca5a7f3ae78cedd6cfda356da4d61dd..df6cb001995f0cdc1d7364c9d5b51221dd274008 100644
(file)
--- a/
yaffs_guts.c
+++ b/
yaffs_guts.c
@@
-44,8
+44,8
@@
static int yaffs_wr_data_obj(struct yaffs_obj *in, int inode_chunk,
/* Function to calculate chunk and offset */
/* Function to calculate chunk and offset */
-
static inline
void yaffs_addr_to_chunk(struct yaffs_dev *dev, loff_t addr,
-
int *chunk_out, u32 *offset_out)
+void yaffs_addr_to_chunk(struct yaffs_dev *dev, loff_t addr,
+ int *chunk_out, u32 *offset_out)
{
int chunk;
u32 offset;
{
int chunk;
u32 offset;
@@
-177,7
+177,8
@@
void yaffs_release_temp_buffer(struct yaffs_dev *dev, u8 *buffer)
if (buffer) {
/* assume it is an unmanaged one. */
if (buffer) {
/* assume it is an unmanaged one. */
- yaffs_trace(YAFFS_TRACE_BUFFERS, "Releasing unmanaged temp buffer");
+ yaffs_trace(YAFFS_TRACE_BUFFERS,
+ "Releasing unmanaged temp buffer");
kfree(buffer);
dev->unmanaged_buffer_deallocs++;
}
kfree(buffer);
dev->unmanaged_buffer_deallocs++;
}
@@
-280,7
+281,8
@@
static void yaffs_handle_chunk_wr_error(struct yaffs_dev *dev, int nand_chunk,
static inline int yaffs_hash_fn(int n)
{
static inline int yaffs_hash_fn(int n)
{
- n = abs(n);
+ if (n < 0)
+ n = -n;
return n % YAFFS_NOBJECT_BUCKETS;
}
return n % YAFFS_NOBJECT_BUCKETS;
}
@@
-696,6
+698,11
@@
void yaffs_set_obj_name_from_oh(struct yaffs_obj *obj,
#endif
}
#endif
}
+loff_t yaffs_max_file_size(struct yaffs_dev *dev)
+{
+ return ((loff_t) YAFFS_MAX_CHUNK_ID) * dev->data_bytes_per_chunk;
+}
+
/*-------------------- TNODES -------------------
* List of spare tnodes
/*-------------------- TNODES -------------------
* List of spare tnodes
@@
-1953,7
+1960,8
@@
struct yaffs_obj *yaffs_new_obj(struct yaffs_dev *dev, int number,
case YAFFS_OBJECT_TYPE_FILE:
the_obj->variant.file_variant.file_size = 0;
the_obj->variant.file_variant.scanned_size = 0;
case YAFFS_OBJECT_TYPE_FILE:
the_obj->variant.file_variant.file_size = 0;
the_obj->variant.file_variant.scanned_size = 0;
- the_obj->variant.file_variant.shrink_size = ~0; /* max */
+ the_obj->variant.file_variant.shrink_size =
+ yaffs_max_file_size(dev);
the_obj->variant.file_variant.top_level = 0;
the_obj->variant.file_variant.top = tn;
break;
the_obj->variant.file_variant.top_level = 0;
the_obj->variant.file_variant.top = tn;
break;
@@
-2381,7
+2389,7
@@
void yaffs_block_became_dirty(struct yaffs_dev *dev, int block_no)
bi->has_shrink_hdr = 0;
bi->skip_erased_check = 1; /* Clean, so no need to check */
bi->gc_prioritise = 0;
bi->has_shrink_hdr = 0;
bi->skip_erased_check = 1; /* Clean, so no need to check */
bi->gc_prioritise = 0;
- bi->has_summary
=
0;
+ bi->has_summary
=
0;
yaffs_clear_chunk_bits(dev, block_no);
yaffs_clear_chunk_bits(dev, block_no);
@@
-2496,7
+2504,7
@@
static inline int yaffs_gc_process_chunk(struct yaffs_dev *dev,
/* Update file size */
if (object->variant_type == YAFFS_OBJECT_TYPE_FILE) {
/* Update file size */
if (object->variant_type == YAFFS_OBJECT_TYPE_FILE) {
- yaffs_oh_size_load(
oh,
+ yaffs_oh_size_load(oh,
object->variant.file_variant.file_size);
tags.extra_file_size =
object->variant.file_variant.file_size;
object->variant.file_variant.file_size);
tags.extra_file_size =
object->variant.file_variant.file_size;
@@
-3339,8
+3347,8
@@
int yaffs_update_oh(struct yaffs_obj *in, const YCHAR *name, int force,
break;
case YAFFS_OBJECT_TYPE_FILE:
if (oh->parent_obj_id != YAFFS_OBJECTID_DELETED &&
break;
case YAFFS_OBJECT_TYPE_FILE:
if (oh->parent_obj_id != YAFFS_OBJECTID_DELETED &&
-
oh->parent_obj_id != YAFFS_OBJECTID_UNLINKED)
- file_size = in->variant.file_variant.file_size;
+ oh->parent_obj_id != YAFFS_OBJECTID_UNLINKED)
+
file_size = in->variant.file_variant.file_size;
yaffs_oh_size_load(oh, file_size);
break;
case YAFFS_OBJECT_TYPE_HARDLINK:
yaffs_oh_size_load(oh, file_size);
break;
case YAFFS_OBJECT_TYPE_HARDLINK:
@@
-3504,7
+3512,7
@@
int yaffs_file_rd(struct yaffs_obj *in, u8 * buffer, loff_t offset, int n_bytes)
}
int yaffs_do_file_wr(struct yaffs_obj *in, const u8 *buffer, loff_t offset,
}
int yaffs_do_file_wr(struct yaffs_obj *in, const u8 *buffer, loff_t offset,
- int n_bytes, int write_t
r
hrough)
+ int n_bytes, int write_through)
{
int chunk;
{
int chunk;
@@
-3513,10
+3521,10
@@
int yaffs_do_file_wr(struct yaffs_obj *in, const u8 *buffer, loff_t offset,
int n = n_bytes;
int n_done = 0;
int n_writeback;
int n = n_bytes;
int n_done = 0;
int n_writeback;
-
in
t start_write = offset;
+
loff_
t start_write = offset;
int chunk_written = 0;
u32 n_bytes_read;
int chunk_written = 0;
u32 n_bytes_read;
-
u32
chunk_start;
+
loff_t
chunk_start;
struct yaffs_dev *dev;
dev = in->my_dev;
struct yaffs_dev *dev;
dev = in->my_dev;
@@
-3524,11
+3532,12
@@
int yaffs_do_file_wr(struct yaffs_obj *in, const u8 *buffer, loff_t offset,
while (n > 0 && chunk_written >= 0) {
yaffs_addr_to_chunk(dev, offset, &chunk, &start);
while (n > 0 && chunk_written >= 0) {
yaffs_addr_to_chunk(dev, offset, &chunk, &start);
- if (chunk * dev->data_bytes_per_chunk + start != offset ||
+ if (((loff_t)chunk) *
+ dev->data_bytes_per_chunk + start != offset ||
start >= dev->data_bytes_per_chunk) {
yaffs_trace(YAFFS_TRACE_ERROR,
start >= dev->data_bytes_per_chunk) {
yaffs_trace(YAFFS_TRACE_ERROR,
- "AddrToChunk of offset %d gives chunk %d start %d",
-
(int)
offset, chunk, start);
+ "AddrToChunk of offset %
ll
d gives chunk %d start %d",
+ offset, chunk, start);
}
chunk++; /* File pos to chunk in file offset */
}
chunk++; /* File pos to chunk in file offset */
@@
-3545,7
+3554,8
@@
int yaffs_do_file_wr(struct yaffs_obj *in, const u8 *buffer, loff_t offset,
* before.
*/
* before.
*/
- chunk_start = ((chunk - 1) * dev->data_bytes_per_chunk);
+ chunk_start = (((loff_t)(chunk - 1)) *
+ dev->data_bytes_per_chunk);
if (chunk_start > in->variant.file_variant.file_size)
n_bytes_read = 0; /* Past end of file */
if (chunk_start > in->variant.file_variant.file_size)
n_bytes_read = 0; /* Past end of file */
@@
-3613,7
+3623,7
@@
int yaffs_do_file_wr(struct yaffs_obj *in, const u8 *buffer, loff_t offset,
cache->locked = 0;
cache->n_bytes = n_writeback;
cache->locked = 0;
cache->n_bytes = n_writeback;
- if (write_t
r
hrough) {
+ if (write_through) {
chunk_written =
yaffs_wr_data_obj
(cache->object,
chunk_written =
yaffs_wr_data_obj
(cache->object,
@@
-3673,25
+3683,34
@@
int yaffs_do_file_wr(struct yaffs_obj *in, const u8 *buffer, loff_t offset,
}
int yaffs_wr_file(struct yaffs_obj *in, const u8 *buffer, loff_t offset,
}
int yaffs_wr_file(struct yaffs_obj *in, const u8 *buffer, loff_t offset,
- int n_bytes, int write_t
r
hrough)
+ int n_bytes, int write_through)
{
yaffs2_handle_hole(in, offset);
{
yaffs2_handle_hole(in, offset);
- return yaffs_do_file_wr(in, buffer, offset, n_bytes, write_t
r
hrough);
+ return yaffs_do_file_wr(in, buffer, offset, n_bytes, write_through);
}
/* ---------------------- File resizing stuff ------------------ */
}
/* ---------------------- File resizing stuff ------------------ */
-static void yaffs_prune_chunks(struct yaffs_obj *in,
in
t new_size)
+static void yaffs_prune_chunks(struct yaffs_obj *in,
loff_
t new_size)
{
struct yaffs_dev *dev = in->my_dev;
{
struct yaffs_dev *dev = in->my_dev;
-
in
t old_size = in->variant.file_variant.file_size;
+
loff_
t old_size = in->variant.file_variant.file_size;
int i;
int chunk_id;
int i;
int chunk_id;
-
int last_del = 1 + (old_size - 1) / dev->data_bytes_per_chunk
;
- int
start_del = 1 + (new_size + dev->data_bytes_per_chunk - 1) /
-
dev->data_bytes_per_chunk
;
+
u32 dummy
;
+ int
last_del;
+
int start_del
;
+ if (old_size > 0)
+ yaffs_addr_to_chunk(dev, old_size - 1, &last_del, &dummy);
+ else
+ last_del = 0;
+
+ yaffs_addr_to_chunk(dev, new_size + dev->data_bytes_per_chunk - 1,
+ &start_del, &dummy);
+ last_del++;
+ start_del++;
/* Delete backwards so that we don't end up with holes if
* power is lost part-way through the operation.
/* Delete backwards so that we don't end up with holes if
* power is lost part-way through the operation.
@@
-4355,7
+4374,7
@@
struct yaffs_obj *yaffs_find_by_name(struct yaffs_obj *directory,
*/
yaffs_get_obj_name(l, buffer,
YAFFS_MAX_NAME_LENGTH + 1);
*/
yaffs_get_obj_name(l, buffer,
YAFFS_MAX_NAME_LENGTH + 1);
- if (
strncmp(name, buffer, YAFFS_MAX_NAME_LENGTH) == 0
)
+ if (
!strncmp(name, buffer, YAFFS_MAX_NAME_LENGTH)
)
return l;
}
}
return l;
}
}
@@
-4815,7
+4834,7
@@
int yaffs_guts_initialise(struct yaffs_dev *dev)
if (!init_failed && !yaffs_create_initial_dir(dev))
init_failed = 1;
if (!init_failed && !yaffs_create_initial_dir(dev))
init_failed = 1;
- if(!init_failed && dev->param.is_yaffs2 &&
+ if
(!init_failed && dev->param.is_yaffs2 &&
!dev->param.disable_summary &&
!yaffs_summary_init(dev))
init_failed = 1;
!dev->param.disable_summary &&
!yaffs_summary_init(dev))
init_failed = 1;
@@
-5001,7
+5020,13
@@
void yaffs_oh_size_load(struct yaffs_obj_hdr *oh, loff_t fsize)
loff_t yaffs_oh_to_size(struct yaffs_obj_hdr *oh)
{
loff_t yaffs_oh_to_size(struct yaffs_obj_hdr *oh)
{
- loff_t retval = (((loff_t) oh->file_size_high) << 32) |
+ loff_t retval;
+
+ if (~(oh->file_size_high))
+ retval = (((loff_t) oh->file_size_high) << 32) |
(((loff_t) oh->file_size_low) & 0xFFFFFFFF);
(((loff_t) oh->file_size_low) & 0xFFFFFFFF);
+ else
+ retval = (loff_t) oh->file_size_low;
+
return retval;
}
return retval;
}