Re: [PATCH v5 01/14] nvmet-fcloop: track ref counts for nports

From: Daniel Wagner
Date: Thu Apr 24 2025 - 07:14:08 EST


On Thu, Apr 24, 2025 at 12:08:33PM +0200, Hannes Reinecke wrote:
> > + nport = fcloop_nport_lookup(nodename, portname);
> > + if (!nport)
> > + return -ENOENT;
> > + spin_lock_irqsave(&fcloop_lock, flags);
> > + tport = __unlink_target_port(nport);
> > spin_unlock_irqrestore(&fcloop_lock, flags);
> Hmm. This now has a race condition; we're taking the lock
> during lokup, drop the lock, take the lock again, and unlink
> the port.
> Please do a __fcloop_nport_lookup() function which doesn't
> take a lock and avoid this race.

The lock is protecting the list iteration not the object itself. The
lookup function will increase the refcount, so it doesn't get freed
after the unlock. How is this racing?