Re: [PATCH] scsi: scsi_dh_alua: prevent duplicate pg info print in alua_rtpg()
From: Laurence Oberman <hidden>
Date: 2021-03-31 22:30:59
On Wed, 2021-03-31 at 14:16 -0400, John Pittman wrote:
quoted hunk ↗ jump to hunk
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 <redacted> Reviewed-by: David Jeffery <redacted> --- 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.cb/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-quoted
state),- pg->pref ? "preferred" : "non-preferred", - pg->valid_states&TPGS_SUPPORT_TRANSITION?'T':'t', - pg->valid_states&TPGS_SUPPORT_OFFLINE?'O':'o', - pg-quoted
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-quoted
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-quoted
valid_states&TPGS_SUPPORT_TRANSITION?'T':'t',+ pg->valid_states&TPGS_SUPPORT_OFFLINE?'O':'o', + pg-quoted
valid_states&TPGS_SUPPORT_LBA_DEPENDENT?'L':'l',+ pg-quoted
valid_states&TPGS_SUPPORT_UNAVAILABLE?'U':'u',+ pg->valid_states&TPGS_SUPPORT_STANDBY?'S':'s', + pg-quoted
valid_states&TPGS_SUPPORT_NONOPTIMIZED?'N':'n',+ pg-quoted
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 <redacted>