sg: fix sign extension
authorJens Axboe <axboe@kernel.dk>
Thu, 22 Mar 2018 02:09:36 +0000 (20:09 -0600)
committerJens Axboe <axboe@kernel.dk>
Thu, 22 Mar 2018 02:09:36 +0000 (20:09 -0600)
Signed-off-by: Jens Axboe <axboe@kernel.dk>
engines/sg.c

index 3d927eab857b092ed4950b7e13b7833c342c2a8e..72eed8b30741dcad3def977fbb929280f2debdfb 100644 (file)
@@ -455,8 +455,10 @@ static int fio_sgio_read_capacity(struct thread_data *td, unsigned int *bs,
                return ret;
        }
 
-       *bs      = (buf[4] << 24) | (buf[5] << 16) | (buf[6] << 8) | buf[7];
-       *max_lba = ((buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]) & MAX_10B_LBA;  // for some reason max_lba is being sign extended even though unsigned.
+       *bs      = ((unsigned long) buf[4] << 24) | ((unsigned long) buf[5] << 16) |
+                  ((unsigned long) buf[6] << 8) | (unsigned long) buf[7];
+       *max_lba = ((unsigned long) buf[0] << 24) | ((unsigned long) buf[1] << 16) |
+                  ((unsigned long) buf[2] << 8) | (unsigned long) buf[3];
 
        /*
         * If max lba masked by MAX_10B_LBA equals MAX_10B_LBA,