[PATCH] Fix buffer alignment on non-4kb archs

Retrieve page size through sysconf.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
diff --git a/fio.c b/fio.c
index 7ddde7d..cc54c83 100644
--- a/fio.c
+++ b/fio.c
@@ -37,9 +37,9 @@
 #include "fio.h"
 #include "os.h"
 
-#define MASK	(4095)
-
-#define ALIGN(buf)	(char *) (((unsigned long) (buf) + MASK) & ~(MASK))
+static unsigned long page_mask;
+#define ALIGN(buf)	\
+	(char *) (((unsigned long) (buf) + page_mask) & ~page_mask)
 
 int groupid = 0;
 int thread_number = 0;
@@ -528,7 +528,7 @@
 	if (td->mem_type == MEM_SHMHUGE || td->mem_type == MEM_MMAPHUGE)
 		td->orig_buffer_size = (td->orig_buffer_size + td->hugepage_size - 1) & ~(td->hugepage_size - 1);
 	else
-		td->orig_buffer_size += MASK;
+		td->orig_buffer_size += page_mask;
 
 	if (allocate_io_mem(td))
 		return 1;
@@ -996,6 +996,8 @@
 
 int main(int argc, char *argv[])
 {
+	long ps;
+
 	if (parse_options(argc, argv))
 		return 1;
 
@@ -1004,6 +1006,14 @@
 		return 1;
 	}
 
+	ps = sysconf(_SC_PAGESIZE);
+	if (ps < 0) {
+		log_err("Failed to get page size\n");
+		return 1;
+	}
+
+	page_mask = ps - 1;
+
 	if (write_bw_log) {
 		setup_log(&agg_io_log[DDIR_READ]);
 		setup_log(&agg_io_log[DDIR_WRITE]);