NVMe: Namespace IDs are unsigned
The 'Number of Namespaces' read from the device was being treated as signed, which would cause us to not scan any namespaces for a device with more than 2 billion namespaces. That led to noticing that the namespace ID was also being treated as signed, which could lead to the result from NVME_IOCTL_ID being treated as an error code. Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com>
This commit is contained in:
parent
685585c25e
commit
c3bfe7176c
@ -36,6 +36,7 @@
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/poison.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/types.h>
|
||||
@ -1486,6 +1487,7 @@ static int nvme_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd,
|
||||
|
||||
switch (cmd) {
|
||||
case NVME_IOCTL_ID:
|
||||
force_successful_syscall_return();
|
||||
return ns->ns_id;
|
||||
case NVME_IOCTL_ADMIN_CMD:
|
||||
return nvme_user_admin_cmd(ns->dev, (void __user *)arg);
|
||||
@ -1588,7 +1590,7 @@ static void nvme_config_discard(struct nvme_ns *ns)
|
||||
queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, ns->queue);
|
||||
}
|
||||
|
||||
static struct nvme_ns *nvme_alloc_ns(struct nvme_dev *dev, int nsid,
|
||||
static struct nvme_ns *nvme_alloc_ns(struct nvme_dev *dev, unsigned nsid,
|
||||
struct nvme_id_ns *id, struct nvme_lba_range_type *rt)
|
||||
{
|
||||
struct nvme_ns *ns;
|
||||
@ -1768,7 +1770,8 @@ static void nvme_free_queues(struct nvme_dev *dev)
|
||||
*/
|
||||
static int nvme_dev_add(struct nvme_dev *dev)
|
||||
{
|
||||
int res, nn, i;
|
||||
int res;
|
||||
unsigned nn, i;
|
||||
struct nvme_ns *ns;
|
||||
struct nvme_id_ctrl *ctrl;
|
||||
struct nvme_id_ns *id_ns;
|
||||
|
@ -104,7 +104,7 @@ struct nvme_ns {
|
||||
struct request_queue *queue;
|
||||
struct gendisk *disk;
|
||||
|
||||
int ns_id;
|
||||
unsigned ns_id;
|
||||
int lba_shift;
|
||||
int ms;
|
||||
u64 mode_select_num_blocks;
|
||||
|
Loading…
Reference in New Issue
Block a user