targetos="Linux"
elif check_define __OpenBSD__ ; then
targetos='OpenBSD'
+elif check_define __NetBSD__ ; then
+ targetos='NetBSD'
elif check_define __sun__ ; then
targetos='SunOS'
CFLAGS="$CFLAGS -D_REENTRANT"
# cross-compiling to one of these OSes then you'll need to specify
# the correct CPU with the --cpu option.
case $targetos in
-AIX|OpenBSD)
+AIX|*BSD)
# Unless explicitly enabled, turn off lex.
# OpenBSD will hit syntax error when enabled.
if test -z "$disable_lex" ; then
void prune_io_piece_log(struct thread_data *td)
{
struct io_piece *ipo;
- struct rb_node *n;
+ struct fio_rb_node *n;
while ((n = rb_first(&td->io_hist_tree)) != NULL) {
ipo = rb_entry(n, struct io_piece, rb_node);
*/
void log_io_piece(struct thread_data *td, struct io_u *io_u)
{
- struct rb_node **p, *parent;
+ struct fio_rb_node **p, *parent;
struct io_piece *ipo, *__ipo;
ipo = malloc(sizeof(struct io_piece));
*/
struct io_piece {
union {
- struct rb_node rb_node;
+ struct fio_rb_node rb_node;
struct flist_head list;
};
struct flist_head trim_list;
#include "rbtree.h"
-static void __rb_rotate_left(struct rb_node *node, struct rb_root *root)
+static void __rb_rotate_left(struct fio_rb_node *node, struct rb_root *root)
{
- struct rb_node *right = node->rb_right;
- struct rb_node *parent = rb_parent(node);
+ struct fio_rb_node *right = node->rb_right;
+ struct fio_rb_node *parent = rb_parent(node);
if ((node->rb_right = right->rb_left))
rb_set_parent(right->rb_left, node);
rb_set_parent(node, right);
}
-static void __rb_rotate_right(struct rb_node *node, struct rb_root *root)
+static void __rb_rotate_right(struct fio_rb_node *node, struct rb_root *root)
{
- struct rb_node *left = node->rb_left;
- struct rb_node *parent = rb_parent(node);
+ struct fio_rb_node *left = node->rb_left;
+ struct fio_rb_node *parent = rb_parent(node);
if ((node->rb_left = left->rb_right))
rb_set_parent(left->rb_right, node);
rb_set_parent(node, left);
}
-void rb_insert_color(struct rb_node *node, struct rb_root *root)
+void rb_insert_color(struct fio_rb_node *node, struct rb_root *root)
{
- struct rb_node *parent, *gparent;
+ struct fio_rb_node *parent, *gparent;
while ((parent = rb_parent(node)) && rb_is_red(parent))
{
if (parent == gparent->rb_left)
{
{
- register struct rb_node *uncle = gparent->rb_right;
+ register struct fio_rb_node *uncle = gparent->rb_right;
if (uncle && rb_is_red(uncle))
{
rb_set_black(uncle);
if (parent->rb_right == node)
{
- register struct rb_node *tmp;
+ register struct fio_rb_node *tmp;
__rb_rotate_left(parent, root);
tmp = parent;
parent = node;
__rb_rotate_right(gparent, root);
} else {
{
- register struct rb_node *uncle = gparent->rb_left;
+ register struct fio_rb_node *uncle = gparent->rb_left;
if (uncle && rb_is_red(uncle))
{
rb_set_black(uncle);
if (parent->rb_left == node)
{
- register struct rb_node *tmp;
+ register struct fio_rb_node *tmp;
__rb_rotate_right(parent, root);
tmp = parent;
parent = node;
rb_set_black(root->rb_node);
}
-static void __rb_erase_color(struct rb_node *node, struct rb_node *parent,
+static void __rb_erase_color(struct fio_rb_node *node,
+ struct fio_rb_node *parent,
struct rb_root *root)
{
- struct rb_node *other;
+ struct fio_rb_node *other;
while ((!node || rb_is_black(node)) && node != root->rb_node)
{
{
if (!other->rb_right || rb_is_black(other->rb_right))
{
- struct rb_node *o_left;
+ struct fio_rb_node *o_left;
if ((o_left = other->rb_left))
rb_set_black(o_left);
rb_set_red(other);
{
if (!other->rb_left || rb_is_black(other->rb_left))
{
- register struct rb_node *o_right;
+ register struct fio_rb_node *o_right;
if ((o_right = other->rb_right))
rb_set_black(o_right);
rb_set_red(other);
rb_set_black(node);
}
-void rb_erase(struct rb_node *node, struct rb_root *root)
+void rb_erase(struct fio_rb_node *node, struct rb_root *root)
{
- struct rb_node *child, *parent;
+ struct fio_rb_node *child, *parent;
int color;
if (!node->rb_left)
child = node->rb_left;
else
{
- struct rb_node *old = node, *left;
+ struct fio_rb_node *old = node, *left;
node = node->rb_right;
while ((left = node->rb_left) != NULL)
/*
* This function returns the first node (in sort order) of the tree.
*/
-struct rb_node *rb_first(struct rb_root *root)
+struct fio_rb_node *rb_first(struct rb_root *root)
{
- struct rb_node *n;
+ struct fio_rb_node *n;
n = root->rb_node;
if (!n)
return n;
}
-struct rb_node *rb_next(const struct rb_node *node)
+struct fio_rb_node *rb_next(const struct fio_rb_node *node)
{
- struct rb_node *parent;
+ struct fio_rb_node *parent;
if (RB_EMPTY_NODE(node))
return NULL;
node = node->rb_right;
while (node->rb_left)
node=node->rb_left;
- return (struct rb_node *)node;
+ return (struct fio_rb_node *)node;
}
/*
static inline struct page * rb_search_page_cache(struct inode * inode,
unsigned long offset)
{
- struct rb_node * n = inode->i_rb_page_cache.rb_node;
+ struct fio_rb_node * n = inode->i_rb_page_cache.rb_node;
struct page * page;
while (n)
static inline struct page * __rb_insert_page_cache(struct inode * inode,
unsigned long offset,
- struct rb_node * node)
+ struct fio_rb_node * node)
{
- struct rb_node ** p = &inode->i_rb_page_cache.rb_node;
- struct rb_node * parent = NULL;
+ struct fio_rb_node ** p = &inode->i_rb_page_cache.rb_node;
+ struct fio_rb_node * parent = NULL;
struct page * page;
while (*p)
static inline struct page * rb_insert_page_cache(struct inode * inode,
unsigned long offset,
- struct rb_node * node)
+ struct fio_rb_node * node)
{
struct page * ret;
if ((ret = __rb_insert_page_cache(inode, offset, node)))
#include <stdlib.h>
#include <inttypes.h>
-struct rb_node
+struct fio_rb_node
{
intptr_t rb_parent_color;
#define RB_RED 0
#define RB_BLACK 1
- struct rb_node *rb_right;
- struct rb_node *rb_left;
+ struct fio_rb_node *rb_right;
+ struct fio_rb_node *rb_left;
} __attribute__((aligned(sizeof(long))));
/* The alignment might seem pointless, but allegedly CRIS needs it */
struct rb_root
{
- struct rb_node *rb_node;
+ struct fio_rb_node *rb_node;
};
-#define rb_parent(r) ((struct rb_node *)((r)->rb_parent_color & ~3))
+#define rb_parent(r) ((struct fio_rb_node *)((r)->rb_parent_color & ~3))
#define rb_color(r) ((r)->rb_parent_color & 1)
#define rb_is_red(r) (!rb_color(r))
#define rb_is_black(r) rb_color(r)
#define rb_set_red(r) do { (r)->rb_parent_color &= ~1; } while (0)
#define rb_set_black(r) do { (r)->rb_parent_color |= 1; } while (0)
-static inline void rb_set_parent(struct rb_node *rb, struct rb_node *p)
+static inline void rb_set_parent(struct fio_rb_node *rb, struct fio_rb_node *p)
{
rb->rb_parent_color = (rb->rb_parent_color & 3) | (uintptr_t)p;
}
-static inline void rb_set_color(struct rb_node *rb, int color)
+static inline void rb_set_color(struct fio_rb_node *rb, int color)
{
rb->rb_parent_color = (rb->rb_parent_color & ~1) | color;
}
#define RB_EMPTY_NODE(node) (rb_parent(node) == node)
#define RB_CLEAR_NODE(node) (rb_set_parent(node, node))
-extern void rb_insert_color(struct rb_node *, struct rb_root *);
-extern void rb_erase(struct rb_node *, struct rb_root *);
+extern void rb_insert_color(struct fio_rb_node *, struct rb_root *);
+extern void rb_erase(struct fio_rb_node *, struct rb_root *);
/* Find logical next and previous nodes in a tree */
-extern struct rb_node *rb_first(struct rb_root *);
-extern struct rb_node *rb_next(const struct rb_node *);
+extern struct fio_rb_node *rb_first(struct rb_root *);
+extern struct fio_rb_node *rb_next(const struct fio_rb_node *);
-static inline void rb_link_node(struct rb_node * node, struct rb_node * parent,
- struct rb_node ** rb_link)
+static inline void rb_link_node(struct fio_rb_node * node,
+ struct fio_rb_node * parent,
+ struct fio_rb_node ** rb_link)
{
node->rb_parent_color = (uintptr_t)parent;
node->rb_left = node->rb_right = NULL;
c = strdup(p);
for (i = 0; i < strlen(c); i++)
- c[i] = tolower(c[i]);
+ c[i] = tolower((unsigned char)c[i]);
if (!strncmp("us", c, 2) || !strncmp("usec", c, 4))
mult = 1;
c = strdup(p);
for (i = 0; i < strlen(c); i++) {
- c[i] = tolower(c[i]);
+ c[i] = tolower((unsigned char)c[i]);
if (is_separator(c[i])) {
c[i] = '\0';
break;
char time_buf[32];
struct timeval now;
unsigned long long ms_since_epoch;
+ time_t tv_sec;
gettimeofday(&now, NULL);
ms_since_epoch = (unsigned long long)(now.tv_sec) * 1000 +
(unsigned long long)(now.tv_usec) / 1000;
- os_ctime_r((const time_t *) &now.tv_sec, time_buf,
- sizeof(time_buf));
+ tv_sec = now.tv_sec;
+ os_ctime_r(&tv_sec, time_buf, sizeof(time_buf));
if (time_buf[strlen(time_buf) - 1] == '\n')
time_buf[strlen(time_buf) - 1] = '\0';
};
struct chunk {
- struct rb_node rb_node;
+ struct fio_rb_node rb_node;
uint64_t count;
uint32_t hash[MD5_HASH_WORDS];
struct flist_head extent_list[0];
static void insert_chunk(struct item *i)
{
- struct rb_node **p, *parent;
+ struct fio_rb_node **p, *parent;
struct chunk *c;
int diff;
static void iter_rb_tree(uint64_t *nextents, uint64_t *nchunks)
{
- struct rb_node *n;
+ struct fio_rb_node *n;
*nchunks = *nextents = 0;
return 0;
if (!RB_EMPTY_ROOT(&td->io_hist_tree)) {
- struct rb_node *n = rb_first(&td->io_hist_tree);
+ struct fio_rb_node *n = rb_first(&td->io_hist_tree);
ipo = rb_entry(n, struct io_piece, rb_node);