int nvme_get_log_ext(struct nvme_ctrl *ctrl, struct nvme_ns *ns,
                     u8 log_page, void *log,
-                    size_t size, size_t offset)
+                    size_t size, u64 offset)
 {
        struct nvme_command c = { };
        unsigned long dwlen = size / 4 - 1;
        c.get_log_page.lid = log_page;
        c.get_log_page.numdl = cpu_to_le16(dwlen & ((1 << 16) - 1));
        c.get_log_page.numdu = cpu_to_le16(dwlen >> 16);
-       c.get_log_page.lpol = cpu_to_le32(offset & ((1ULL << 32) - 1));
-       c.get_log_page.lpou = cpu_to_le32(offset >> 32ULL);
+       c.get_log_page.lpol = cpu_to_le32(lower_32_bits(offset));
+       c.get_log_page.lpou = cpu_to_le32(upper_32_bits(offset));
 
        return nvme_submit_sync_cmd(ctrl->admin_q, &c, log, size);
 }
 
 int nvme_delete_ctrl_sync(struct nvme_ctrl *ctrl);
 
 int nvme_get_log_ext(struct nvme_ctrl *ctrl, struct nvme_ns *ns,
-               u8 log_page, void *log, size_t size, size_t offset);
+               u8 log_page, void *log, size_t size, u64 offset);
 
 extern const struct attribute_group nvme_ns_id_attr_group;
 extern const struct block_device_operations nvme_ns_head_ops;