> On 3/16/22 11:21, Kanchan Joshi wrote: > > 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 > > Cool, what does that have to do with what I asked? Maybe nothing. This was rather about how to set up nvmeof if block-interface does not exist for the underlying nvme device. > >>> 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. > > No it isn't. nvme_find_path is a simple function that retrieves an I/O > capable path which is not guaranteed to exist, it has nothing to do with > I/O requeue/failover. Got it, thanks. Passthrough (sync or async) just returns the failure to user-space if that fails. No attempt to retry/requeue as the block path does. -- Kanchan