- Added passive directory cache filling.
- Improved variable naming. - Cast unknown integer type parameters to format type for printf calls.
This commit is contained in:
parent
d08a218a7a
commit
28ed5e2a4a
1 changed files with 22 additions and 20 deletions
|
@ -277,7 +277,7 @@ static coffee_offset_t
|
||||||
find_file(const char *name)
|
find_file(const char *name)
|
||||||
{
|
{
|
||||||
struct file_header hdr;
|
struct file_header hdr;
|
||||||
coffee_offset_t page;
|
coffee_page_t page;
|
||||||
|
|
||||||
page = dir_cache_find(name);
|
page = dir_cache_find(name);
|
||||||
if(page >= 0) {
|
if(page >= 0) {
|
||||||
|
@ -288,8 +288,10 @@ find_file(const char *name)
|
||||||
do {
|
do {
|
||||||
read_header(&hdr, page);
|
read_header(&hdr, page);
|
||||||
if(COFFEE_PAGE_ACTIVE(hdr)) {
|
if(COFFEE_PAGE_ACTIVE(hdr)) {
|
||||||
if(strcmp(name, hdr.name) == 0) {
|
if(dir_cache_find(name[0]) == -1) {
|
||||||
dir_cache_add(name[0], page);
|
dir_cache_add(name[0], page);
|
||||||
|
}
|
||||||
|
if(strcmp(name, hdr.name) == 0) {
|
||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
page += hdr.max_pages;
|
page += hdr.max_pages;
|
||||||
|
@ -409,7 +411,7 @@ cfs_garbage_collect(void)
|
||||||
for(nerased = sector = 0; sector < COFFEE_SIZE / COFFEE_SECTOR_SIZE; sector++) {
|
for(nerased = sector = 0; sector < COFFEE_SIZE / COFFEE_SECTOR_SIZE; sector++) {
|
||||||
get_sector_status(sector, &active_pages, &free_pages, &obsolete_pages);
|
get_sector_status(sector, &active_pages, &free_pages, &obsolete_pages);
|
||||||
PRINTF("Coffee: Sector %u has %u active, %u free, and %u obsolete pages.\n",
|
PRINTF("Coffee: Sector %u has %u active, %u free, and %u obsolete pages.\n",
|
||||||
sector, active_pages, free_pages, obsolete_pages);
|
sector, (unsigned)active_pages, (unsigned)free_pages, (unsigned)obsolete_pages);
|
||||||
if(active_pages == 0 && obsolete_pages > 0) {
|
if(active_pages == 0 && obsolete_pages > 0) {
|
||||||
COFFEE_ERASE(sector);
|
COFFEE_ERASE(sector);
|
||||||
nerased++;
|
nerased++;
|
||||||
|
@ -534,7 +536,7 @@ get_record_index(coffee_page_t log_page, uint16_t record_count,
|
||||||
unsigned long base;
|
unsigned long base;
|
||||||
uint16_t indices[record_count];
|
uint16_t indices[record_count];
|
||||||
uint16_t processed;
|
uint16_t processed;
|
||||||
uint16_t current_batch_size, i;
|
uint16_t batch_size, i;
|
||||||
int16_t match_index;
|
int16_t match_index;
|
||||||
|
|
||||||
base = ABS_OFFSET(log_page, sizeof(indices[0]) * search_records);
|
base = ABS_OFFSET(log_page, sizeof(indices[0]) * search_records);
|
||||||
|
@ -542,22 +544,22 @@ get_record_index(coffee_page_t log_page, uint16_t record_count,
|
||||||
match_index = -1;
|
match_index = -1;
|
||||||
while(processed < search_records && match_index < 0) {
|
while(processed < search_records && match_index < 0) {
|
||||||
if(record_count + processed > search_records) {
|
if(record_count + processed > search_records) {
|
||||||
current_batch_size = search_records - processed;
|
batch_size = search_records - processed;
|
||||||
} else {
|
} else {
|
||||||
current_batch_size = record_count;
|
batch_size = record_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
base -= current_batch_size * sizeof(indices[0]);
|
base -= batch_size * sizeof(indices[0]);
|
||||||
COFFEE_READ(&indices, sizeof(indices[0]) * current_batch_size, base);
|
COFFEE_READ(&indices, sizeof(indices[0]) * batch_size, base);
|
||||||
|
|
||||||
for(i = current_batch_size - 1; i >= 0; i--) {
|
for(i = batch_size - 1; i >= 0; i--) {
|
||||||
if(indices[i] - 1 == region) {
|
if(indices[i] - 1 == region) {
|
||||||
match_index = search_records - processed - (current_batch_size - i);
|
match_index = search_records - processed - (batch_size - i);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
processed += current_batch_size;
|
processed += batch_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
return match_index;
|
return match_index;
|
||||||
|
@ -623,8 +625,8 @@ create_log(coffee_page_t file_page, struct file_header *hdr)
|
||||||
|
|
||||||
adjust_log_config(hdr, &log_record_size, &log_records);
|
adjust_log_config(hdr, &log_record_size, &log_records);
|
||||||
|
|
||||||
size = log_records * sizeof(uint16_t);
|
size = log_records * sizeof(uint16_t); /* Log index size. */
|
||||||
size += log_records * log_record_size;
|
size += log_records * log_record_size; /* Log data size. */
|
||||||
|
|
||||||
log_page = reserve(create_log_name(log_name, sizeof(log_name), hdr->name),
|
log_page = reserve(create_log_name(log_name, sizeof(log_name), hdr->name),
|
||||||
size, 0);
|
size, 0);
|
||||||
|
@ -748,21 +750,21 @@ write_log_page(struct file_desc *fdp, struct log_param *lp)
|
||||||
/* The next log record is unknown. Search for it. */
|
/* The next log record is unknown. Search for it. */
|
||||||
uint16_t indices[record_count];
|
uint16_t indices[record_count];
|
||||||
uint16_t processed;
|
uint16_t processed;
|
||||||
uint16_t current_batch_size;
|
uint16_t batch_size;
|
||||||
|
|
||||||
log_record = log_records;
|
log_record = log_records;
|
||||||
for(processed = 0; processed < log_records;) {
|
for(processed = 0; processed < log_records;) {
|
||||||
current_batch_size = log_records - processed >= record_count ?
|
batch_size = log_records - processed >= record_count ?
|
||||||
record_count : log_records - processed;
|
record_count : log_records - processed;
|
||||||
COFFEE_READ(&indices, current_batch_size * sizeof(indices[0]),
|
COFFEE_READ(&indices, batch_size * sizeof(indices[0]),
|
||||||
ABS_OFFSET(log_page, processed * sizeof(indices[0])));
|
ABS_OFFSET(log_page, processed * sizeof(indices[0])));
|
||||||
for(i = 0; i < current_batch_size && indices[i] != 0; i++);
|
for(i = 0; i < batch_size && indices[i] != 0; i++);
|
||||||
log_record = i;
|
log_record = i;
|
||||||
if(log_record < current_batch_size) {
|
if(log_record < batch_size) {
|
||||||
log_record += processed;
|
log_record += processed;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
processed += current_batch_size;
|
processed += batch_size;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log_record = fdp->next_log_record;
|
log_record = fdp->next_log_record;
|
||||||
|
@ -780,7 +782,7 @@ write_log_page(struct file_desc *fdp, struct log_param *lp)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
PRINTF("Coffee: Created a log structure for file %s at page %u\n",
|
PRINTF("Coffee: Created a log structure for file %s at page %u\n",
|
||||||
hdr.name, log_page);
|
hdr.name, (unsigned)log_page);
|
||||||
hdr.log_page = log_page;
|
hdr.log_page = log_page;
|
||||||
log_record = 0;
|
log_record = 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue