SCSI fixes for 4.18-rc2
Subsystems (5)
James Bottomley
maintainerThree small bug fixes (barrier elimination, memory leak on unload, spinlock recursion) and a technical enhancement left over from the merge window: the TCMU read length support is required for tape devices read when the length of the read is greater than the tape block size.
The patch is available here:
git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git scsi-fixes
The short changelog is:
Arnd Bergmann (1):
scsi: ipr: Eliminate duplicate barriers
Luis Henriques (1):
scsi: scsi_debug: Fix memory leak on module unload
Mikhail Malygin (1):
scsi: qla2xxx: Spinlock recursion in qla_target
[email protected] (1):
scsi: target: tcmu: add read length support
And the diffstat:
drivers/scsi/ipr.c | 2 -- drivers/scsi/qla2xxx/qla_target.c | 7 +++--- drivers/scsi/scsi_debug.c | 2 +- drivers/target/target_core_user.c | 44 ++++++++++++++++++++++++++++------- include/uapi/linux/target_core_user.h | 4 +++- 5 files changed, 43 insertions(+), 16 deletions(-)
With full diff below.
James
---
drivers/scsi/ipr.c +0 -2
@@ -760,7 +760,6 @@ static void ipr_mask_and_clear_interrupts(struct ipr_ioa_cfg *ioa_cfg, ioa_cfg->hrrq[i].allow_interrupts =0 ;spin_unlock (&ioa_cfg->hrrq[i]._lock); } -wmb ();/* Set interrupt mask to stop all new interrupts */ if (ioa_cfg->sis64)
@@ -8403,7 +8402,6 @@ static int ipr_reset_enable_ioa(struct ipr_cmnd *ipr_cmd) ioa_cfg->hrrq[i].allow_interrupts =1 ;spin_unlock (&ioa_cfg->hrrq[i]._lock); } -wmb ();if (ioa_cfg->sis64) {/* Set the adapter to the correct endian mode. */ writel (IPR_ENDIAN_SWAP_KEY , ioa_cfg->regs.endian_swap_reg);
drivers/scsi/qla2xxx/qla_target.c +3 -4
@@ -1224,7 +1224,6 @@ static void qla24xx_chk_fcp_state(struct fc_port *sess)void qlt_schedule_sess_for_deletion (struct fc_port *sess) {struct qla_tgt *tgt = sess->tgt; -struct qla_hw_data *ha = sess->vha->hw;unsigned long flags;if (sess->disc_state ==DSC_DELETE_PEND )
@@ -1241,16 +1240,16 @@ void qlt_schedule_sess_for_deletion(struct fc_port *sess)return ; } -spin_lock_irqsave (&ha->tgt.sess_lock, flags);if (sess->deleted ==QLA_SESS_DELETED ) sess->logout_on_delete =0 ; +spin_lock_irqsave (&sess->vha->work_lock, flags);if (sess->deleted ==QLA_SESS_DELETION_IN_PROGRESS ) { -spin_unlock_irqrestore (&ha->tgt.sess_lock, flags); +spin_unlock_irqrestore (&sess->vha->work_lock, flags);return ; } sess->deleted =QLA_SESS_DELETION_IN_PROGRESS ; -spin_unlock_irqrestore (&ha->tgt.sess_lock, flags); +spin_unlock_irqrestore (&sess->vha->work_lock, flags); sess->disc_state =DSC_DELETE_PEND ;
drivers/scsi/scsi_debug.c +1 -1
@@ -5507,9 +5507,9 @@ static void __exit scsi_debug_exit(void)int k = sdebug_add_host;stop_all_queued (); -free_all_queued ();for (; k; k--)sdebug_remove_adapter (); +free_all_queued ();driver_unregister (&sdebug_driverfs_driver);bus_unregister (&pseudo_lld_bus);root_device_unregister (pseudo_primary);
drivers/target/target_core_user.c +36 -8
97 lines not on this page · raw message
include/uapi/linux/target_core_user.h +3 -1
@@ -44,6 +44,7 @@#define TCMU_MAILBOX_VERSION 2#define ALIGN_SIZE 64/* Should be enough for most CPUs */ #define TCMU_MAILBOX_FLAG_CAP_OOOC (1 << 0)/* Out-of-order completions */ +#define TCMU_MAILBOX_FLAG_CAP_READ_LEN (1 << 1)/* Read data length */ struct tcmu_mailbox {__u16 version;
@@ -71,6 +72,7 @@ struct tcmu_cmd_entry_hdr {__u16 cmd_id;__u8 kflags;#define TCMU_UFLAG_UNKNOWN_OP 0x1 +#define TCMU_UFLAG_READ_LEN 0x2__u8 uflags; } __packed;
@@ -119,7 +121,7 @@ struct tcmu_cmd_entry {__u8 scsi_status;__u8 __pad1;__u16 __pad2; -__u32 __pad3; +__u32 read_len;char sense_buffer[TCMU_SENSE_BUFFERSIZE ]; } rsp; };