drivers: scsi: fcoe: fcoe_ctlr: Pass lockdep expression to RCU lists
PATCH 1/2 drivers: scsi: fcoe: fcoe_ctlr: Pass lockdep expression to RCU lists
lport->disc.rports and disc->rports are traversed using list_for_each_entry_rcu outside an RCU read-side critical section but under the protection of lport->disc.disc_mutex and disc->disc_mutex respectively.
Hence, add corresponding lockdep expression to silence false-positive lockdep warnings, and harden RCU lists.
Signed-off-by Amol Grover <[email protected]>
--- drivers/scsi/fcoe/fcoe_ctlr.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
drivers/scsi/fcoe/fcoe_ctlr.c +6 -3
@@ -2167,7 +2167,8 @@ static void fcoe_ctlr_disc_stop_locked(struct fc_lport *lport)struct fc_rport_priv *rdata;mutex_lock (&lport->disc.disc_mutex); -list_for_each_entry_rcu (rdata, &lport->disc.rports, peers) { +list_for_each_entry_rcu (rdata, &lport->disc.rports, peers, +lockdep_is_held (&lport->disc.disc_mutex)) {if (kref_get_unless_zero (&rdata->kref)) {fc_rport_logoff (rdata);kref_put (&rdata->kref, fc_rport_destroy);
@@ -2703,7 +2704,8 @@ static unsigned long fcoe_ctlr_vn_age(struct fcoe_ctlr *fip) next_time = jiffies +msecs_to_jiffies (FIP_VN_BEACON_INT *10 );mutex_lock (&lport->disc.disc_mutex); -list_for_each_entry_rcu (rdata, &lport->disc.rports, peers) { +list_for_each_entry_rcu (rdata, &lport->disc.rports, peers, +lockdep_is_held (&lport->disc.disc_mutex)) {if (!kref_get_unless_zero (&rdata->kref))continue ; frport =fcoe_ctlr_rport (rdata);
@@ -3061,7 +3063,8 @@ static void fcoe_ctlr_vn_disc(struct fcoe_ctlr *fip)mutex_lock (&disc->disc_mutex); callback = disc->pending ? disc->disc_callback :NULL ; disc->pending =0 ; -list_for_each_entry_rcu (rdata, &disc->rports, peers) { +list_for_each_entry_rcu (rdata, &disc->rports, peers, +lockdep_is_held (&disc->disc_mutex)) {if (!kref_get_unless_zero (&rdata->kref))continue ; frport =fcoe_ctlr_rport (rdata);
Signature · 1 line
2.24.1
PATCH 2/2 drivers: scsi: qedf: qedf_main: Pass lockdep expression to RCU lists
lport->disc.rports is traversed using list_for_each_entry_rcu outside an RCU read-side critical section but under the protection of lport->disc.disc_mutex.
Hence, add corresponding lockdep expression to silence false-positive lockdep warnings, and harden RCU lists.
Signed-off-by Amol Grover <[email protected]>
--- drivers/scsi/qedf/qedf_main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/scsi/qedf/qedf_main.c +2 -1
@@ -420,7 +420,8 @@ static void qedf_link_recovery(struct work_struct *work)* ADISC since the rport is in state ready. */ mutex_lock (&lport->disc.disc_mutex); -list_for_each_entry_rcu (rdata, &lport->disc.rports, peers) { +list_for_each_entry_rcu (rdata, &lport->disc.rports, peers, +lockdep_is_held (&lport->disc.disc_mutex)) {if (kref_get_unless_zero (&rdata->kref)) {fc_rport_login (rdata);kref_put (&rdata->kref, fc_rport_destroy);
Signature · 1 line
2.24.1