Skip to content

Commit

Permalink
filesetup: abstract out fallocate helper
Browse files Browse the repository at this point in the history
This is in preparation for improving how we handle fallocate.

Signed-off-by: Jens Axboe <[email protected]>
  • Loading branch information
axboe committed Jul 2, 2017
1 parent dd3503d commit 005eb30
Showing 1 changed file with 43 additions and 38 deletions.
81 changes: 43 additions & 38 deletions filesetup.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,51 @@ static inline void clear_error(struct thread_data *td)
td->verror[0] = '\0';
}

static void fallocate_file(struct thread_data *td, struct fio_file *f)
{
int r;

if (td->o.fill_device)
return;

#ifdef CONFIG_POSIX_FALLOCATE
switch (td->o.fallocate_mode) {
case FIO_FALLOCATE_NONE:
break;
case FIO_FALLOCATE_POSIX:
dprint(FD_FILE, "posix_fallocate file %s size %llu\n",
f->file_name,
(unsigned long long) f->real_file_size);

r = posix_fallocate(f->fd, 0, f->real_file_size);
if (r > 0)
log_err("fio: posix_fallocate fails: %s\n", strerror(r));
break;
#ifdef CONFIG_LINUX_FALLOCATE
case FIO_FALLOCATE_KEEP_SIZE:
dprint(FD_FILE, "fallocate(FALLOC_FL_KEEP_SIZE) "
"file %s size %llu\n", f->file_name,
(unsigned long long) f->real_file_size);

r = fallocate(f->fd, FALLOC_FL_KEEP_SIZE, 0, f->real_file_size);
if (r != 0)
td_verror(td, errno, "fallocate");

break;
#endif /* CONFIG_LINUX_FALLOCATE */
default:
log_err("fio: unknown fallocate mode: %d\n", td->o.fallocate_mode);
assert(0);
}
#endif /* CONFIG_POSIX_FALLOCATE */
}

/*
* Leaves f->fd open on success, caller must close
*/
static int extend_file(struct thread_data *td, struct fio_file *f)
{
int r, new_layout = 0, unlink_file = 0, flags;
int new_layout = 0, unlink_file = 0, flags;
unsigned long long left;
unsigned int bs;
char *b = NULL;
Expand Down Expand Up @@ -100,43 +139,7 @@ static int extend_file(struct thread_data *td, struct fio_file *f)
return 1;
}

#ifdef CONFIG_POSIX_FALLOCATE
if (!td->o.fill_device) {
switch (td->o.fallocate_mode) {
case FIO_FALLOCATE_NONE:
break;
case FIO_FALLOCATE_POSIX:
dprint(FD_FILE, "posix_fallocate file %s size %llu\n",
f->file_name,
(unsigned long long) f->real_file_size);

r = posix_fallocate(f->fd, 0, f->real_file_size);
if (r > 0) {
log_err("fio: posix_fallocate fails: %s\n",
strerror(r));
}
break;
#ifdef CONFIG_LINUX_FALLOCATE
case FIO_FALLOCATE_KEEP_SIZE:
dprint(FD_FILE,
"fallocate(FALLOC_FL_KEEP_SIZE) "
"file %s size %llu\n", f->file_name,
(unsigned long long) f->real_file_size);

r = fallocate(f->fd, FALLOC_FL_KEEP_SIZE, 0,
f->real_file_size);
if (r != 0)
td_verror(td, errno, "fallocate");

break;
#endif /* CONFIG_LINUX_FALLOCATE */
default:
log_err("fio: unknown fallocate mode: %d\n",
td->o.fallocate_mode);
assert(0);
}
}
#endif /* CONFIG_POSIX_FALLOCATE */
fallocate_file(td, f);

/*
* If our jobs don't require regular files initially, we're done.
Expand Down Expand Up @@ -171,6 +174,8 @@ static int extend_file(struct thread_data *td, struct fio_file *f)
}

while (left && !td->terminate) {
ssize_t r;

if (bs > left)
bs = left;

Expand Down

0 comments on commit 005eb30

Please sign in to comment.