Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
Pull SCSI updates from James Bottomley: "This consists of the usual driver updates (ufs, qla2xxx, tcmu, lpfc, hpsa, zfcp, scsi_debug) and minor bug fixes. We also have a huge docbook fix update like most other subsystems and no major update to the core (the few non trivial updates are either minor fixes or removing an unused feature [scsi_sdb_cache])" * tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (307 commits) scsi: scsi_transport_srp: Sanitize scsi_target_block/unblock sequences scsi: ufs-mediatek: Apply DELAY_AFTER_LPM quirk to Micron devices scsi: ufs: Introduce device quirk "DELAY_AFTER_LPM" scsi: virtio-scsi: Correctly handle the case where all LUNs are unplugged scsi: scsi_debug: Implement tur_ms_to_ready parameter scsi: scsi_debug: Fix request sense scsi: lpfc: Fix typo in comment for ULP scsi: ufs-mediatek: Prevent LPM operation on undeclared VCC scsi: iscsi: Do not put host in iscsi_set_flashnode_param() scsi: hpsa: Correct ctrl queue depth scsi: target: tcmu: Make TMR notification optional scsi: target: tcmu: Implement tmr_notify callback scsi: target: tcmu: Fix and simplify timeout handling scsi: target: tcmu: Factor out new helper ring_insert_padding scsi: target: tcmu: Do not queue aborted commands scsi: target: tcmu: Use priv pointer in se_cmd scsi: target: Add tmr_notify backend function scsi: target: Modify core_tmr_abort_task() scsi: target: iscsi: Fix inconsistent debug message scsi: target: iscsi: Fix login error when receiving ...
This commit is contained in:
@@ -52,7 +52,6 @@
|
||||
#define SCSI_INLINE_SG_CNT 2
|
||||
#endif
|
||||
|
||||
static struct kmem_cache *scsi_sdb_cache;
|
||||
static struct kmem_cache *scsi_sense_cache;
|
||||
static struct kmem_cache *scsi_sense_isadma_cache;
|
||||
static DEFINE_MUTEX(scsi_sense_cache_mutex);
|
||||
@@ -390,7 +389,7 @@ static void scsi_single_lun_run(struct scsi_device *current_sdev)
|
||||
spin_unlock_irqrestore(shost->host_lock, flags);
|
||||
scsi_kick_queue(sdev->request_queue);
|
||||
spin_lock_irqsave(shost->host_lock, flags);
|
||||
|
||||
|
||||
scsi_device_put(sdev);
|
||||
}
|
||||
out:
|
||||
@@ -1461,18 +1460,18 @@ static void scsi_softirq_done(struct request *rq)
|
||||
scsi_log_completion(cmd, disposition);
|
||||
|
||||
switch (disposition) {
|
||||
case SUCCESS:
|
||||
scsi_finish_command(cmd);
|
||||
break;
|
||||
case NEEDS_RETRY:
|
||||
scsi_queue_insert(cmd, SCSI_MLQUEUE_EH_RETRY);
|
||||
break;
|
||||
case ADD_TO_MLQUEUE:
|
||||
scsi_queue_insert(cmd, SCSI_MLQUEUE_DEVICE_BUSY);
|
||||
break;
|
||||
default:
|
||||
scsi_eh_scmd_add(cmd);
|
||||
break;
|
||||
case SUCCESS:
|
||||
scsi_finish_command(cmd);
|
||||
break;
|
||||
case NEEDS_RETRY:
|
||||
scsi_queue_insert(cmd, SCSI_MLQUEUE_EH_RETRY);
|
||||
break;
|
||||
case ADD_TO_MLQUEUE:
|
||||
scsi_queue_insert(cmd, SCSI_MLQUEUE_DEVICE_BUSY);
|
||||
break;
|
||||
default:
|
||||
scsi_eh_scmd_add(cmd);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1953,24 +1952,10 @@ void scsi_unblock_requests(struct Scsi_Host *shost)
|
||||
}
|
||||
EXPORT_SYMBOL(scsi_unblock_requests);
|
||||
|
||||
int __init scsi_init_queue(void)
|
||||
{
|
||||
scsi_sdb_cache = kmem_cache_create("scsi_data_buffer",
|
||||
sizeof(struct scsi_data_buffer),
|
||||
0, 0, NULL);
|
||||
if (!scsi_sdb_cache) {
|
||||
printk(KERN_ERR "SCSI: can't init scsi sdb cache\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void scsi_exit_queue(void)
|
||||
{
|
||||
kmem_cache_destroy(scsi_sense_cache);
|
||||
kmem_cache_destroy(scsi_sense_isadma_cache);
|
||||
kmem_cache_destroy(scsi_sdb_cache);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2037,7 +2022,6 @@ scsi_mode_select(struct scsi_device *sdev, int pf, int sp, int modepage,
|
||||
real_buffer[1] = data->medium_type;
|
||||
real_buffer[2] = data->device_specific;
|
||||
real_buffer[3] = data->block_descriptor_length;
|
||||
|
||||
|
||||
cmd[0] = MODE_SELECT;
|
||||
cmd[4] = len;
|
||||
@@ -2123,7 +2107,7 @@ scsi_mode_sense(struct scsi_device *sdev, int dbd, int modepage,
|
||||
if (scsi_sense_valid(sshdr)) {
|
||||
if ((sshdr->sense_key == ILLEGAL_REQUEST) &&
|
||||
(sshdr->asc == 0x20) && (sshdr->ascq == 0)) {
|
||||
/*
|
||||
/*
|
||||
* Invalid command operation code
|
||||
*/
|
||||
sdev->use_10_for_ms = 0;
|
||||
@@ -2132,7 +2116,7 @@ scsi_mode_sense(struct scsi_device *sdev, int dbd, int modepage,
|
||||
}
|
||||
}
|
||||
|
||||
if(scsi_status_is_good(result)) {
|
||||
if (scsi_status_is_good(result)) {
|
||||
if (unlikely(buffer[0] == 0x86 && buffer[1] == 0x0b &&
|
||||
(modepage == 6 || modepage == 8))) {
|
||||
/* Initio breakage? */
|
||||
@@ -2142,7 +2126,7 @@ scsi_mode_sense(struct scsi_device *sdev, int dbd, int modepage,
|
||||
data->device_specific = 0;
|
||||
data->longlba = 0;
|
||||
data->block_descriptor_length = 0;
|
||||
} else if(use_10_for_ms) {
|
||||
} else if (use_10_for_ms) {
|
||||
data->length = buffer[0]*256 + buffer[1] + 2;
|
||||
data->medium_type = buffer[2];
|
||||
data->device_specific = buffer[3];
|
||||
@@ -2225,7 +2209,7 @@ scsi_device_set_state(struct scsi_device *sdev, enum scsi_device_state state)
|
||||
goto illegal;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case SDEV_RUNNING:
|
||||
switch (oldstate) {
|
||||
case SDEV_CREATED:
|
||||
@@ -2510,7 +2494,7 @@ EXPORT_SYMBOL_GPL(sdev_evt_send_simple);
|
||||
* (which must be a legal transition). When the device is in this
|
||||
* state, only special requests will be accepted, all others will
|
||||
* be deferred. Since special requests may also be requeued requests,
|
||||
* a successful return doesn't guarantee the device will be
|
||||
* a successful return doesn't guarantee the device will be
|
||||
* totally quiescent.
|
||||
*
|
||||
* Must be called with user context, may sleep.
|
||||
@@ -2636,10 +2620,10 @@ int scsi_internal_device_block_nowait(struct scsi_device *sdev)
|
||||
return err;
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* The device has transitioned to SDEV_BLOCK. Stop the
|
||||
* block layer from calling the midlayer with this device's
|
||||
* request queue.
|
||||
* request queue.
|
||||
*/
|
||||
blk_mq_quiesce_queue_nowait(q);
|
||||
return 0;
|
||||
@@ -2674,7 +2658,7 @@ static int scsi_internal_device_block(struct scsi_device *sdev)
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
void scsi_start_queue(struct scsi_device *sdev)
|
||||
{
|
||||
struct request_queue *q = sdev->request_queue;
|
||||
@@ -2833,8 +2817,10 @@ scsi_host_block(struct Scsi_Host *shost)
|
||||
mutex_lock(&sdev->state_mutex);
|
||||
ret = scsi_internal_device_block_nowait(sdev);
|
||||
mutex_unlock(&sdev->state_mutex);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
scsi_device_put(sdev);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user