diff --git a/lnet/include/libcfs/user-bitops.h b/lnet/include/libcfs/user-bitops.h
index 3147f72cf7e8018b62d0f2c616e08f6a8a79d1d9..be248abfd02bb8b6a0ff63e0b7cad0bd646ca87a 100644
--- a/lnet/include/libcfs/user-bitops.h
+++ b/lnet/include/libcfs/user-bitops.h
@@ -82,8 +82,12 @@ static __inline__ unsigned long __fls(long data)
 		return 0;
 
 #if BITS_PER_LONG == 64
-        if ((data & 0xFFFFFFFF) == 0)
+        pos += 32;
+
+        if ((data & 0xFFFFFFFF) == 0) {
                 data <<= 32;
+                pos -= 32;
+        }
 #endif
 
 	if (!(data & 0xFFFF0000u)) {