From 544833ec2a08fef12913c32543f2d815220d9683 Mon Sep 17 00:00:00 2001 From: Artem Bityutskiy Date: Mon, 11 Apr 2011 14:55:49 +0300 Subject: fs-tests: integck: shrink write_info even more The 'struct write_info' data strucutre records information about truncation, and has a separate integer field to specify if this is a truncation or not. But it is too wasteful because we have huge amount of these objects. But it is easy to notice that the 'random_seed' field is not used for truncation records, so we can use that as the truncation flag. This patch introduces MAX_RANDOM_SEED macro and when the 'random_seed' field is greater than that, we treat it as the truncation flag. Signed-off-by: Artem Bityutskiy --- tests/fs-tests/integrity/integck.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'tests/fs-tests/integrity') diff --git a/tests/fs-tests/integrity/integck.c b/tests/fs-tests/integrity/integck.c index eff7274..92e37a1 100644 --- a/tests/fs-tests/integrity/integck.c +++ b/tests/fs-tests/integrity/integck.c @@ -35,6 +35,8 @@ #define PROGRAM_NAME "integck" #include "common.h" +#define MAX_RANDOM_SEED 10000000 + /* Structures to store data written to the test file system, so that we can check whether the file system is correct. */ @@ -42,13 +44,14 @@ struct write_info /* Record of random data written into a file */ { struct write_info *next; off_t offset; /* Where in the file the data was written */ - size_t size; /* Number of bytes written */ - unsigned random_seed; /* Seed for rand() to create random data */ union { off_t random_offset; /* Call rand() this number of times first */ off_t new_length; /* For truncation records new file length */ }; - int trunc; /* Records a truncation (raw_writes only) */ + size_t size; /* Number of bytes written */ + unsigned int random_seed; /* Seed for rand() to create random data. If + greater than MAX_RANDOM_SEED then this is + a truncation record (raw_writes only) */ }; struct dir_entry_info; @@ -139,6 +142,14 @@ static long mem_page_size; /* Page size for mmap */ static unsigned int check_run_no; +/* + * Is this 'struct write_info' actually holds information about a truncation? + */ +static int is_truncation(struct write_info *w) +{ + return w->random_seed > MAX_RANDOM_SEED; +} + /* * Allocate a buffer of 'size' bytes and fill it with zeroes. */ @@ -569,7 +580,7 @@ static void file_info_display(struct file_info *file) wcnt = 0; w = file->raw_writes; while (w) { - if (w->trunc) + if (is_truncation(w)) normsg(" Trunc from %u to %u", (unsigned) w->offset, (unsigned) w->new_length); else @@ -834,7 +845,7 @@ static void file_mmap_write(struct file_info *file) offset = w->offset + tests_random_no(w->size - size); /* Write it */ - seed = tests_random_no(10000000); + seed = tests_random_no(MAX_RANDOM_SEED); srand(seed); waddr = addr + (offset - offs); for (i = 0; i < size; i++) @@ -860,7 +871,7 @@ static void file_write(struct file_info *file, int fd) } get_offset_and_size(file, &offset, &size); - seed = tests_random_no(10000000); + seed = tests_random_no(MAX_RANDOM_SEED); actual = file_write_data(file, fd, offset, size, seed); if (offset + actual <= file->length && shrink) @@ -924,7 +935,7 @@ static void file_truncate_info(struct file_info *file, size_t new_length) w->next = file->raw_writes; w->offset = file->length; w->new_length = new_length; - w->trunc = 1; + w->random_seed = MAX_RANDOM_SEED + 1; file->raw_writes = w; /* Update file length */ file->length = new_length; -- cgit v1.2.3