mpt2sas: Fix for Driver oops, when loading driver with max_queue_depth command line...
authorsreekanth.reddy@lsi.com <sreekanth.reddy@lsi.com>
Tue, 17 Jul 2012 10:27:05 +0000 (15:57 +0530)
committerBen Hutchings <ben@decadent.org.uk>
Wed, 19 Sep 2012 14:04:28 +0000 (15:04 +0100)
commitf64c045ad2f37a56f2c9ab9cfe662b2e797bb37e
treeda99eb0785a37926e24830a741b27b3ce6072818
parentabad539f71b3d3fc390f571f440843731794d91d
mpt2sas: Fix for Driver oops, when loading driver with max_queue_depth command line option to a very small value

commit 338b131a3269881c7431234855c93c219b0979b6 upstream.

If the specified max_queue_depth setting is less than the
expected number of internal commands, then driver will calculate
the queue depth size to a negitive number. This negitive number
is actually a very large number because variable is unsigned
16bit integer. So, the driver will ask for a very large amount of
memory for message frames and resulting into oops as memory
allocation routines will not able to handle such a large request.

So, in order to limit this kind of oops, The driver need to set
the max_queue_depth to a scsi mid layer's can_queue value. Then
the overall message frames required for IO is minimum of either
(max_queue_depth plus internal commands) or the IOC global
credits.

Signed-off-by: Sreekanth Reddy <sreekanth.reddy@lsi.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
drivers/scsi/mpt2sas/mpt2sas_base.c