mirror of
https://github.com/torvalds/linux.git
synced 2024-12-04 01:51:34 +00:00
scsi: scsi_dh_alua: Prevent duplicate pg info print in alua_rtpg()
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. Link: https://lore.kernel.org/r/20210331181656.5046-1-jpittman@redhat.com Reviewed-by: David Jeffery <djeffery@redhat.com> Reviewed-by: Laurence Oberman <loberman@redhat.com> Signed-off-by: John Pittman <jpittman@redhat.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
d56030f882
commit
22ec513e70
@ -515,6 +515,7 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_port_group *pg)
|
|||||||
struct scsi_sense_hdr sense_hdr;
|
struct scsi_sense_hdr sense_hdr;
|
||||||
struct alua_port_group *tmp_pg;
|
struct alua_port_group *tmp_pg;
|
||||||
int len, k, off, bufflen = ALUA_RTPG_SIZE;
|
int len, k, off, bufflen = ALUA_RTPG_SIZE;
|
||||||
|
int group_id_old, state_old, pref_old, valid_states_old;
|
||||||
unsigned char *desc, *buff;
|
unsigned char *desc, *buff;
|
||||||
unsigned err, retval;
|
unsigned err, retval;
|
||||||
unsigned int tpg_desc_tbl_off;
|
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;
|
unsigned long flags;
|
||||||
bool transitioning_sense = false;
|
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) {
|
if (!pg->expiry) {
|
||||||
unsigned long transition_tmo = ALUA_FAILOVER_TIMEOUT * HZ;
|
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)
|
if (transitioning_sense)
|
||||||
pg->state = SCSI_ACCESS_STATE_TRANSITIONING;
|
pg->state = SCSI_ACCESS_STATE_TRANSITIONING;
|
||||||
|
|
||||||
sdev_printk(KERN_INFO, sdev,
|
if (group_id_old != pg->group_id || state_old != pg->state ||
|
||||||
"%s: port group %02x state %c %s supports %c%c%c%c%c%c%c\n",
|
pref_old != pg->pref || valid_states_old != pg->valid_states)
|
||||||
ALUA_DH_NAME, pg->group_id, print_alua_state(pg->state),
|
sdev_printk(KERN_INFO, sdev,
|
||||||
pg->pref ? "preferred" : "non-preferred",
|
"%s: port group %02x state %c %s supports %c%c%c%c%c%c%c\n",
|
||||||
pg->valid_states&TPGS_SUPPORT_TRANSITION?'T':'t',
|
ALUA_DH_NAME, pg->group_id, print_alua_state(pg->state),
|
||||||
pg->valid_states&TPGS_SUPPORT_OFFLINE?'O':'o',
|
pg->pref ? "preferred" : "non-preferred",
|
||||||
pg->valid_states&TPGS_SUPPORT_LBA_DEPENDENT?'L':'l',
|
pg->valid_states&TPGS_SUPPORT_TRANSITION?'T':'t',
|
||||||
pg->valid_states&TPGS_SUPPORT_UNAVAILABLE?'U':'u',
|
pg->valid_states&TPGS_SUPPORT_OFFLINE?'O':'o',
|
||||||
pg->valid_states&TPGS_SUPPORT_STANDBY?'S':'s',
|
pg->valid_states&TPGS_SUPPORT_LBA_DEPENDENT?'L':'l',
|
||||||
pg->valid_states&TPGS_SUPPORT_NONOPTIMIZED?'N':'n',
|
pg->valid_states&TPGS_SUPPORT_UNAVAILABLE?'U':'u',
|
||||||
pg->valid_states&TPGS_SUPPORT_OPTIMIZED?'A':'a');
|
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) {
|
switch (pg->state) {
|
||||||
case SCSI_ACCESS_STATE_TRANSITIONING:
|
case SCSI_ACCESS_STATE_TRANSITIONING:
|
||||||
|
Loading…
Reference in New Issue
Block a user