#include "yaffs_trace.h"
#include "yaffs_guts.h"
-#include "yaffs_tagsvalidity.h"
#include "yaffs_getblockinfo.h"
#include "yaffs_tagscompat.h"
#include "yaffs_nand.h"
memset(dev->temp_buffer, 0, sizeof(dev->temp_buffer));
for (i = 0; buf && i < YAFFS_N_TEMP_BUFFERS; i++) {
- dev->temp_buffer[i].line = 0; /* not in use */
- dev->temp_buffer[i].buffer = buf =
- kmalloc(dev->param.total_bytes_per_chunk, GFP_NOFS);
+ dev->temp_buffer[i].in_use = 0;
+ buf = kmalloc(dev->param.total_bytes_per_chunk, GFP_NOFS);
+ dev->temp_buffer[i].buffer = buf;
}
return buf ? YAFFS_OK : YAFFS_FAIL;
}
-u8 *yaffs_get_temp_buffer(struct yaffs_dev * dev, int line_no)
+u8 *yaffs_get_temp_buffer(struct yaffs_dev * dev)
{
int i;
- int j;
dev->temp_in_use++;
if (dev->temp_in_use > dev->max_temp)
dev->max_temp = dev->temp_in_use;
for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
- if (dev->temp_buffer[i].line == 0) {
- dev->temp_buffer[i].line = line_no;
- if ((i + 1) > dev->max_temp) {
- dev->max_temp = i + 1;
- for (j = 0; j <= i; j++)
- dev->temp_buffer[j].max_line =
- dev->temp_buffer[j].line;
- }
-
+ if (dev->temp_buffer[i].in_use == 0) {
+ dev->temp_buffer[i].in_use = 1;
return dev->temp_buffer[i].buffer;
}
}
- yaffs_trace(YAFFS_TRACE_BUFFERS,
- "Out of temp buffers at line %d, other held by lines:",
- line_no);
- for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++)
- yaffs_trace(YAFFS_TRACE_BUFFERS,
- " %d", dev->temp_buffer[i].line);
-
+ yaffs_trace(YAFFS_TRACE_BUFFERS, "Out of temp buffers");
/*
* If we got here then we have to allocate an unmanaged one
* This is not good.
}
-void yaffs_release_temp_buffer(struct yaffs_dev *dev, u8 *buffer, int line_no)
+void yaffs_release_temp_buffer(struct yaffs_dev *dev, u8 *buffer)
{
int i;
for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
if (dev->temp_buffer[i].buffer == buffer) {
- dev->temp_buffer[i].line = 0;
+ dev->temp_buffer[i].in_use = 0;
return;
}
}
if (buffer) {
/* assume it is an unmanaged one. */
- yaffs_trace(YAFFS_TRACE_BUFFERS,
- "Releasing unmanaged temp buffer in line %d",
- line_no);
+ yaffs_trace(YAFFS_TRACE_BUFFERS, "Releasing unmanaged temp buffer");
kfree(buffer);
dev->unmanaged_buffer_deallocs++;
}
{
/* Horrible, slow implementation */
while (n_bytes--) {
- if (*buffer != 0xFF)
+ if (*buffer != 0xff)
return 0;
buffer++;
}
static int yaffs_check_chunk_erased(struct yaffs_dev *dev, int nand_chunk)
{
int retval = YAFFS_OK;
- u8 *data = yaffs_get_temp_buffer(dev, __LINE__);
+ u8 *data = yaffs_get_temp_buffer(dev);
struct yaffs_ext_tags tags;
int result;
retval = YAFFS_FAIL;
}
- yaffs_release_temp_buffer(dev, data, __LINE__);
+ yaffs_release_temp_buffer(dev, data);
return retval;
{
int retval = YAFFS_OK;
struct yaffs_ext_tags temp_tags;
- u8 *buffer = yaffs_get_temp_buffer(dev, __LINE__);
+ u8 *buffer = yaffs_get_temp_buffer(dev);
int result;
result = yaffs_rd_chunk_tags_nand(dev, nand_chunk, buffer, &temp_tags);
temp_tags.n_bytes != tags->n_bytes)
retval = YAFFS_FAIL;
- yaffs_release_temp_buffer(dev, buffer, __LINE__);
+ yaffs_release_temp_buffer(dev, buffer);
return retval;
}
int chunk_id =
flash_block * dev->param.chunks_per_block;
- u8 *buffer = yaffs_get_temp_buffer(dev, __LINE__);
+ u8 *buffer = yaffs_get_temp_buffer(dev);
memset(buffer, 0xff, dev->data_bytes_per_chunk);
- yaffs_init_tags(&tags);
+ memset(&tags, 0, sizeof(tags));
tags.seq_number = YAFFS_SEQUENCE_BAD_BLOCK;
if (dev->param.write_chunk_tags_fn(dev, chunk_id -
dev->chunk_offset,
"yaffs: Failed to write bad block marker to block %d",
flash_block);
- yaffs_release_temp_buffer(dev, buffer, __LINE__);
+ yaffs_release_temp_buffer(dev, buffer);
}
}
int matching_chunk;
int ret_val = YAFFS_OK;
- yaffs_init_tags(&tags);
+ memset(&tags, 0, sizeof(tags));
yaffs_rd_chunk_tags_nand(dev, old_chunk,
buffer, &tags);
object = yaffs_find_by_number(dev, tags.obj_id);
yaffs_block_became_dirty(dev, block);
} else {
- u8 *buffer = yaffs_get_temp_buffer(dev, __LINE__);
+ u8 *buffer = yaffs_get_temp_buffer(dev);
yaffs_verify_blk(dev, bi, block);
old_chunk, buffer);
}
}
- yaffs_release_temp_buffer(dev, buffer, __LINE__);
+ yaffs_release_temp_buffer(dev, buffer);
}
yaffs_verify_collected_blk(dev, bi, block);
if (!dev->param.is_yaffs2 && mark_flash &&
bi->block_state != YAFFS_BLOCK_STATE_COLLECTING) {
- yaffs_init_tags(&tags);
+ memset(&tags, 0, sizeof(tags));
tags.is_deleted = 1;
yaffs_wr_chunk_tags_nand(dev, chunk_id, NULL, &tags);
yaffs_handle_chunk_update(dev, chunk_id, &tags);
return 0;
/* Set up new tags */
- yaffs_init_tags(&new_tags);
+ memset(&new_tags, 0, sizeof(new_tags));
new_tags.chunk_id = inode_chunk;
new_tags.obj_id = in->obj_id;
return 0;
}
- buffer = (char *)yaffs_get_temp_buffer(dev, __LINE__);
+ buffer = (char *)yaffs_get_temp_buffer(dev);
if (!buffer)
return -ENOMEM;
else
retval = nval_list(x_buffer, x_size, value, size);
}
- yaffs_release_temp_buffer(dev, (u8 *) buffer, __LINE__);
+ yaffs_release_temp_buffer(dev, (u8 *) buffer);
return retval;
}
dev = in->my_dev;
in->lazy_loaded = 0;
- buf = yaffs_get_temp_buffer(dev, __LINE__);
+ buf = yaffs_get_temp_buffer(dev);
result = yaffs_rd_chunk_tags_nand(dev, in->hdr_chunk, buf, &tags);
oh = (struct yaffs_obj_hdr *)buf;
if (!in->variant.symlink_variant.alias)
alloc_failed = 1; /* Not returned */
}
- yaffs_release_temp_buffer(dev, buf, __LINE__);
+ yaffs_release_temp_buffer(dev, buf);
}
static void yaffs_load_name_from_oh(struct yaffs_dev *dev, YCHAR *name,
yaffs_check_gc(dev, 0);
yaffs_check_obj_details_loaded(in);
- buffer = yaffs_get_temp_buffer(in->my_dev, __LINE__);
+ buffer = yaffs_get_temp_buffer(in->my_dev);
oh = (struct yaffs_obj_hdr *)buffer;
prev_chunk_id = in->hdr_chunk;
yaffs_verify_oh(in, oh, &old_tags, 0);
memcpy(old_name, oh->name, sizeof(oh->name));
- memset(buffer, 0xFF, sizeof(struct yaffs_obj_hdr));
+ memset(buffer, 0xff, sizeof(struct yaffs_obj_hdr));
} else {
- memset(buffer, 0xFF, dev->data_bytes_per_chunk);
+ memset(buffer, 0xff, dev->data_bytes_per_chunk);
}
oh->type = in->variant_type;
yaffs_apply_xattrib_mod(in, (char *)buffer, xmod);
/* Tags */
- yaffs_init_tags(&new_tags);
+ memset(&new_tags, 0, sizeof(new_tags));
in->serial++;
new_tags.chunk_id = 0;
new_tags.obj_id = in->obj_id;
(prev_chunk_id > 0) ? 1 : 0);
if (buffer)
- yaffs_release_temp_buffer(dev, buffer, __LINE__);
+ yaffs_release_temp_buffer(dev, buffer);
if (new_chunk_id < 0)
return new_chunk_id;
/* Read into the local buffer then copy.. */
u8 *local_buffer =
- yaffs_get_temp_buffer(dev, __LINE__);
+ yaffs_get_temp_buffer(dev);
yaffs_rd_data_obj(in, chunk, local_buffer);
memcpy(buffer, &local_buffer[start], n_copy);
- yaffs_release_temp_buffer(dev, local_buffer,
- __LINE__);
+ yaffs_release_temp_buffer(dev, local_buffer);
}
} else {
/* A full chunk. Read directly into the buffer. */
* local buffer then copy over and write back.
*/
- u8 *local_buffer =
- yaffs_get_temp_buffer(dev, __LINE__);
+ u8 *local_buffer = yaffs_get_temp_buffer(dev);
yaffs_rd_data_obj(in, chunk, local_buffer);
memcpy(&local_buffer[start], buffer, n_copy);
local_buffer,
n_writeback, 0);
- yaffs_release_temp_buffer(dev, local_buffer,
- __LINE__);
+ yaffs_release_temp_buffer(dev, local_buffer);
}
} else {
/* A full chunk. Write directly from the buffer. */
if (new_partial != 0) {
int last_chunk = 1 + new_full;
- u8 *local_buffer = yaffs_get_temp_buffer(dev, __LINE__);
+ u8 *local_buffer = yaffs_get_temp_buffer(dev);
/* Rewrite the last chunk with its new size and zero pad */
yaffs_rd_data_obj(obj, last_chunk, local_buffer);
yaffs_wr_data_obj(obj, last_chunk, local_buffer,
new_partial, 1);
- yaffs_release_temp_buffer(dev, local_buffer, __LINE__);
+ yaffs_release_temp_buffer(dev, local_buffer);
}
obj->variant.file_variant.file_size = new_size;
#endif
else if (obj->hdr_chunk > 0) {
int result;
- u8 *buffer = yaffs_get_temp_buffer(obj->my_dev, __LINE__);
+ u8 *buffer = yaffs_get_temp_buffer(obj->my_dev);
struct yaffs_obj_hdr *oh = (struct yaffs_obj_hdr *)buffer;
yaffs_load_name_from_oh(obj->my_dev, name, oh->name,
buffer_size);
- yaffs_release_temp_buffer(obj->my_dev, buffer, __LINE__);
+ yaffs_release_temp_buffer(obj->my_dev, buffer);
}
yaffs_fix_null_name(obj, name, buffer_size);