Hi, We have a test that runs the test on a raw device say of size 100GB > Sequential write of a pattern to the raw device with size=10GB (so even though the device is 100GB big we try to write only to the first 10GB) > Random read and verify of the pattern to the raw device with size=10GB, (with randommap, so we maintain the bitmap of previously visited blocks) This test almost always lands up trying to do the read beyond the 10GB. So I see this code in io_u.c: static int get_next_free_block(struct thread_data *td, struct fio_file *f, enum fio_ddir ddir, unsigned long long *b) { ... while ((*b) * min_bs < f->real_file_size) { ========= This code looks for an unvisited block within the real_file_size which in this case is 100GB, and will exceed 10GB in a lot of cases causing the verify to fail. So i fixed this by checking if the block is within the real_file_size and the io_size, so this wld work in cases where: 1. Actual file size < io_size 2. io_size < Actual file size diff -crB io_u.c io_u.c_fixed *** io_u.c Fri Apr 10 15:47:02 2009 --- io_u.c_fixed Fri Apr 10 15:48:02 2009 *************** *** 113,119 **** i = f->last_free_lookup; *b = (i * BLOCKS_PER_MAP); ! while ((*b) * min_bs < f->real_file_size) { if (f->file_map[i] != (unsigned int) -1) { *b += ffz(f->file_map[i]); if (*b > last_block(td, f, ddir)) --- 113,120 ---- i = f->last_free_lookup; *b = (i * BLOCKS_PER_MAP); ! while (((*b) * min_bs < f->real_file_size) && ! ((*b) * min_bs < f->io_size)) { if (f->file_map[i] != (unsigned int) -1) { *b += ffz(f->file_map[i]); if (*b > last_block(td, f, ddir)) Is there some case I missed? thanks -radha -- To unsubscribe from this list: send the line "unsubscribe fio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html