From ade135d45577263fe2c7b4d885e81c1798a1a79a Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Mon, 19 Dec 2016 10:19:44 +0100 Subject: JFFS2: Add RTEMS_JFFS2_FORCE_GARBAGE_COLLECTION Add IO control to force a garbage collection. Update #2844. --- testsuites/fstests/fsjffs2gc01/init.c | 57 +++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'testsuites/fstests') diff --git a/testsuites/fstests/fsjffs2gc01/init.c b/testsuites/fstests/fsjffs2gc01/init.c index df2e986412..8b5658c594 100644 --- a/testsuites/fstests/fsjffs2gc01/init.c +++ b/testsuites/fstests/fsjffs2gc01/init.c @@ -109,6 +109,38 @@ static const rtems_jffs2_info info_some_files_removed = { .bad_blocks = 0 }; +static const rtems_jffs2_info info_after_first_gc = { + .flash_size = 131072, + .flash_blocks = 8, + .flash_block_size = 16384, + .used_size = 23540, + .dirty_size = 30988, + .wasted_size = 7368, + .free_size = 69176, + .bad_size = 0, + .clean_blocks = 0, + .dirty_blocks = 3, + .erasable_blocks = 0, + .free_blocks = 5, + .bad_blocks = 0 +}; + +static const rtems_jffs2_info info_after_excessive_gc = { + .flash_size = 131072, + .flash_blocks = 8, + .flash_block_size = 16384, + .used_size = 7224, + .dirty_size = 0, + .wasted_size = 12, + .free_size = 123836, + .bad_size = 0, + .clean_blocks = 0, + .dirty_blocks = 0, + .erasable_blocks = 0, + .free_blocks = 8, + .bad_blocks = 0 +}; + static char big[] = "big"; static const char * const more[] = { @@ -225,6 +257,7 @@ void test(void) { int fd; int rv; + int counter; rtems_jffs2_info info; init_keg(); @@ -246,6 +279,30 @@ void test(void) remove_some_files(); ASSERT_INFO(&info, &info_some_files_removed); + rv = ioctl(fd, RTEMS_JFFS2_FORCE_GARBAGE_COLLECTION); + rtems_test_assert(rv == 0); + ASSERT_INFO(&info, &info_after_first_gc); + + counter = 0; + + while (true) { + errno = ENXIO; + rv = ioctl(fd, RTEMS_JFFS2_FORCE_GARBAGE_COLLECTION); + if (rv == -1) { + rtems_test_assert(errno == EIO); + break; + } + + ++counter; + rtems_test_assert(rv == 0); + } + + rtems_test_assert(counter == 19); + + rv = ioctl(fd, RTEMS_JFFS2_GET_INFO, &info); + rtems_test_assert(rv == 0); + ASSERT_INFO(&info, &info_after_excessive_gc); + rv = close(fd); rtems_test_assert(rv == 0); } -- cgit v1.2.3