Skip to content

Commit

Permalink
nvmet-fc: move RCU read lock to nvmet_fc_assoc_exists
Browse files Browse the repository at this point in the history
The RCU lock is only needed for the lookup loop and not for
list_ad_tail_rcu call. Thus move it down the call chain into
nvmet_fc_assoc_exists.

While at it also fix the name typo of the function.

Signed-off-by: Daniel Wagner <[email protected]>
Reviewed-by: Hannes Reinecke <[email protected]>
Signed-off-by: Keith Busch <[email protected]>
  • Loading branch information
igaw authored and keithbusch committed Apr 4, 2024
1 parent 95409e2 commit db67bb3
Showing 1 changed file with 10 additions and 7 deletions.
17 changes: 10 additions & 7 deletions drivers/nvme/target/fc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1115,16 +1115,21 @@ nvmet_fc_schedule_delete_assoc(struct nvmet_fc_tgt_assoc *assoc)
}

static bool
nvmet_fc_assoc_exits(struct nvmet_fc_tgtport *tgtport, u64 association_id)
nvmet_fc_assoc_exists(struct nvmet_fc_tgtport *tgtport, u64 association_id)
{
struct nvmet_fc_tgt_assoc *a;
bool found = false;

rcu_read_lock();
list_for_each_entry_rcu(a, &tgtport->assoc_list, a_list) {
if (association_id == a->association_id)
return true;
if (association_id == a->association_id) {
found = true;
break;
}
}
rcu_read_unlock();

return false;
return found;
}

static struct nvmet_fc_tgt_assoc *
Expand Down Expand Up @@ -1164,13 +1169,11 @@ nvmet_fc_alloc_target_assoc(struct nvmet_fc_tgtport *tgtport, void *hosthandle)
ran = ran << BYTES_FOR_QID_SHIFT;

spin_lock_irqsave(&tgtport->lock, flags);
rcu_read_lock();
if (!nvmet_fc_assoc_exits(tgtport, ran)) {
if (!nvmet_fc_assoc_exists(tgtport, ran)) {
assoc->association_id = ran;
list_add_tail_rcu(&assoc->a_list, &tgtport->assoc_list);
done = true;
}
rcu_read_unlock();
spin_unlock_irqrestore(&tgtport->lock, flags);
} while (!done);

Expand Down

0 comments on commit db67bb3

Please sign in to comment.