diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-07-02 16:06:10 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-07-02 16:15:54 +0200 |
commit | f29d969a72622c8d30eba7bae9a37d128fe9b5a4 (patch) | |
tree | 57028c450e78e85afeaf471c7ff6d507ac4caf43 | |
parent | libblock: Fix continuous blocks write request (diff) | |
download | rtems-f29d969a72622c8d30eba7bae9a37d128fe9b5a4.tar.bz2 |
libblock: Fix read-ahead trigger and next update
-rw-r--r-- | cpukit/libblock/src/bdbuf.c | 4 | ||||
-rw-r--r-- | testsuites/libtests/block13/block13.scn | 12 | ||||
-rw-r--r-- | testsuites/libtests/block13/init.c | 80 |
3 files changed, 54 insertions, 42 deletions
diff --git a/cpukit/libblock/src/bdbuf.c b/cpukit/libblock/src/bdbuf.c index 034e5a8406..77d8555c05 100644 --- a/cpukit/libblock/src/bdbuf.c +++ b/cpukit/libblock/src/bdbuf.c @@ -3027,8 +3027,8 @@ rtems_bdbuf_read_ahead_task (rtems_task_argument arg) if (transfer_count >= max_transfer_count) { transfer_count = max_transfer_count; - dd->read_ahead.trigger += max_transfer_count / 2 + 1; - dd->read_ahead.next += max_transfer_count; + dd->read_ahead.trigger = block + (transfer_count + 1) / 2; + dd->read_ahead.next = block + transfer_count; } else { diff --git a/testsuites/libtests/block13/block13.scn b/testsuites/libtests/block13/block13.scn index 8cce71806d..d929eb043c 100644 --- a/testsuites/libtests/block13/block13.scn +++ b/testsuites/libtests/block13/block13.scn @@ -1,11 +1,13 @@ *** TEST BLOCK 13 *** -0 2 3 4 5 6 7 8 +0 2 3 4 5 6 7 8 9 10 reset -8 +10 +reset +9 reset -7 +8 reset -6 7 +7 8 reset -5 6 8 +6 7 10 *** END OF TEST BLOCK 13 *** diff --git a/testsuites/libtests/block13/init.c b/testsuites/libtests/block13/init.c index fa8ebc0f0d..cd62e8b36e 100644 --- a/testsuites/libtests/block13/init.c +++ b/testsuites/libtests/block13/init.c @@ -24,47 +24,53 @@ #include <rtems/blkdev.h> #include <rtems/bdbuf.h> -#define BLOCK_COUNT 9 -#define READ_COUNT 19 +#define BLOCK_COUNT 11 +#define READ_COUNT 23 static int block_access_counts [BLOCK_COUNT]; #define RESET_CACHE (-1) static const int action_sequence [READ_COUNT] = { - 0, 2, 3, 4, 5, 6, 7, 8, + 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, RESET_CACHE, - 8, + 10, RESET_CACHE, - 7, + 9, RESET_CACHE, - 6, 7, + 8, RESET_CACHE, - 5, 6, 8 + 7, 8, + RESET_CACHE, + 6, 7, 10 }; -#define UNUSED_LINE { 0, 0, 0, 0, 0, 0, 0, 0, 0 } +#define UNUSED_LINE { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } static const int expected_block_access_counts [READ_COUNT] [BLOCK_COUNT] = { - { 1, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 1, 0, 1, 0, 0, 0, 0, 0, 0 }, - { 1, 0, 1, 1, 1, 1, 0, 0, 0 }, - { 1, 0, 1, 1, 1, 1, 0, 0, 0 }, - { 1, 0, 1, 1, 1, 1, 1, 1, 0 }, - { 1, 0, 1, 1, 1, 1, 1, 1, 0 }, - { 1, 0, 1, 1, 1, 1, 1, 1, 1 }, - { 1, 0, 1, 1, 1, 1, 1, 1, 1 }, + { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0 }, + { 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0 }, + { 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0 }, + { 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + { 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + { 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, + { 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, + { 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, + UNUSED_LINE, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, UNUSED_LINE, - { 0, 0, 0, 0, 0, 0, 0, 0, 1 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, UNUSED_LINE, - { 0, 0, 0, 0, 0, 0, 0, 1, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 }, UNUSED_LINE, - { 0, 0, 0, 0, 0, 0, 1, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 1, 1, 1 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 }, UNUSED_LINE, - { 0, 0, 0, 0, 0, 1, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 1, 1, 1, 1 }, - { 0, 0, 0, 0, 0, 1, 1, 1, 1 } + { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1 }, + { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1 } }; #define NO_TRIGGER RTEMS_DISK_READ_AHEAD_NO_TRIGGER @@ -72,29 +78,33 @@ static const int expected_block_access_counts [READ_COUNT] [BLOCK_COUNT] = { #define TRIGGER_AFTER_RESET RTEMS_DISK_READ_AHEAD_NO_TRIGGER static const rtems_blkdev_bnum trigger [READ_COUNT] = { - 1, 3, 5, 5, 7, 7, NO_TRIGGER, NO_TRIGGER, + 1, 3, 6, 6, 6, 9, 9, 9, NO_TRIGGER, NO_TRIGGER, TRIGGER_AFTER_RESET, - 9, + 11, TRIGGER_AFTER_RESET, - 8, + 10, + TRIGGER_AFTER_RESET, + 9, TRIGGER_AFTER_RESET, - 7, NO_TRIGGER, + 8, NO_TRIGGER, TRIGGER_AFTER_RESET, - 6, 8, NO_TRIGGER + 7, 10, NO_TRIGGER }; #define NOT_CHANGED_BY_RESET(i) (i) static const rtems_blkdev_bnum next [READ_COUNT] = { - 2, 4, 6, 6, 8, 8, 8, 8, - NOT_CHANGED_BY_RESET(8), + 2, 4, 7, 7, 7, 10, 10, 10, 10, 10, + NOT_CHANGED_BY_RESET(10), + 12, + NOT_CHANGED_BY_RESET(12), + 11, + NOT_CHANGED_BY_RESET(11), 10, NOT_CHANGED_BY_RESET(10), - 9, + 9, 9, NOT_CHANGED_BY_RESET(9), - 8, 8, - NOT_CHANGED_BY_RESET(8), - 7, 9, 9 + 8, 11, 11 }; static int test_disk_ioctl(rtems_disk_device *dd, uint32_t req, void *arg) @@ -215,7 +225,7 @@ static void Init(rtems_task_argument arg) #define CONFIGURE_BDBUF_BUFFER_MIN_SIZE 1 #define CONFIGURE_BDBUF_BUFFER_MAX_SIZE 1 #define CONFIGURE_BDBUF_CACHE_MEMORY_SIZE BLOCK_COUNT -#define CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS 2 +#define CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS 3 #define CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY 1 #define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM |