Recent changes (master)

Jens Axboe
2017-01-24T13:00:07Z

The following changes since commit 9cf163b0b3f69df8ef70d5a0799d9452e80ee2c4:

Add missing opt/cat group entries (2017-01-20 10:50:16 -0700)

are available in the git repository at:

git://git.kernel.dk/fio.git master

for you to fetch changes up to bd4d9bdc5097c3b35b5172508e1a2828296e01c2:

Remove/Move Linux specific sysfs_root field from thread_data (2017-01-23 08:26:12 -0700)

----------------------------------------------------------------
Tomohiro Kusumi (8):
Define pointer alignment macro in fio.h
Use ARRAY_SIZE()
Fix wrong comment on exit condition of threads/processes
Remove unused io_u's priv union field
Remove unused disk_util's name field
Add missing free(td->sysfs_root);
Fix bad pointer du->sysfs_root
Remove/Move Linux specific sysfs_root field from thread_data

backend.c | 14 ++++++++------
diskutil.c | 12 +++---------
diskutil.h | 1 -
fio.h | 7 +++++--
gclient.c | 2 +-
gfio.c | 2 +-
ioengine.h | 1 -
lib/memalign.c | 4 +---
lib/num2str.c | 4 +---
smalloc.c | 3 ++-
10 files changed, 22 insertions(+), 28 deletions(-)

---

Diff of recent changes:

diff --git a/backend.c b/backend.c
index 4570d8d..1c1f2f9 100644
--- a/backend.c
+++ b/backend.c
@@ -76,9 +76,6 @@ int shm_id = 0;
int temp_stall_ts;
unsigned long done_secs = 0;

-#define PAGE_ALIGN(buf) \
- (char *) (((uintptr_t) (buf) + page_mask) & ~page_mask)
-
#define JOB_START_TIMEOUT (5 * 1000)

static void sig_int(int sig)
@@ -1198,7 +1195,7 @@ static int init_io_u(struct thread_data *td)

if (td->o.odirect || td->o.mem_align || td->o.oatomic ||
td_ioengine_flagged(td, FIO_RAWIO))
- p = PAGE_ALIGN(td->orig_buffer) + td->o.mem_align;
+ p = PTR_ALIGN(td->orig_buffer, page_mask) + td->o.mem_align;
else
p = td->orig_buffer;

@@ -1264,6 +1261,10 @@ static int init_io_u(struct thread_data *td)
return 0;
}

+/*
+ * This function is Linux specific.
+ * FIO_HAVE_IOSCHED_SWITCH enabled currently means it's Linux.
+ */
static int switch_ioscheduler(struct thread_data *td)
{
#ifdef FIO_HAVE_IOSCHED_SWITCH
@@ -1274,7 +1275,8 @@ static int switch_ioscheduler(struct thread_data *td)
if (td_ioengine_flagged(td, FIO_DISKLESSIO))
return 0;

- sprintf(tmp, "%s/queue/scheduler", td->sysfs_root);
+ assert(td->files && td->files[0]);
+ sprintf(tmp, "%s/queue/scheduler", td->files[0]->du->sysfs_root);

f = fopen(tmp, "r+");
if (!f) {
@@ -1362,7 +1364,7 @@ static bool keep_running(struct thread_data *td)
uint64_t diff;

/*
- * If the difference is less than the minimum IO size, we
+ * If the difference is less than the maximum IO size, we
* are done.
*/
diff = limit - ddir_rw_sum(td->io_bytes);
diff --git a/diskutil.c b/diskutil.c
index 27ddb46..c3bcec9 100644
--- a/diskutil.c
+++ b/diskutil.c
@@ -37,6 +37,7 @@ static void disk_util_free(struct disk_util *du)
}

fio_mutex_remove(du->lock);
+ free(du->sysfs_root);
sfree(du);
}

@@ -305,7 +306,7 @@ static struct disk_util *disk_util_add(struct thread_data *td, int majdev,
return NULL;
}
strncpy((char *) du->dus.name, basename(path), FIO_DU_NAME_SZ - 1);
- du->sysfs_root = path;
+ du->sysfs_root = strdup(path);
du->major = majdev;
du->minor = mindev;
INIT_FLIST_HEAD(&du->slavelist);
@@ -430,9 +431,6 @@ static struct disk_util *__init_per_file_disk_util(struct thread_data *td,
sprintf(path, "%s", tmp);
}

- if (td->o.ioscheduler && !td->sysfs_root)
- td->sysfs_root = strdup(path);
-
return disk_util_add(td, majdev, mindev, path);
}

@@ -451,12 +449,8 @@ static struct disk_util *init_per_file_disk_util(struct thread_data *td,
mindev);

du = disk_util_exists(majdev, mindev);
- if (du) {
- if (td->o.ioscheduler && !td->sysfs_root)
- td->sysfs_root = strdup(du->sysfs_root);
-
+ if (du)
return du;
- }

/*
* for an fs without a device, we will repeatedly stat through
diff --git a/diskutil.h b/diskutil.h
index ff8a5b0..04fdde2 100644
--- a/diskutil.h
+++ b/diskutil.h
@@ -46,7 +46,6 @@ struct disk_util {
*/
struct flist_head slavelist;

- char *name;
char *sysfs_root;
char path[PATH_MAX];
int major, minor;
diff --git a/fio.h b/fio.h
index b2dade9..19ac0af 100644
--- a/fio.h
+++ b/fio.h
@@ -205,8 +205,6 @@ struct thread_data {
void *iolog_buf;
FILE *iolog_f;

- char *sysfs_root;
-
unsigned long rand_seeds[FIO_RAND_NR_OFFS];

struct frand_state bsrange_state;
@@ -619,6 +617,11 @@ extern int __must_check allocate_io_mem(struct thread_data *);
extern void free_io_mem(struct thread_data *);
extern void free_threads_shm(void);

+#ifdef FIO_INTERNAL
+#define PTR_ALIGN(ptr, mask) \
+ (char *) (((uintptr_t) (ptr) + (mask)) & ~(mask))
+#endif
+
/*
* Reset stats after ramp time completes
*/
diff --git a/gclient.c b/gclient.c
index 5ce33d0..928a1b7 100644
--- a/gclient.c
+++ b/gclient.c
@@ -48,7 +48,7 @@ static GtkActionEntry results_menu_items[] = {
{ "PrintFile", GTK_STOCK_PRINT, "Print", "<Control>P", NULL, G_CALLBACK(results_print) },
{ "CloseFile", GTK_STOCK_CLOSE, "Close", "<Control>W", NULL, G_CALLBACK(results_close) },
};
-static gint results_nmenu_items = sizeof(results_menu_items) / sizeof(results_menu_items[0]);
+static gint results_nmenu_items = ARRAY_SIZE(results_menu_items);

static const gchar *results_ui_string = " \
<ui> \
diff --git a/gfio.c b/gfio.c
index 9ccf78c..9c917cb 100644
--- a/gfio.c
+++ b/gfio.c
@@ -1271,7 +1271,7 @@ static GtkActionEntry menu_items[] = {
{ "Quit", GTK_STOCK_QUIT, NULL, "<Control>Q", NULL, G_CALLBACK(quit_clicked) },
{ "About", GTK_STOCK_ABOUT, NULL, NULL, NULL, G_CALLBACK(about_dialog) },
};
-static gint nmenu_items = sizeof(menu_items) / sizeof(menu_items[0]);
+static gint nmenu_items = ARRAY_SIZE(menu_items);

static const gchar *ui_string = " \
<ui> \
diff --git a/ioengine.h b/ioengine.h
index 89873e7..7249df6 100644
--- a/ioengine.h
+++ b/ioengine.h
@@ -123,7 +123,6 @@ struct io_u {
struct ibv_mr *mr;
#endif
void *mmap_data;
- uint64_t null;
};
};

diff --git a/lib/memalign.c b/lib/memalign.c
index cfd6e46..1d1ba9b 100644
--- a/lib/memalign.c
+++ b/lib/memalign.c
@@ -3,14 +3,12 @@
#include <inttypes.h>

#include "memalign.h"
+#include "../fio.h"

struct align_footer {
unsigned int offset;
};

-#define PTR_ALIGN(ptr, mask) \
- (char *) (((uintptr_t) ((ptr) + (mask)) & ~(mask)))
-
void *fio_memalign(size_t alignment, size_t size)
{
struct align_footer *f;
diff --git a/lib/num2str.c b/lib/num2str.c
index 940d4a5..ed3545d 100644
--- a/lib/num2str.c
+++ b/lib/num2str.c
@@ -4,8 +4,6 @@

#include "../fio.h"

-#define ARRAY_LENGTH(arr) sizeof(arr) / sizeof((arr)[0])
-
/**
* num2str() - Cheesy number->string conversion, complete with carry rounding error.
* @num: quantity (e.g., number of blocks, bytes or bits)
@@ -75,7 +73,7 @@ char *num2str(uint64_t num, int maxlen, int base, int pow2, int units)

if (modulo == -1U) {
done:
- if (post_index >= ARRAY_LENGTH(sistr))
+ if (post_index >= ARRAY_SIZE(sistr))
post_index = 0;

sprintf(buf, "%llu%s%s", (unsigned long long) num,
diff --git a/smalloc.c b/smalloc.c
index d038ac6..e48cfe8 100644
--- a/smalloc.c
+++ b/smalloc.c
@@ -13,6 +13,7 @@
#include <limits.h>
#include <fcntl.h>

+#include "fio.h"
#include "mutex.h"
#include "arch/arch.h"
#include "os/os.h"
@@ -248,7 +249,7 @@ static void *postred_ptr(struct block_hdr *hdr)
uintptr_t ptr;

ptr = (uintptr_t) hdr + hdr->size - sizeof(unsigned int);
- ptr = (ptr + int_mask) & ~int_mask;
+ ptr = (uintptr_t) PTR_ALIGN(ptr, int_mask);

return (void *) ptr;
}