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

Pull SCSI fixes from James Bottomley:
"Two core fixes: one to prevent discard type changes (seen on iSCSI)
during intermittent errors and the other is fixing a lockdep problem
caused by the queue limits change.

And one driver fix in ufs"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
scsi: sd: Keep the discard mode stable
scsi: sd: Move sd_read_cpr() out of the q->limits_lock region
scsi: ufs: core: Fix hba->last_dme_cmd_tstamp timestamp updating logic

+18 -8
+10 -5
drivers/scsi/sd.c
··· 2711 2711 2712 2712 if (buffer[14] & 0x40) /* LBPRZ */ 2713 2713 sdkp->lbprz = 1; 2714 - 2715 - sd_config_discard(sdkp, lim, SD_LBP_WS16); 2716 2714 } 2717 2715 2718 2716 sdkp->capacity = lba + 1; ··· 3363 3365 sdkp->unmap_alignment = 3364 3366 get_unaligned_be32(&vpd->data[32]) & ~(1 << 31); 3365 3367 3366 - sd_config_discard(sdkp, lim, sd_discard_mode(sdkp)); 3367 - 3368 3368 config_atomic: 3369 3369 sdkp->max_atomic = get_unaligned_be32(&vpd->data[44]); 3370 3370 sdkp->atomic_alignment = get_unaligned_be32(&vpd->data[48]); ··· 3749 3753 sd_read_block_limits_ext(sdkp); 3750 3754 sd_read_block_characteristics(sdkp, &lim); 3751 3755 sd_zbc_read_zones(sdkp, &lim, buffer); 3752 - sd_read_cpr(sdkp); 3753 3756 } 3757 + 3758 + sd_config_discard(sdkp, &lim, sd_discard_mode(sdkp)); 3754 3759 3755 3760 sd_print_capacity(sdkp, old_capacity); 3756 3761 ··· 3804 3807 blk_mq_unfreeze_queue(sdkp->disk->queue); 3805 3808 if (err) 3806 3809 return err; 3810 + 3811 + /* 3812 + * Query concurrent positioning ranges after 3813 + * queue_limits_commit_update() unlocked q->limits_lock to avoid 3814 + * deadlock with q->sysfs_dir_lock and q->sysfs_lock. 3815 + */ 3816 + if (sdkp->media_present && scsi_device_supports_vpd(sdp)) 3817 + sd_read_cpr(sdkp); 3807 3818 3808 3819 /* 3809 3820 * For a zoned drive, revalidating the zones can be done only once
+8 -3
drivers/ufs/core/ufshcd.c
··· 4100 4100 min_sleep_time_us = 4101 4101 MIN_DELAY_BEFORE_DME_CMDS_US - delta; 4102 4102 else 4103 - return; /* no more delay required */ 4103 + min_sleep_time_us = 0; /* no more delay required */ 4104 4104 } 4105 4105 4106 - /* allow sleep for extra 50us if needed */ 4107 - usleep_range(min_sleep_time_us, min_sleep_time_us + 50); 4106 + if (min_sleep_time_us > 0) { 4107 + /* allow sleep for extra 50us if needed */ 4108 + usleep_range(min_sleep_time_us, min_sleep_time_us + 50); 4109 + } 4110 + 4111 + /* update the last_dme_cmd_tstamp */ 4112 + hba->last_dme_cmd_tstamp = ktime_get(); 4108 4113 } 4109 4114 4110 4115 /**