nvme: set 0 capacity if namespace block size exceeds PAGE_SIZE
If our target exposed a namespace with a block size that is greater than PAGE_SIZE, set 0 capacity on the namespace as we do not support it. This issue encountered when the nvmet namespace was backed by a tempfile. Signed-off-by: Sagi Grimberg <sagi@grimberg.me> Reviewed-by: Keith Busch <keith.busch@intel.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
82bebbde02
commit
01fa017484
@ -1591,6 +1591,10 @@ static void nvme_update_disk_info(struct gendisk *disk,
|
||||
sector_t capacity = le64_to_cpu(id->nsze) << (ns->lba_shift - 9);
|
||||
unsigned short bs = 1 << ns->lba_shift;
|
||||
|
||||
if (ns->lba_shift > PAGE_SHIFT) {
|
||||
/* unsupported block size, set capacity to 0 later */
|
||||
bs = (1 << 9);
|
||||
}
|
||||
blk_mq_freeze_queue(disk->queue);
|
||||
blk_integrity_unregister(disk);
|
||||
|
||||
@ -1601,7 +1605,8 @@ static void nvme_update_disk_info(struct gendisk *disk,
|
||||
if (ns->ms && !ns->ext &&
|
||||
(ns->ctrl->ops->flags & NVME_F_METADATA_SUPPORTED))
|
||||
nvme_init_integrity(disk, ns->ms, ns->pi_type);
|
||||
if (ns->ms && !nvme_ns_has_pi(ns) && !blk_get_integrity(disk))
|
||||
if ((ns->ms && !nvme_ns_has_pi(ns) && !blk_get_integrity(disk)) ||
|
||||
ns->lba_shift > PAGE_SHIFT)
|
||||
capacity = 0;
|
||||
|
||||
set_capacity(disk, capacity);
|
||||
|
Loading…
Reference in New Issue
Block a user