IBiser: Fix wrong mask when sizeof (dma_addr_t) > sizeof (unsigned long)
authorOr Gerlitz <ogerlitz@mellanox.com>
Mon, 1 Aug 2011 21:12:09 +0000 (21:12 +0000)
committerRoland Dreier <roland@purestorage.com>
Wed, 17 Aug 2011 16:40:55 +0000 (09:40 -0700)
The code that prepares the SG associated with SCSI command for FMR was
buggy for systems with DMA addresses that don't fit in unsigned long,
e.g under the 32-bit based XenServer dom0 sizeof(dma_addr_t) is 8.

Fix that by casting to unsigned long long a masking constant used by
the code. This resolves a crash in iser_sg_to_page_vec on this system.

Signed-off-by: Or Gerlitz <ogerlitz@mellanox.co.il>
Signed-off-by: Roland Dreier <roland@purestorage.com>
drivers/infiniband/ulp/iser/iscsi_iser.h

index 342cbc1..db6f3ce 100644 (file)
@@ -89,7 +89,7 @@
        } while (0)
 
 #define SHIFT_4K       12
-#define SIZE_4K        (1UL << SHIFT_4K)
+#define SIZE_4K        (1ULL << SHIFT_4K)
 #define MASK_4K        (~(SIZE_4K-1))
 
                                        /* support up to 512KB in one RDMA */