On 3/18/19 2:32 PM, Marcin Dziegielewski wrote:
On 3/14/19 2:56 PM, Matias Bjørling wrote:
On 3/14/19 6:41 AM, Marcin Dziegielewski wrote:
Open channel devices are not able to handle traditional
IO requests addressed by LBA, so following current
approach to exposing special nvme devices as zero size
(e.g. with namespace formatted to use metadata) also
open channel devices should be exposed as zero size
to OS.
Signed-off-by: Marcin Dziegielewski <marcin.dziegielew...@intel.com>
---
drivers/nvme/host/core.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index 07bf2bf..52cd5c8 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -1606,7 +1606,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->ndev)
capacity = 0;
set_capacity(disk, capacity);
Marcin,
The read/write as traditional I/Os feature is supported in OCSSD 2.0.
For example, one can hook support up through the zone device support
in the kernel. There is a patch here that enables it here:
https://github.com/OpenChannelSSD/linux/commit/e79e747601a315784e505d51a9265e82a3e7613c
With that, an OCSSD device can be used as a traditional zoned block
device, and use the existing infrastructure. Which is really neat.
It is not upstream, since it depends on some features that we
introduce with zoned namespaces, but in general, tools can read/write
from a block device as any other, just honoring the special write
rules that are for OCSSD/zoned block devices.
-Matias
Matias,
If zone related changes will be in upstream soon, I agree that this
patch is not needed.
But, I can not agree that tools can use OCSSD device as normal block
device - for example in current implementation I don't see way to send
erase request and of course without it we can not send write. Because of
that, it was my intention to block normal IO to OCSSD device by default.
Marcin
It is implemented the same way as "Zone reset" is implemented in
ZAC/ZBC. The kernel converts the trim to a vector erase and issues that
instead.