#include <ext4_filedev.h>\r
#include <ext4.h>\r
\r
-\r
-\r
char input_name[128] = "ext2";\r
\r
/**@brief Read-write size*/\r
static int rw_szie = 1024;\r
\r
/**@brief Read-write size*/\r
-static int rw_count = 1024;\r
+static int rw_count = 10000;\r
+\r
+/**@brief Directory test count*/\r
+static int dir_cnt = 10;\r
\r
+/**@brief Static or dynamic cache mode*/\r
static bool cache_mode = false;\r
\r
+/**@brief Cleanup after test.*/\r
+static bool cleanup_flag = false;\r
+\r
+/**@brief Block device stats.*/\r
+static bool bstat = false;\r
+\r
+/**@brief Superblock stats.*/\r
+static bool sbstat = false;\r
\r
/**@brief File write buffer*/\r
static uint8_t *wr_buff;\r
Welcome in ext4 generic demo. \n\\r
Copyright (c) 2013 Grzegorz Kostka (kostka.grzegorz@gmail.com) \n\\r
Usage: \n\\r
- -i - input file (default = ext2) \n\\r
- -rws - single R/W size (default = 1024) \n\\r
- -rwc - R/W count (default = 1024) \n\\r
- -cache - 0 static, 1 dynamic (default = 0) \n\\r
+ -i - input file (default = ext2) \n\\r
+ -rws - single R/W size (default = 1024) \n\\r
+ -rwc - R/W count (default = 10000) \n\\r
+ -cache - 0 static, 1 dynamic (default = 0) \n\\r
+ -dirs - directory test count (default = 10) \n\\r
+ -clean - clean up after test \n\\r
+ -bstat - block device stats \n\\r
+ -sbstat - superblock stats \n\\r
\n";\r
\r
static char* entry_to_str(uint8_t type)\r
printf("**********************************************\n");\r
\r
ext4_dir_open(&d, path);\r
- de = ext4_entry_get(&d, j++);\r
+ de = ext4_dir_entry_get(&d, j++);\r
printf("ls %s\n", path);\r
\r
while(de){\r
printf(entry_to_str(de->inode_type));\r
printf(sss);\r
printf("\n");\r
- de = ext4_entry_get(&d, j++);\r
+ de = ext4_dir_entry_get(&d, j++);\r
}\r
printf("**********************************************\n");\r
ext4_dir_close(&d);\r
\r
printf("**********************************************\n");\r
printf("ext4_mount_point_stats\n");\r
- printf("inodes_count = %d\n", stats.inodes_count);\r
- printf("free_inodes_count = %d\n", stats.free_inodes_count);\r
- printf("blocks_count = %d\n", stats.blocks_count);\r
- printf("free_blocks_count = %d\n", stats.free_blocks_count);\r
- printf("block_size = %d\n", stats.block_size);\r
- printf("block_group_count = %d\n", stats.block_group_count);\r
- printf("blocks_per_group = %d\n", stats.blocks_per_group);\r
- printf("inodes_per_group = %d\n", stats.inodes_per_group);\r
+ printf("inodes_count = %u\n", stats.inodes_count);\r
+ printf("free_inodes_count = %u\n", stats.free_inodes_count);\r
+ printf("blocks_count = %u\n", (uint32_t)stats.blocks_count);\r
+ printf("free_blocks_count = %u\n", (uint32_t)stats.free_blocks_count);\r
+ printf("block_size = %u\n", stats.block_size);\r
+ printf("block_group_count = %u\n", stats.block_group_count);\r
+ printf("blocks_per_group = %u\n", stats.blocks_per_group);\r
+ printf("inodes_per_group = %u\n", stats.inodes_per_group);\r
printf("volume_name = %s\n", stats.volume_name);\r
\r
printf("**********************************************\n");\r
\r
printf("**********************************************\n");\r
printf("ext4 blockdev stats\n");\r
- printf("bdev->bread_ctr = %d\n", bd->bread_ctr);\r
- printf("bdev->bwrite_ctr = %d\n", bd->bwrite_ctr);\r
+ printf("bdev->bread_ctr = %u\n", bd->bread_ctr);\r
+ printf("bdev->bwrite_ctr = %u\n", bd->bwrite_ctr);\r
\r
\r
- printf("bcache->ref_blocks = %d\n", bc->ref_blocks);\r
- printf("bcache->max_ref_blocks = %d\n", bc->max_ref_blocks);\r
- printf("bcache->lru_ctr = %d\n", bc->lru_ctr);\r
+ printf("bcache->ref_blocks = %u\n", bc->ref_blocks);\r
+ printf("bcache->max_ref_blocks = %u\n", bc->max_ref_blocks);\r
+ printf("bcache->lru_ctr = %u\n", bc->lru_ctr);\r
\r
printf("\n");\r
for (i = 0; i < bc->cnt; ++i) {\r
- printf("bcache->refctr[%d] = %d\n", i, bc->refctr[i]);\r
+ printf("bcache->refctr[%d] = %u\n", i, bc->refctr[i]);\r
}\r
\r
printf("\n");\r
for (i = 0; i < bc->cnt; ++i) {\r
- printf("bcache->lru_id[%d] = %d\n", i, bc->lru_id[i]);\r
+ printf("bcache->lru_id[%d] = %u\n", i, bc->lru_id[i]);\r
}\r
\r
printf("\n");\r
\r
printf("\n");\r
for (i = 0; i < bc->cnt; ++i) {\r
- printf("bcache->lba[%d] = %d\n", i, bc->lba[i]);\r
+ printf("bcache->lba[%d] = %u\n", i, (uint32_t)bc->lba[i]);\r
}\r
\r
\r
printf("**********************************************\n");\r
}\r
\r
+static bool dir_test(int len)\r
+{\r
+ ext4_file f;\r
+ int r;\r
+ int i;\r
+ char path[64];\r
+\r
+ printf("Directory create: /mp/dir1\n");\r
+ r = ext4_dir_mk("/mp/dir1");\r
+ if(r != EOK){\r
+ printf("Unable to create directory: /mp/dir1\n");\r
+ return false;\r
+ }\r
+\r
+\r
+ printf("Add files to: /mp/dir1\n");\r
+ for (i = 0; i < len; ++i) {\r
+ sprintf(path, "/mp/dir1/f%d", i);\r
+ r = ext4_fopen(&f, path, "wb");\r
+ if(r != EOK){\r
+ printf("Unable to create file in directory: /mp/dir1\n");\r
+ return false;\r
+ }\r
+ }\r
+\r
+ dir_ls("/mp/dir1");\r
+ return true;\r
+}\r
+\r
+static void cleanup(void)\r
+{\r
+ ext4_fremove("/mp/hello.txt");\r
+ ext4_fremove("/mp/test1");\r
+ ext4_dir_rm("/mp/dir1");\r
+}\r
\r
int main(int argc, char **argv)\r
{\r
{"rws", required_argument, 0, 'b'},\r
{"rwc", required_argument, 0, 'c'},\r
{"cache", required_argument, 0, 'd'},\r
+ {"dirs", required_argument, 0, 'e'},\r
+ {"clean", no_argument, 0, 'f'},\r
+ {"bstat", no_argument, 0, 'g'},\r
+ {"sbstat", no_argument, 0, 'h'},\r
{0, 0, 0, 0}\r
};\r
\r
- while(-1 != (c = getopt_long (argc, argv, "a:b:c:d:", long_options, &option_index))) {\r
+ while(-1 != (c = getopt_long (argc, argv, "a:b:c:d:e:fgh", long_options, &option_index))) {\r
\r
switch(c){\r
case 'a':\r
case 'd':\r
cache_mode = atoi(optarg);\r
break;\r
+ case 'e':\r
+ dir_cnt = atoi(optarg);\r
+ break;\r
+ case 'f':\r
+ cleanup_flag = true;\r
+ break;\r
+ case 'g':\r
+ bstat = true;\r
+ break;\r
+ case 'h':\r
+ sbstat = true;\r
+ break;\r
default:\r
printf(usage);\r
return EXIT_FAILURE;\r
return EXIT_FAILURE;\r
}\r
\r
+ cleanup();\r
\r
- ext4_fremove("/mp/hello.txt");\r
- ext4_fremove("/mp/test1");\r
- mp_stats();\r
- dir_ls("/mp/");\r
+ if(sbstat)\r
+ mp_stats();\r
+\r
+\r
+ dir_ls("/mp/");\r
+ dir_test(dir_cnt);\r
\r
/*Add hello world file.*/\r
r = ext4_fopen(&f, "/mp/hello.txt", "wb");\r
}\r
\r
printf("OK\n");\r
-\r
r = ext4_fclose(&f);\r
\r
-\r
- mp_stats();\r
dir_ls("/mp/");\r
\r
- block_stats();\r
- r = ext4_umount("/mp/");\r
+ if(sbstat)\r
+ mp_stats();\r
\r
+ if(bstat)\r
+ block_stats();\r
+\r
+ if(cleanup_flag)\r
+ cleanup();\r
+\r
+ r = ext4_umount("/mp/");\r
printf("Test finish: OK\n");\r
return EXIT_SUCCESS;\r
\r