NVMe: Use user defined admin ioctl timeout
authorKeith Busch <keith.busch@intel.com>
Thu, 9 May 2013 20:01:38 +0000 (14:01 -0600)
committerMatthew Wilcox <matthew.r.wilcox@intel.com>
Thu, 9 May 2013 20:03:50 +0000 (16:03 -0400)
Signed-off-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com>
drivers/block/nvme-core.c

index 310d573b9e8da38b4361542e98f88e595f02a47d..8efdfaa44a59231165bf2307d8dbedaf59cd9ca0 100644 (file)
@@ -1392,6 +1392,7 @@ static int nvme_user_admin_cmd(struct nvme_dev *dev,
        struct nvme_command c;
        int status, length;
        struct nvme_iod *uninitialized_var(iod);
+       unsigned timeout;
 
        if (!capable(CAP_SYS_ADMIN))
                return -EACCES;
@@ -1421,10 +1422,13 @@ static int nvme_user_admin_cmd(struct nvme_dev *dev,
                                                                GFP_KERNEL);
        }
 
+       timeout = cmd.timeout_ms ? msecs_to_jiffies(cmd.timeout_ms) :
+                                                               ADMIN_TIMEOUT;
        if (length != cmd.data_len)
                status = -ENOMEM;
        else
-               status = nvme_submit_admin_cmd(dev, &c, &cmd.result);
+               status = nvme_submit_sync_cmd(dev->queues[0], &c, &cmd.result,
+                                                               timeout);
 
        if (cmd.data_len) {
                nvme_unmap_user_pages(dev, cmd.opcode & 1, iod);