For randtrimwrite, we should issue trim + write pair and those offsets
should be same.
This works good for cases without `offset=` option, but not for cases
with `offset=` option. In cases with `offset=` option, it's necessary
to subtract `file_offset`, which is value of `offset=` option, when
calculationg offset of write.
This is a bit confusing because `last_start` is an actual offset that
has already been issued through trim. However, `last_start` is the
value to which `file_offset` is added. Since we add back `file_offset`
later on after calling `get_next_block` in `get_next_offset`,
`last_start` should be adjusted.
Signed-off-by: Jungwon Lee <jjung1.lee@samsung.com>
Signed-off-by: Minwoo Im <minwoo.im@samsung.com>
[+ updated commit title]
if (td_randtrimwrite(td) && ddir == DDIR_WRITE) {
/* don't mark randommap for these writes */
io_u_set(td, io_u, IO_U_F_BUSY_OK);
- offset = f->last_start[DDIR_TRIM];
+ offset = f->last_start[DDIR_TRIM] - f->file_offset;
*is_random = true;
ret = 0;
} else if (rw_seq) {