aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilip J Kelleher <pjk1939@linux.vnet.ibm.com>2013-10-18 18:12:35 -0400
committerJens Axboe <axboe@kernel.dk>2013-11-08 11:10:29 -0500
commit8c49a77ca451541938f90008f419fca965b76b72 (patch)
tree0b4ef99eeb6996ec70d6e203b03fc452732df52c
parente35f38bf73b6c9ec9521d9deb94198a419692db5 (diff)
rsxx: Fix possible kernel panic with invalid config.
This patch fixes a possible Kernel Panic on driver load if the configuration on the card is messed up or not yet set. The driver could possible give a 32 bit unsigned all Fs to the kernel as the device's block size. Now we only write the block size to the kernel if the configuration from the card is valid. Also, driver version is being updated. Signed-off-by: Philip J Kelleher <pjk1939@linux.vnet.ibm.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--drivers/block/rsxx/dev.c8
-rw-r--r--drivers/block/rsxx/rsxx_priv.h2
2 files changed, 6 insertions, 4 deletions
diff --git a/drivers/block/rsxx/dev.c b/drivers/block/rsxx/dev.c
index d7af441880be..2284f5d3a54a 100644
--- a/drivers/block/rsxx/dev.c
+++ b/drivers/block/rsxx/dev.c
@@ -295,13 +295,15 @@ int rsxx_setup_dev(struct rsxx_cardinfo *card)
295 return -ENOMEM; 295 return -ENOMEM;
296 } 296 }
297 297
298 blk_size = card->config.data.block_size; 298 if (card->config_valid) {
299 blk_size = card->config.data.block_size;
300 blk_queue_dma_alignment(card->queue, blk_size - 1);
301 blk_queue_logical_block_size(card->queue, blk_size);
302 }
299 303
300 blk_queue_make_request(card->queue, rsxx_make_request); 304 blk_queue_make_request(card->queue, rsxx_make_request);
301 blk_queue_bounce_limit(card->queue, BLK_BOUNCE_ANY); 305 blk_queue_bounce_limit(card->queue, BLK_BOUNCE_ANY);
302 blk_queue_dma_alignment(card->queue, blk_size - 1);
303 blk_queue_max_hw_sectors(card->queue, blkdev_max_hw_sectors); 306 blk_queue_max_hw_sectors(card->queue, blkdev_max_hw_sectors);
304 blk_queue_logical_block_size(card->queue, blk_size);
305 blk_queue_physical_block_size(card->queue, RSXX_HW_BLK_SIZE); 307 blk_queue_physical_block_size(card->queue, RSXX_HW_BLK_SIZE);
306 308
307 queue_flag_set_unlocked(QUEUE_FLAG_NONROT, card->queue); 309 queue_flag_set_unlocked(QUEUE_FLAG_NONROT, card->queue);
diff --git a/drivers/block/rsxx/rsxx_priv.h b/drivers/block/rsxx/rsxx_priv.h
index 23fa05630fef..6bbc64d0f690 100644
--- a/drivers/block/rsxx/rsxx_priv.h
+++ b/drivers/block/rsxx/rsxx_priv.h
@@ -52,7 +52,7 @@ struct proc_cmd;
52#define RS70_PCI_REV_SUPPORTED 4 52#define RS70_PCI_REV_SUPPORTED 4
53 53
54#define DRIVER_NAME "rsxx" 54#define DRIVER_NAME "rsxx"
55#define DRIVER_VERSION "4.0.2.2510" 55#define DRIVER_VERSION "4.0.3.2516"
56 56
57/* Block size is 4096 */ 57/* Block size is 4096 */
58#define RSXX_HW_BLK_SHIFT 12 58#define RSXX_HW_BLK_SHIFT 12