On Wed, Feb 5, 2014 at 10:27 AM, Jens Axboe <axboe@xxxxxxxxx> wrote: > On Tue, Feb 04 2014, Puthikorn Voravootivat wrote: >> I tried to run the same test with fio 2.1.3 and saw the same error. >> This error always occurs when rw=read or randread and verify_backlog=1 >> >> Here is an example job file and error message. >> >> Job file: >> [md5-sync-1-0-1-1-1] >> filename=test213/fio/md5-sync-1-0-1-1-1 >> loops=1 >> direct=0 >> iodepth=1 >> ioengine=sync >> verify=md5 >> size=1m >> bs=4k >> rw=read >> verifysort=1 >> verify_backlog=1 >> >> Error message: >> verify: bad magic header 869, wanted acca at file >> test213/fio/md5-sync-1-0-1-1-1 offset 585728, length 2290190 > > This is indeed breakage between 2.1.2 and 2.1.3. I ran a bisect on it, > it reveals: > > 20876c53b5d32f2da9049af5e7fb102133946981 is the first bad commit > commit 20876c53b5d32f2da9049af5e7fb102133946981 > Author: Juan Casse <jcasse@xxxxxxxxxxxx> > Date: Mon Sep 16 09:22:10 2013 -0700 > > Add condition to stop issuing io in do_io(). I think Puthik has a fix related to this but I haven't reviewed his next patch yet. We've been talking about this behavior though. I'll take another look at this patch to see what it's changing. thanks, grant > > Problem: > When specifying iodepth > 1 while doing random async io > without a random map (and using the default random generator), the > main while loop in do_io() will issue extra io in the amount of io > allowed to accumulate in the queue. For example, a job with size=24k > and bs=8k will perform 4 io instead of the expected 3. > > Reason: > The above behavior occurs because the while loop in do_io() > will continue until the amount of "completed io" >= size, but io > in the queue are not accounted for because they have not been > completed by io_u_queued_complete(). > > Exceptions: > The above behavior does not manifest itself when: > using random_generator=lfsr bacause lfsr knows when to stop > generating, and get_io_u() inside the while loop returns NULL, > breaking out of the loop. > using random map because random map ensures that all blocks > are hit, and after they are all hit, no more are generated. > > Proposed Solution: > Stop while loop based on bytes issued instead of bytes completed. > > Signed-off-by: Juan Casse <jcasse@xxxxxxxxxxxx> > Reviewed-by: Grant Grundler <grundler@xxxxxxxxxxxx> > Signed-off-by: Jens Axboe <axboe@xxxxxxxxx> > > > -- > 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