Re: [PATCH v3 08/16] nvmet-fc: untangle cross refcounting objects

From: Daniel Wagner
Date: Thu Dec 21 2023 - 04:26:37 EST


On Tue, Dec 19, 2023 at 06:16:48AM +0100, Christoph Hellwig wrote:
> On Mon, Dec 18, 2023 at 04:30:56PM +0100, Daniel Wagner wrote:
> > The live time of the queues are strictly bound to the lifetime of an
>
> > + struct nvmet_fc_tgt_queue *_queues[NVMET_NR_QUEUES + 1];
> > struct nvmet_fc_tgt_queue __rcu *queues[NVMET_NR_QUEUES + 1];
>
> For magic prefixes we use __, not _ in Linux. But having two arrays
> of queues right next to each other, once with rcu annotation and one
> not rings a bit far warning bell to me. Why do we have both? When
> are we supposed to use either? Why is FC different from rest?

This is my attempt to solve the problem that after NULLing the rcu
pointer and wait for an RCU graceperiod I still need to cleanup the
queues. Thus I need to keep hold on the queue pointers a bit longer.
Indeed not so elegant.

I'm sure there is a better way to do it, I just didn't figure it out
when I wrote this part. Any tips are highly welcomed how to solve this
puzzle.

> I really don't have any good answers as I don't know the code in the
> FC transport very well, but I think this needs more work.

Indeed, blktests still is able to run into a hanger. So not all problems
are sovled but getting closer.