Commit fec558b5 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Jens Axboe

NVMe: fix type warning on 32-bit

A recent change to the ioctl handling caused a new harmless
warning in the NVMe driver on all 32-bit machines:

drivers/block/nvme-core.c: In function 'nvme_submit_io':
drivers/block/nvme-core.c:1794:29: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]

In order to shup up that warning, this introduces a new
temporary variable that uses a double cast to extract
the pointer from an __u64 structure member.
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Fixes: a67a9513 ("NVMe: Meta data handling through submit io ioctl")
Acked-by: default avatarKeith Busch <keith.busch@intel.com>
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent aad653a0
...@@ -1750,6 +1750,7 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio) ...@@ -1750,6 +1750,7 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio)
struct nvme_iod *iod; struct nvme_iod *iod;
dma_addr_t meta_dma = 0; dma_addr_t meta_dma = 0;
void *meta = NULL; void *meta = NULL;
void __user *metadata;
if (copy_from_user(&io, uio, sizeof(io))) if (copy_from_user(&io, uio, sizeof(io)))
return -EFAULT; return -EFAULT;
...@@ -1763,6 +1764,8 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio) ...@@ -1763,6 +1764,8 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio)
meta_len = 0; meta_len = 0;
} }
metadata = (void __user *)(unsigned long)io.metadata;
write = io.opcode & 1; write = io.opcode & 1;
switch (io.opcode) { switch (io.opcode) {
...@@ -1786,13 +1789,13 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio) ...@@ -1786,13 +1789,13 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio)
if (meta_len) { if (meta_len) {
meta = dma_alloc_coherent(&dev->pci_dev->dev, meta_len, meta = dma_alloc_coherent(&dev->pci_dev->dev, meta_len,
&meta_dma, GFP_KERNEL); &meta_dma, GFP_KERNEL);
if (!meta) { if (!meta) {
status = -ENOMEM; status = -ENOMEM;
goto unmap; goto unmap;
} }
if (write) { if (write) {
if (copy_from_user(meta, (void __user *)io.metadata, if (copy_from_user(meta, metadata, meta_len)) {
meta_len)) {
status = -EFAULT; status = -EFAULT;
goto unmap; goto unmap;
} }
...@@ -1819,8 +1822,7 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio) ...@@ -1819,8 +1822,7 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio)
nvme_free_iod(dev, iod); nvme_free_iod(dev, iod);
if (meta) { if (meta) {
if (status == NVME_SC_SUCCESS && !write) { if (status == NVME_SC_SUCCESS && !write) {
if (copy_to_user((void __user *)io.metadata, meta, if (copy_to_user(metadata, meta, meta_len))
meta_len))
status = -EFAULT; status = -EFAULT;
} }
dma_free_coherent(&dev->pci_dev->dev, meta_len, meta, meta_dma); dma_free_coherent(&dev->pci_dev->dev, meta_len, meta, meta_dma);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment