projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
steadystate_tests.py: fix up usage comment
[fio.git]
/
engines
/
e4defrag.c
diff --git
a/engines/e4defrag.c
b/engines/e4defrag.c
index d9ddf752bf6e39be2bdd61c4ddee12ab2ddb9f20..4b444888aa9bb51c5a660aee67f385dd6f20c021 100644
(file)
--- a/
engines/e4defrag.c
+++ b/
engines/e4defrag.c
@@
-17,6
+17,7
@@
#include <fcntl.h>
#include "../fio.h"
#include <fcntl.h>
#include "../fio.h"
+#include "../optgroup.h"
#ifndef EXT4_IOC_MOVE_EXT
#define EXT4_IOC_MOVE_EXT _IOWR('f', 15, struct move_extent)
#ifndef EXT4_IOC_MOVE_EXT
#define EXT4_IOC_MOVE_EXT _IOWR('f', 15, struct move_extent)
@@
-36,7
+37,7
@@
struct e4defrag_data {
};
struct e4defrag_options {
};
struct e4defrag_options {
-
struct thread_data *t
d;
+
void *pa
d;
unsigned int inplace;
char * donor_name;
};
unsigned int inplace;
char * donor_name;
};
@@
-44,6
+45,7
@@
struct e4defrag_options {
static struct fio_option options[] = {
{
.name = "donorname",
static struct fio_option options[] = {
{
.name = "donorname",
+ .lname = "Donor Name",
.type = FIO_OPT_STR_STORE,
.off1 = offsetof(struct e4defrag_options, donor_name),
.help = "File used as a block donor",
.type = FIO_OPT_STR_STORE,
.off1 = offsetof(struct e4defrag_options, donor_name),
.help = "File used as a block donor",
@@
-52,6
+54,7
@@
static struct fio_option options[] = {
},
{
.name = "inplace",
},
{
.name = "inplace",
+ .lname = "In Place",
.type = FIO_OPT_INT,
.off1 = offsetof(struct e4defrag_options, inplace),
.minval = 0,
.type = FIO_OPT_INT,
.off1 = offsetof(struct e4defrag_options, inplace),
.minval = 0,
@@
-80,7
+83,7
@@
static int fio_e4defrag_init(struct thread_data *td)
ed = malloc(sizeof(*ed));
if (!ed) {
ed = malloc(sizeof(*ed));
if (!ed) {
- td_verror(td,
-
ENOMEM, "io_queue_init");
+ td_verror(td, ENOMEM, "io_queue_init");
return 1;
}
memset(ed, 0 ,sizeof(*ed));
return 1;
}
memset(ed, 0 ,sizeof(*ed));
@@
-91,15
+94,15
@@
static int fio_e4defrag_init(struct thread_data *td)
ed->donor_fd = open(donor_name, O_CREAT|O_WRONLY, 0644);
if (ed->donor_fd < 0) {
ed->donor_fd = open(donor_name, O_CREAT|O_WRONLY, 0644);
if (ed->donor_fd < 0) {
- td_verror(td, e
d->donor_fd
, "io_queue_init");
- log_err("Can't open donor file %s err:%d
"
, ed->donor_fd);
+ td_verror(td, e
rrno
, "io_queue_init");
+ log_err("Can't open donor file %s err:%d
\n", donor_name
, ed->donor_fd);
free(ed);
return 1;
}
if (!o->inplace) {
free(ed);
return 1;
}
if (!o->inplace) {
- long long len = td->o.file_size_high - td->o.start_offset;
- r = fallocate(ed->donor_fd, 0, td->o.start_offset, len);
+ long long
__
len = td->o.file_size_high - td->o.start_offset;
+ r = fallocate(ed->donor_fd, 0, td->o.start_offset,
__
len);
if (r)
goto err;
}
if (r)
goto err;
}
@@
-108,7
+111,7
@@
static int fio_e4defrag_init(struct thread_data *td)
goto err;
ed->bsz = stub.st_blksize;
goto err;
ed->bsz = stub.st_blksize;
- td->io_ops
->
data = ed;
+ td->io_ops
_
data = ed;
return 0;
err:
td_verror(td, errno, "io_queue_init");
return 0;
err:
td_verror(td, errno, "io_queue_init");
@@
-119,7
+122,7
@@
err:
static void fio_e4defrag_cleanup(struct thread_data *td)
{
static void fio_e4defrag_cleanup(struct thread_data *td)
{
- struct e4defrag_data *ed = td->io_ops
->
data;
+ struct e4defrag_data *ed = td->io_ops
_
data;
if (ed) {
if (ed->donor_fd >= 0)
close(ed->donor_fd);
if (ed) {
if (ed->donor_fd >= 0)
close(ed->donor_fd);
@@
-135,7
+138,7
@@
static int fio_e4defrag_queue(struct thread_data *td, struct io_u *io_u)
unsigned long long len;
struct move_extent me;
struct fio_file *f = io_u->file;
unsigned long long len;
struct move_extent me;
struct fio_file *f = io_u->file;
- struct e4defrag_data *ed = td->io_ops
->
data;
+ struct e4defrag_data *ed = td->io_ops
_
data;
struct e4defrag_options *o = td->eo;
fio_ro_check(td, io_u);
struct e4defrag_options *o = td->eo;
fio_ro_check(td, io_u);
@@
-169,8
+172,13
@@
static int fio_e4defrag_queue(struct thread_data *td, struct io_u *io_u)
len = io_u->xfer_buflen;
if (len != io_u->xfer_buflen) {
len = io_u->xfer_buflen;
if (len != io_u->xfer_buflen) {
- io_u->resid = io_u->xfer_buflen - len;
- io_u->error = 0;
+ if (len) {
+ io_u->resid = io_u->xfer_buflen - len;
+ io_u->error = 0;
+ } else {
+ /* access beyond i_size */
+ io_u->error = EINVAL;
+ }
}
if (ret)
io_u->error = errno;
}
if (ret)
io_u->error = errno;