Fix end-of-job slowdown for random IO with a random map

Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
diff --git a/lib/ffz.h b/lib/ffz.h
index e17a2e9..eef612d 100644
--- a/lib/ffz.h
+++ b/lib/ffz.h
@@ -1,10 +1,16 @@
 #ifndef FIO_FFZ_H
 #define FIO_FFZ_H
 
-static inline int __ffs(int word)
+static inline int __ffs(unsigned long word)
 {
 	int r = 0;
 
+#if BITS_PER_LONG == 64
+	if ((word & 0xffffffff) == 0) {
+		r += 32;
+		word >>= 32;
+	}
+#endif
 	if (!(word & 0xffff)) {
 		word >>= 16;
 		r += 16;
@@ -29,7 +35,7 @@
 	return r;
 }
 
-static inline int ffz(unsigned int bitmask)
+static inline int ffz(unsigned long bitmask)
 {
 	return __ffs(~bitmask);
 }