#include "yaffs_nameval.h"
#include "yaffs_allocator.h"
#include "yaffs_attribs.h"
+#include "yaffs_summary.h"
/* Note YAFFS_GC_GOOD_ENOUGH must be <= YAFFS_GC_PASSIVE_THRESHOLD */
#define YAFFS_GC_GOOD_ENOUGH 2
yaffs_trace(YAFFS_TRACE_ERROR,
"**>> yaffs write required %d attempts",
attempts);
- dev->n_retired_writes += (attempts - 1);
+ dev->n_retried_writes += (attempts - 1);
}
return chunk;
{
memset(obj->short_name, 0, sizeof(obj->short_name));
if (name &&
- strnlen(name, YAFFS_SHORT_NAME_LENGTH + 1) <=
+ yaffs_strnlen(name, YAFFS_SHORT_NAME_LENGTH + 1) <=
YAFFS_SHORT_NAME_LENGTH)
- strcpy(obj->short_name, name);
+ yaffs_strcpy(obj->short_name, name);
else
obj->short_name[0] = _Y('\0');
obj->sum = yaffs_calc_name_sum(name);
if (!str)
str = _Y("");
- len = strnlen(str, YAFFS_MAX_ALIAS_LENGTH);
+ len = yaffs_strnlen(str, YAFFS_MAX_ALIAS_LENGTH);
new_str = kmalloc((len + 1) * sizeof(YCHAR), GFP_NOFS);
if (new_str) {
- strncpy(new_str, str, len);
+ yaffs_strncpy(new_str, str, len);
new_str[len] = 0;
}
return new_str;
bi->has_shrink_hdr = 0;
bi->skip_erased_check = 1; /* Clean, so no need to check */
bi->gc_prioritise = 0;
+ bi->has_summary=0;
+
yaffs_clear_chunk_bits(dev, block_no);
yaffs_trace(YAFFS_TRACE_ERASE, "Erased block %d", block_no);
dev->gc_disable = 1;
+ yaffs_summary_gc(dev, block);
+
if (is_checkpt_block || !yaffs_still_some_chunks(dev, block)) {
yaffs_trace(YAFFS_TRACE_TRACING,
"Collecting block %d that has no chunks in use",
n--;
}
} else {
- strncpy(name, oh_name + 1, buff_size - 1);
+ yaffs_strncpy(name, oh_name + 1, buff_size - 1);
}
} else {
#else
{
#endif
- strncpy(name, oh_name, buff_size - 1);
+ yaffs_strncpy(name, oh_name, buff_size - 1);
}
}
} else {
/* Unicode name, so save starting at the second YCHAR */
*oh_name = 0;
- strncpy(oh_name + 1, name, YAFFS_MAX_NAME_LENGTH - 2);
+ yaffs_strncpy(oh_name + 1, name, YAFFS_MAX_NAME_LENGTH - 2);
}
} else {
#else
{
#endif
- strncpy(oh_name, name, YAFFS_MAX_NAME_LENGTH - 1);
+ yaffs_strncpy(oh_name, name, YAFFS_MAX_NAME_LENGTH - 1);
}
}
YCHAR old_name[YAFFS_MAX_NAME_LENGTH + 1];
struct yaffs_obj_hdr *oh = NULL;
- strcpy(old_name, _Y("silly old name"));
+ yaffs_strcpy(old_name, _Y("silly old name"));
if (in->fake && in != dev->root_dir && !force && !xmod)
return ret_val;
alias = in->variant.symlink_variant.alias;
if (!alias)
alias = _Y("no alias");
- strncpy(oh->alias, alias, YAFFS_MAX_ALIAS_LENGTH);
+ yaffs_strncpy(oh->alias, alias, YAFFS_MAX_ALIAS_LENGTH);
oh->alias[YAFFS_MAX_ALIAS_LENGTH] = 0;
break;
}
*/
if (old_dir == new_dir &&
old_name && new_name &&
- strcmp(old_name, new_name) == 0)
+ yaffs_strcmp(old_name, new_name) == 0)
force = 1;
#endif
- if (strnlen(new_name, YAFFS_MAX_NAME_LENGTH + 1) >
+ if (yaffs_strnlen(new_name, YAFFS_MAX_NAME_LENGTH + 1) >
YAFFS_MAX_NAME_LENGTH)
/* ENAMETOOLONG */
return YAFFS_FAIL;
/* Special case for lost-n-found */
if (l->obj_id == YAFFS_OBJECTID_LOSTNFOUND) {
- if (!strcmp(name, YAFFS_LOSTNFOUND_NAME))
+ if (!yaffs_strcmp(name, YAFFS_LOSTNFOUND_NAME))
return l;
} else if (l->sum == sum || l->hdr_chunk <= 0) {
/* LostnFound chunk called Objxxx
*/
yaffs_get_obj_name(l, buffer,
YAFFS_MAX_NAME_LENGTH + 1);
- if (strncmp(name, buffer, YAFFS_MAX_NAME_LENGTH) == 0)
+ if (yaffs_strncmp(name, buffer, YAFFS_MAX_NAME_LENGTH) == 0)
return l;
}
}
int buffer_size)
{
/* Create an object name if we could not find one. */
- if (strnlen(name, YAFFS_MAX_NAME_LENGTH) == 0) {
+ if (yaffs_strnlen(name, YAFFS_MAX_NAME_LENGTH) == 0) {
YCHAR local_name[20];
YCHAR num_string[20];
YCHAR *x = &num_string[19];
v /= 10;
}
/* make up a name */
- strcpy(local_name, YAFFS_LOSTNFOUND_PREFIX);
- strcat(local_name, x);
- strncpy(name, local_name, buffer_size - 1);
+ yaffs_strcpy(local_name, YAFFS_LOSTNFOUND_PREFIX);
+ yaffs_strcat(local_name, x);
+ yaffs_strncpy(name, local_name, buffer_size - 1);
}
}
memset(name, 0, buffer_size * sizeof(YCHAR));
yaffs_check_obj_details_loaded(obj);
if (obj->obj_id == YAFFS_OBJECTID_LOSTNFOUND) {
- strncpy(name, YAFFS_LOSTNFOUND_NAME, buffer_size - 1);
+ yaffs_strncpy(name, YAFFS_LOSTNFOUND_NAME, buffer_size - 1);
} else if (obj->short_name[0]) {
- strcpy(name, obj->short_name);
+ yaffs_strcpy(name, obj->short_name);
} else if (obj->hdr_chunk > 0) {
int result;
u8 *buffer = yaffs_get_temp_buffer(obj->my_dev);
yaffs_fix_null_name(obj, name, buffer_size);
- return strnlen(name, YAFFS_MAX_NAME_LENGTH);
+ return yaffs_strnlen(name, YAFFS_MAX_NAME_LENGTH);
}
int yaffs_get_obj_length(struct yaffs_obj *obj)
if (obj->variant_type == YAFFS_OBJECT_TYPE_SYMLINK) {
if (!obj->variant.symlink_variant.alias)
return 0;
- return strnlen(obj->variant.symlink_variant.alias,
+ return yaffs_strnlen(obj->variant.symlink_variant.alias,
YAFFS_MAX_ALIAS_LENGTH);
} else {
/* Only a directory should drop through to here */
if (!init_failed && !yaffs_create_initial_dir(dev))
init_failed = 1;
+ if(!init_failed && dev->param.is_yaffs2 &&
+ !dev->param.disable_summary &&
+ !yaffs_summary_init(dev))
+ init_failed = 1;
+
if (!init_failed) {
/* Now scan the flash. */
if (dev->param.is_yaffs2) {
dev->n_page_writes = 0;
dev->n_erasures = 0;
dev->n_gc_copies = 0;
- dev->n_retired_writes = 0;
+ dev->n_retried_writes = 0;
dev->n_retired_blocks = 0;
yaffs_deinit_blocks(dev);
yaffs_deinit_tnodes_and_objs(dev);
+ yaffs_summary_deinit(dev);
+
if (dev->param.n_caches > 0 && dev->cache) {
for (i = 0; i < dev->param.n_caches; i++) {