Commit 14365ea2b868c96e18da73a3f454c7bcdb0627c5

Authored by Linus Torvalds

Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi

Pull SCSI fixes from James Bottomley:
 "This patch set is fixing two serious problems which have turned up
  late in the release cycle.

  The first fixes a problem with 4k sector disks where the transfer
  length (amount of data sent to the disk) was getting increased every
  time the disk was revalidated leading to potential for overflows.

  The other is a regression oops fix for some of our last merge window
  code"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
  sd: Fix max transfer length for 4k disks
  scsi: fix device handler detach oops

Showing 2 changed files Side-by-side Diff

drivers/scsi/device_handler/scsi_dh.c
... ... @@ -136,11 +136,12 @@
136 136 struct scsi_device_handler *scsi_dh = scsi_dh_data->scsi_dh;
137 137 struct scsi_device *sdev = scsi_dh_data->sdev;
138 138  
  139 + scsi_dh->detach(sdev);
  140 +
139 141 spin_lock_irq(sdev->request_queue->queue_lock);
140 142 sdev->scsi_dh_data = NULL;
141 143 spin_unlock_irq(sdev->request_queue->queue_lock);
142 144  
143   - scsi_dh->detach(sdev);
144 145 sdev_printk(KERN_NOTICE, sdev, "%s: Detached\n", scsi_dh->name);
145 146 module_put(scsi_dh->module);
146 147 }
... ... @@ -2800,9 +2800,11 @@
2800 2800 */
2801 2801 sd_set_flush_flag(sdkp);
2802 2802  
2803   - max_xfer = min_not_zero(queue_max_hw_sectors(sdkp->disk->queue),
2804   - sdkp->max_xfer_blocks);
  2803 + max_xfer = sdkp->max_xfer_blocks;
2805 2804 max_xfer <<= ilog2(sdp->sector_size) - 9;
  2805 +
  2806 + max_xfer = min_not_zero(queue_max_hw_sectors(sdkp->disk->queue),
  2807 + max_xfer);
2806 2808 blk_queue_max_hw_sectors(sdkp->disk->queue, max_xfer);
2807 2809 set_capacity(disk, sdkp->capacity);
2808 2810 sd_config_write_same(sdkp);