Fix compile of RDMA engine for SunOS 5.x
- byteswap.h include that doesn't exist there. Kill it, we
have no use for it.
- No RLIMIT_MEMLOCK on SunOS. The use in the engine is a bit
suspect, so not a problem if we don't have it. Add configure
check for that.
Signed-off-by: Jens Axboe <axboe@kernel.dk>
diff --git a/configure b/configure
index 8125fc3..1a5295a 100755
--- a/configure
+++ b/configure
@@ -909,6 +909,23 @@
fi
echo "TCP_NODELAY $tcp_nodelay"
+##########################################
+# Check whether we have RLIMIT_MEMLOCK
+rlimit_memlock="no"
+cat > $TMPC << EOF
+#include <sys/time.h>
+#include <sys/resource.h>
+int main(int argc, char **argv)
+{
+ struct rlimit rl;
+ return getrlimit(RLIMIT_MEMLOCK, &rl);
+}
+EOF
+if compile_prog "" "" "RLIMIT_MEMLOCK"; then
+ rlimit_memlock="yes"
+fi
+echo "RLIMIT_MEMLOCK $rlimit_memlock"
+
#############################################################################
echo "# Automatically generated by configure - do not modify" > $config_host_mak
@@ -1017,6 +1034,9 @@
if test "$tcp_nodelay" = "yes" ; then
output_sym "CONFIG_TCP_NODELAY"
fi
+if test "$rlimit_memlock" = "yes" ; then
+ output_sym "CONFIG_RLIMIT_MEMLOCK"
+fi
echo "LIBS+=$LIBS" >> $config_host_mak
echo "CC=$cc" >> $config_host_mak
diff --git a/engines/rdma.c b/engines/rdma.c
index e1fb380..ea1af2b 100644
--- a/engines/rdma.c
+++ b/engines/rdma.c
@@ -36,7 +36,6 @@
#include <sys/time.h>
#include <sys/resource.h>
-#include <byteswap.h>
#include <pthread.h>
#include <inttypes.h>
@@ -1013,26 +1012,11 @@
return 0;
}
-static int fio_rdmaio_init(struct thread_data *td)
+static int check_set_rlimits(struct thread_data *td)
{
- struct rdmaio_data *rd = td->io_ops->data;
- struct flist_head *entry;
- unsigned int max_bs;
- unsigned int port;
- char host[64], buf[128];
- char *sep, *portp, *modep;
- int ret, i = 0;
+#ifdef CONFIG_RLIMIT_MEMLOCK
struct rlimit rl;
- if (td_rw(td)) {
- log_err("fio: rdma connections must be read OR write\n");
- return 1;
- }
- if (td_random(td)) {
- log_err("fio: RDMA network IO can't be random\n");
- return 1;
- }
-
/* check RLIMIT_MEMLOCK */
if (getrlimit(RLIMIT_MEMLOCK, &rl) != 0) {
log_err("fio: getrlimit fail: %d(%s)\n",
@@ -1057,6 +1041,32 @@
return 1;
}
}
+#endif
+
+ return 0;
+}
+
+static int fio_rdmaio_init(struct thread_data *td)
+{
+ struct rdmaio_data *rd = td->io_ops->data;
+ struct flist_head *entry;
+ unsigned int max_bs;
+ unsigned int port;
+ char host[64], buf[128];
+ char *sep, *portp, *modep;
+ int ret, i = 0;
+
+ if (td_rw(td)) {
+ log_err("fio: rdma connections must be read OR write\n");
+ return 1;
+ }
+ if (td_random(td)) {
+ log_err("fio: RDMA network IO can't be random\n");
+ return 1;
+ }
+
+ if (check_set_rlimits(td))
+ return 1;
strcpy(buf, td->o.filename);