X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_guts.c;h=789f8e2bf6cc0b3aca70ac1e15cda590b58216dc;hp=24126a140abfbe225678f3a907d89b6b684ea7a9;hb=refs%2Fheads%2Fcase-insensitive;hpb=1570788072c1154eff93282e0bb8564de40bd8aa diff --git a/yaffs_guts.c b/yaffs_guts.c index 24126a1..789f8e2 100644 --- a/yaffs_guts.c +++ b/yaffs_guts.c @@ -598,7 +598,7 @@ static int yaffs_write_new_chunk(struct yaffs_dev *dev, 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; @@ -672,15 +672,13 @@ static u16 yaffs_calc_name_sum(const YCHAR *name) void yaffs_set_obj_name(struct yaffs_obj *obj, const YCHAR * name) { -#ifndef CONFIG_YAFFS_NO_SHORT_NAMES 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'); -#endif obj->sum = yaffs_calc_name_sum(name); } @@ -2036,10 +2034,10 @@ YCHAR *yaffs_clone_str(const YCHAR *str) 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; @@ -2383,6 +2381,8 @@ 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_summary=0; + yaffs_clear_chunk_bits(dev, block_no); yaffs_trace(YAFFS_TRACE_ERASE, "Erased block %d", block_no); @@ -2558,6 +2558,8 @@ static int yaffs_gc_block(struct yaffs_dev *dev, int block, int whole_block) 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", @@ -3208,13 +3210,13 @@ static void yaffs_load_name_from_oh(struct yaffs_dev *dev, YCHAR *name, 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); } } @@ -3251,13 +3253,13 @@ static void yaffs_load_oh_from_name(struct yaffs_dev *dev, YCHAR *oh_name, } 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); } } @@ -3281,7 +3283,7 @@ int yaffs_update_oh(struct yaffs_obj *in, const YCHAR *name, int force, 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; @@ -3350,7 +3352,7 @@ int yaffs_update_oh(struct yaffs_obj *in, const YCHAR *name, int force, 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; } @@ -4061,11 +4063,11 @@ int yaffs_rename_obj(struct yaffs_obj *old_dir, const YCHAR *old_name, */ 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; @@ -4341,7 +4343,7 @@ struct yaffs_obj *yaffs_find_by_name(struct yaffs_obj *directory, /* 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 @@ -4349,7 +4351,7 @@ struct yaffs_obj *yaffs_find_by_name(struct yaffs_obj *directory, */ 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; } } @@ -4392,7 +4394,7 @@ static void yaffs_fix_null_name(struct yaffs_obj *obj, YCHAR *name, 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]; @@ -4404,9 +4406,9 @@ static void yaffs_fix_null_name(struct yaffs_obj *obj, YCHAR *name, 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); } } @@ -4414,13 +4416,11 @@ int yaffs_get_obj_name(struct yaffs_obj *obj, YCHAR *name, int buffer_size) { 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); -#ifndef CONFIG_YAFFS_NO_SHORT_NAMES - else if (obj->short_name[0]) - strcpy(name, obj->short_name); -#endif - else if (obj->hdr_chunk > 0) { + if (obj->obj_id == YAFFS_OBJECTID_LOSTNFOUND) { + yaffs_strncpy(name, YAFFS_LOSTNFOUND_NAME, buffer_size - 1); + } else if (obj->short_name[0]) { + yaffs_strcpy(name, obj->short_name); + } else if (obj->hdr_chunk > 0) { int result; u8 *buffer = yaffs_get_temp_buffer(obj->my_dev); @@ -4441,7 +4441,7 @@ int yaffs_get_obj_name(struct yaffs_obj *obj, YCHAR *name, int buffer_size) 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) @@ -4454,7 +4454,7 @@ 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 */ @@ -4534,8 +4534,6 @@ static int yaffs_check_dev_fns(const struct yaffs_dev *dev) if (!dev->param.erase_fn || !dev->param.initialise_flash_fn) return 0; -#ifdef CONFIG_YAFFS_YAFFS2 - /* Can use the "with tags" style interface for yaffs1 or yaffs2 */ if (dev->param.write_chunk_tags_fn && dev->param.read_chunk_tags_fn && @@ -4543,7 +4541,6 @@ static int yaffs_check_dev_fns(const struct yaffs_dev *dev) !dev->param.read_chunk_fn && dev->param.bad_block_fn && dev->param.query_block_fn) return 1; -#endif /* Can use the "spare" style interface for yaffs1 */ if (!dev->param.is_yaffs2 && @@ -4814,7 +4811,9 @@ int yaffs_guts_initialise(struct yaffs_dev *dev) if (!init_failed && !yaffs_create_initial_dir(dev)) init_failed = 1; - if(!init_failed && dev->param.is_yaffs2 && !yaffs_summary_init(dev)) + if(!init_failed && dev->param.is_yaffs2 && + !dev->param.disable_summary && + !yaffs_summary_init(dev)) init_failed = 1; if (!init_failed) { @@ -4879,7 +4878,7 @@ int yaffs_guts_initialise(struct yaffs_dev *dev) 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;