projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix off-by-one in generic ffz
[fio.git]
/
io_u.c
diff --git
a/io_u.c
b/io_u.c
index 04900ee1def3ad28867d40ea829d05886d93381f..c662470a09142fa83c3ba337a84b7125ace2ed12 100644
(file)
--- a/
io_u.c
+++ b/
io_u.c
@@
-32,7
+32,7
@@
static int random_map_free(struct fio_file *f, const unsigned long long block)
dprint(FD_RANDOM, "free: b=%llu, idx=%u, bit=%u\n", block, idx, bit);
dprint(FD_RANDOM, "free: b=%llu, idx=%u, bit=%u\n", block, idx, bit);
- return (f->file_map[idx] & (1
UL
<< bit)) == 0;
+ return (f->file_map[idx] & (1 << bit)) == 0;
}
/*
}
/*
@@
-65,7
+65,7
@@
static void mark_random_map(struct thread_data *td, struct io_u *io_u)
fio_assert(td, idx < f->num_maps);
fio_assert(td, idx < f->num_maps);
- f->file_map[idx] |= (1
UL
<< bit);
+ f->file_map[idx] |= (1 << bit);
block++;
blocks++;
}
block++;
blocks++;
}
@@
-107,8
+107,8
@@
static int get_next_free_block(struct thread_data *td, struct fio_file *f,
i = f->last_free_lookup;
*b = (i * BLOCKS_PER_MAP);
while ((*b) * min_bs < f->real_file_size) {
i = f->last_free_lookup;
*b = (i * BLOCKS_PER_MAP);
while ((*b) * min_bs < f->real_file_size) {
- if (f->file_map[i] !=
-1UL
) {
- *b += f
io_f
fz(f->file_map[i]);
+ if (f->file_map[i] !=
(unsigned int) -1
) {
+ *b += ffz(f->file_map[i]);
if (*b > last_block(td, f, ddir))
break;
f->last_free_lookup = i;
if (*b > last_block(td, f, ddir))
break;
f->last_free_lookup = i;
@@
-350,6
+350,8
@@
void requeue_io_u(struct thread_data *td, struct io_u **io_u)
{
struct io_u *__io_u = *io_u;
{
struct io_u *__io_u = *io_u;
+ dprint(FD_IO, "requeue %p\n", __io_u);
+
__io_u->flags |= IO_U_F_FREE;
if ((__io_u->flags & IO_U_F_FLIGHT) && (__io_u->ddir != DDIR_SYNC))
td->io_issues[__io_u->ddir]--;
__io_u->flags |= IO_U_F_FREE;
if ((__io_u->flags & IO_U_F_FLIGHT) && (__io_u->ddir != DDIR_SYNC))
td->io_issues[__io_u->ddir]--;