On Fri, Apr 10 2009, Radha Ramachandran wrote: > 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? Yeah I don't think this will work for using an offset within the file, as it's legal for the offset to be larger than the io_size. If you can check and add the offset check, I think it should be ok. -- Jens Axboe -- 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