Skip to content

Commit

Permalink
NVMe: Fix DMA mapping for admin commands
Browse files Browse the repository at this point in the history
We were always mapping as DMA_FROM_DEVICE then unmapping with
DMA_TO_DEVICE which was clearly not correct.  Follow the same pattern as
nvme_submit_io() and key off the bottom bit of the opcode to determine
whether this is a read or a write.

Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com>
  • Loading branch information
Matthew Wilcox committed Jan 10, 2012
1 parent ff976d7 commit 4974218
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions drivers/block/nvme.c
Original file line number Diff line number Diff line change
Expand Up @@ -1165,7 +1165,8 @@ static int nvme_user_admin_cmd(struct nvme_ns *ns,

length = cmd.data_len;
if (cmd.data_len) {
iod = nvme_map_user_pages(dev, 1, cmd.addr, length);
iod = nvme_map_user_pages(dev, cmd.opcode & 1, cmd.addr,
length);
if (IS_ERR(iod))
return PTR_ERR(iod);
length = nvme_setup_prps(dev, &c.common, iod, length,
Expand All @@ -1178,7 +1179,8 @@ static int nvme_user_admin_cmd(struct nvme_ns *ns,
status = nvme_submit_admin_cmd(dev, &c, NULL);

if (cmd.data_len) {
nvme_unmap_user_pages(dev, 0, cmd.addr, cmd.data_len, iod);
nvme_unmap_user_pages(dev, cmd.opcode & 1, cmd.addr,
cmd.data_len, iod);
nvme_free_iod(dev, iod);
}
return status;
Expand Down

0 comments on commit 4974218

Please sign in to comment.