To allow lockless path lookup the list of nvme_ns structures per
nvme_ns_head is protected by SRCU, which requires freeing the nvme_ns
structure through call_srcu.
Can you remind me why isn't rcu sufficient? Can looking up a
path (ns from head->list) block?
blk_mq_make_request can block.
Oh I see, so can you explain why srcu should cover direct_make_request?
What if we were to do:
--
rcu_read_lock();
ns = nvme_find_path(head);
rcu_read_unlock();
if (likely(ns)) {
...
--
That way we'd have to take and release a namespace reference for every I/O.
Yea,
I'm good,
Reviewed-by: Sagi Grimberg <sagi@xxxxxxxxxxx>