On Tue, Mar 15, 2022 at 11:02:30AM +0200, Sagi Grimberg wrote: > >>>>+int nvme_ns_head_chr_async_cmd(struct io_uring_cmd *ioucmd) >>>>+{ >>>>+ struct cdev *cdev = file_inode(ioucmd->file)->i_cdev; >>>>+ struct nvme_ns_head *head = container_of(cdev, struct nvme_ns_head, cdev); >>>>+ int srcu_idx = srcu_read_lock(&head->srcu); >>>>+ struct nvme_ns *ns = nvme_find_path(head); >>>>+ int ret = -EWOULDBLOCK; >>>>+ >>>>+ if (ns) >>>>+ ret = nvme_ns_async_ioctl(ns, ioucmd); >>>>+ srcu_read_unlock(&head->srcu, srcu_idx); >>>>+ return ret; >>>>+} >>> >>>No one cares that this has no multipathing capabilities what-so-ever? >>>despite being issued on the mpath device node? >>> >>>I know we are not doing multipathing for userspace today, but this >>>feels like an alternative I/O interface for nvme, seems a bit cripled >>>with zero multipathing capabilities... >> >>Multipathing is on the radar. Either in the first cut or in >>subsequent. Thanks for bringing this up. > >Good to know... > >>So the char-node (/dev/ngX) will be exposed to the host if we enable >>controller passthru on the target side. And then the host can send >>commands using uring-passthru in the same way. > >Not sure I follow... Doing this on target side: echo -n /dev/nvme0 > /sys/kernel/config/nvmet/subsystems/testnqn/passthru/device_path echo 1 > /sys/kernel/config/nvmet/subsystems/testnqn/passthru/enable >>May I know what are the other requirements here. > >Again, not sure I follow... The fundamental capability is to >requeue/failover I/O if there is no I/O capable path available... That is covered I think, with nvme_find_path() at places including the one you highlighted above.