Skip to contentSkip to conversation

mpt2sas: don't handle broadcast primitives

PATCH In review Jörn Engel 2 participants 4 messages Jul 19, 2013 – Jul 24, 2013 SCSI

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 mpt2sas: don't handle broadcast primitives

The handling of broadcast primitives involves _scsih_block_io_all_device(), which does what the name implies. I have observed cases with >60s of blocking io on all devices, caused by a single bad device. The downsides of this code are obvious, while the upsides are more elusive.

---
 drivers/scsi/mpt2sas/mpt2sas_base.c  |    4 -
 drivers/scsi/mpt2sas/mpt2sas_scsih.c |  238 ----------------------------------
 2 files changed, 242 deletions(-)
drivers/scsi/mpt2sas/mpt2sas_base.c +0 -4
index 21c0a27..bba2209 100644
@@ -586,9 +586,6 @@ _base_display_event_data(struct MPT2SAS_ADAPTER *ioc,
 		printk("\n");
 		return;
 	}
-	case MPI2_EVENT_SAS_BROADCAST_PRIMITIVE:
-		desc = "SAS Broadcast Primitive";
-		break;
 	case MPI2_EVENT_SAS_INIT_DEVICE_STATUS_CHANGE:
 		desc = "SAS Init Device Status Change";
 		break;
@@ -4370,7 +4367,6 @@ mpt2sas_base_attach(struct MPT2SAS_ADAPTER *ioc)
 
 	/* here we enable the events we care about */
 	_base_unmask_events(ioc, MPI2_EVENT_SAS_DISCOVERY);
-	_base_unmask_events(ioc, MPI2_EVENT_SAS_BROADCAST_PRIMITIVE);
 	_base_unmask_events(ioc, MPI2_EVENT_SAS_TOPOLOGY_CHANGE_LIST);
 	_base_unmask_events(ioc, MPI2_EVENT_SAS_DEVICE_STATUS_CHANGE);
 	_base_unmask_events(ioc, MPI2_EVENT_SAS_ENCL_DEVICE_STATUS_CHANGE);
drivers/scsi/mpt2sas/mpt2sas_scsih.c +0 -238

274 lines not on this page · raw message

Signature · 1 line
1.7.10.4
#1 lore raw
Quoted 6 lines · Jörn Engel

The handling of broadcast primitives involves _scsih_block_io_all_device(), which does what the name implies. I have observed cases with >60s of blocking io on all devices, caused by a single bad device. The downsides of this code are obvious, while the upsides are more elusive.

And since this patch looks more like an April fools joke: I have gathered a few machine-months of testing, including tortures that specifically stress the removed codepaths. This is a serious submission and unless someone can show me a _very_ good reason for keeping the deleted code, I would like to get it merged.

Jörn

--
Computer system analysis is like child-rearing; you can do grievous damage, but you cannot ensure success."
-- Tom DeMarco

#3 lore raw
In reply to Baruch Even
Quoted 23 lines · Baruch Even
Quoted 8 lines · Jörn Engel
Quoted 6 lines · Jörn Engel

The handling of broadcast primitives involves _scsih_block_io_all_device(), which does what the name implies. I have observed cases with >60s of blocking io on all devices, caused by a single bad device. The downsides of this code are obvious, while the upsides are more elusive.

Quoted 5 lines

And since this patch looks more like an April fools joke: I have gathered a few machine-months of testing, including tortures that specifically stress the removed codepaths. This is a serious submission and unless someone can show me a _very_ good reason for keeping the deleted code, I would like to get it merged.

This would seem to cause an IO pause through the host whenever there is a disk removal/insertion or SES (SAS expander) change which seems like a bad proposition indeed. The part of the work that this code seems to handle is that when such a change happens something needs to detect the dead IOs (f.ex. surprise disk removal) but I believe that the SAS HBA firmware will do that internally already so I do think this code is needless.

Quoted 3 lines

The only thing I'd like not to lose is the actual notification and ability to log the fact that there was a broadcast notification on the SAS network.

I agree logging would be nice. However my attempts to keep logging and remove the IO pause were unsuccessful. Apparently something inside _scsih_sas_broadcast_primitive_event() is required to get future events. If someone from LSI with data sheets and understanding of the firmware can do a better patch, I would be happy.

Jörn

--
The story so far:
In the beginning the Universe was created. This has made a lot of people very angry and been widely regarded as a bad move. -- Douglas Adams

#2 lore raw
In reply to Jörn Engel
Quoted 8 lines · Jörn Engel
Quoted 6 lines · Jörn Engel

The handling of broadcast primitives involves _scsih_block_io_all_device(), which does what the name implies. I have observed cases with >60s of blocking io on all devices, caused by a single bad device. The downsides of this code are obvious, while the upsides are more elusive.

Quoted 5 lines

And since this patch looks more like an April fools joke: I have gathered a few machine-months of testing, including tortures that specifically stress the removed codepaths. This is a serious submission and unless someone can show me a _very_ good reason for keeping the deleted code, I would like to get it merged.

This would seem to cause an IO pause through the host whenever there is a disk removal/insertion or SES (SAS expander) change which seems like a bad proposition indeed. The part of the work that this code seems to handle is that when such a change happens something needs to detect the dead IOs (f.ex. surprise disk removal) but I believe that the SAS HBA firmware will do that internally already so I do think this code is needless.

The only thing I'd like not to lose is the actual notification and ability to log the fact that there was a broadcast notification on the SAS network.

Baruch
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html