On Wed, 2021-03-31 at 14:16 -0400, John Pittman wrote: > Due to the frequency that alua_rtpg() is called, the path group > info print within can print the same info multiple times in the > logs, subsequent prints adding no new information or value. > > To reproduce: > > # modprobe scsi_debug vpd_use_hostno=0 > # systemctl start multipathd.service > > To fix, check stored values, only printing at alua attach/activate > and if any of the values change. > > Signed-off-by: John Pittman <jpittman@xxxxxxxxxx> > Reviewed-by: David Jeffery <djeffery@xxxxxxxxxx> > --- > drivers/scsi/device_handler/scsi_dh_alua.c | 30 ++++++++++++++---- > ---- > 1 file changed, 19 insertions(+), 11 deletions(-) > > diff --git a/drivers/scsi/device_handler/scsi_dh_alua.c > b/drivers/scsi/device_handler/scsi_dh_alua.c > index ea436a14087f..7438ed491681 100644 > --- a/drivers/scsi/device_handler/scsi_dh_alua.c > +++ b/drivers/scsi/device_handler/scsi_dh_alua.c > @@ -515,6 +515,7 @@ static int alua_rtpg(struct scsi_device *sdev, > struct alua_port_group *pg) > struct scsi_sense_hdr sense_hdr; > struct alua_port_group *tmp_pg; > int len, k, off, bufflen = ALUA_RTPG_SIZE; > + int group_id_old, state_old, pref_old, valid_states_old; > unsigned char *desc, *buff; > unsigned err, retval; > unsigned int tpg_desc_tbl_off; > @@ -522,6 +523,11 @@ static int alua_rtpg(struct scsi_device *sdev, > struct alua_port_group *pg) > unsigned long flags; > bool transitioning_sense = false; > > + group_id_old = pg->group_id; > + state_old = pg->state; > + pref_old = pg->pref; > + valid_states_old = pg->valid_states; > + > if (!pg->expiry) { > unsigned long transition_tmo = ALUA_FAILOVER_TIMEOUT * > HZ; > > @@ -686,17 +692,19 @@ static int alua_rtpg(struct scsi_device *sdev, > struct alua_port_group *pg) > if (transitioning_sense) > pg->state = SCSI_ACCESS_STATE_TRANSITIONING; > > - sdev_printk(KERN_INFO, sdev, > - "%s: port group %02x state %c %s supports > %c%c%c%c%c%c%c\n", > - ALUA_DH_NAME, pg->group_id, print_alua_state(pg- > >state), > - pg->pref ? "preferred" : "non-preferred", > - pg->valid_states&TPGS_SUPPORT_TRANSITION?'T':'t', > - pg->valid_states&TPGS_SUPPORT_OFFLINE?'O':'o', > - pg- > >valid_states&TPGS_SUPPORT_LBA_DEPENDENT?'L':'l', > - pg->valid_states&TPGS_SUPPORT_UNAVAILABLE?'U':'u', > - pg->valid_states&TPGS_SUPPORT_STANDBY?'S':'s', > - pg->valid_states&TPGS_SUPPORT_NONOPTIMIZED?'N':'n', > - pg->valid_states&TPGS_SUPPORT_OPTIMIZED?'A':'a'); > + if (group_id_old != pg->group_id || state_old != pg->state || > + pref_old != pg->pref || valid_states_old != pg- > >valid_states) > + sdev_printk(KERN_INFO, sdev, > + "%s: port group %02x state %c %s supports > %c%c%c%c%c%c%c\n", > + ALUA_DH_NAME, pg->group_id, > print_alua_state(pg->state), > + pg->pref ? "preferred" : "non-preferred", > + pg- > >valid_states&TPGS_SUPPORT_TRANSITION?'T':'t', > + pg->valid_states&TPGS_SUPPORT_OFFLINE?'O':'o', > + pg- > >valid_states&TPGS_SUPPORT_LBA_DEPENDENT?'L':'l', > + pg- > >valid_states&TPGS_SUPPORT_UNAVAILABLE?'U':'u', > + pg->valid_states&TPGS_SUPPORT_STANDBY?'S':'s', > + pg- > >valid_states&TPGS_SUPPORT_NONOPTIMIZED?'N':'n', > + pg- > >valid_states&TPGS_SUPPORT_OPTIMIZED?'A':'a'); > > switch (pg->state) { > case SCSI_ACCESS_STATE_TRANSITIONING: Thanks John I am still trying to find a way to quiet the SCSI discovery in an acceptable way but every bit helps. Reviewed-by: Laurence Oberman <loberman@xxxxxxxxxx>