Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
94d0e7b8
Commit
94d0e7b8
authored
May 28, 2005
by
Jeff Garzik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[SCSI] allow sleeping in ->eh_device_reset_handler()
Signed-off-by:
James Bottomley
<
James.Bottomley@SteelEye.com
>
parent
8fa728a2
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
98 additions
and
42 deletions
+98
-42
Documentation/scsi/scsi_mid_low_api.txt
Documentation/scsi/scsi_mid_low_api.txt
+1
-2
drivers/ieee1394/sbp2.c
drivers/ieee1394/sbp2.c
+13
-1
drivers/message/fusion/mptscsih.c
drivers/message/fusion/mptscsih.c
+1
-5
drivers/s390/scsi/zfcp_scsi.c
drivers/s390/scsi/zfcp_scsi.c
+0
-3
drivers/scsi/aha152x.c
drivers/scsi/aha152x.c
+0
-2
drivers/scsi/aic7xxx/aic79xx_osm.c
drivers/scsi/aic7xxx/aic79xx_osm.c
+4
-4
drivers/scsi/aic7xxx_old.c
drivers/scsi/aic7xxx_old.c
+13
-1
drivers/scsi/ibmvscsi/ibmvscsi.c
drivers/scsi/ibmvscsi/ibmvscsi.c
+0
-2
drivers/scsi/ipr.c
drivers/scsi/ipr.c
+12
-1
drivers/scsi/lpfc/lpfc_scsi.c
drivers/scsi/lpfc/lpfc_scsi.c
+11
-1
drivers/scsi/megaraid.c
drivers/scsi/megaraid.c
+13
-1
drivers/scsi/megaraid/megaraid_mbox.c
drivers/scsi/megaraid/megaraid_mbox.c
+13
-1
drivers/scsi/qla1280.c
drivers/scsi/qla1280.c
+7
-1
drivers/scsi/qla2xxx/qla_os.c
drivers/scsi/qla2xxx/qla_os.c
+1
-7
drivers/scsi/scsi_error.c
drivers/scsi/scsi_error.c
+2
-5
drivers/scsi/sym53c8xx_2/sym_glue.c
drivers/scsi/sym53c8xx_2/sym_glue.c
+7
-1
drivers/usb/storage/scsiglue.c
drivers/usb/storage/scsiglue.c
+0
-4
No files found.
Documentation/scsi/scsi_mid_low_api.txt
View file @
94d0e7b8
...
...
@@ -973,8 +973,7 @@ Details:
*
* Returns SUCCESS if command aborted else FAILED
*
* Locks: struct Scsi_Host::host_lock held (with irqsave) on entry
* and assumed to be held on return.
* Locks: None held
*
* Calling context: kernel thread
*
...
...
drivers/ieee1394/sbp2.c
View file @
94d0e7b8
...
...
@@ -2615,7 +2615,7 @@ static int sbp2scsi_abort(struct scsi_cmnd *SCpnt)
/*
* Called by scsi stack when something has really gone wrong.
*/
static
int
sbp2scsi_reset
(
struct
scsi_cmnd
*
SCpnt
)
static
int
__
sbp2scsi_reset
(
struct
scsi_cmnd
*
SCpnt
)
{
struct
scsi_id_instance_data
*
scsi_id
=
(
struct
scsi_id_instance_data
*
)
SCpnt
->
device
->
host
->
hostdata
[
0
];
...
...
@@ -2630,6 +2630,18 @@ static int sbp2scsi_reset(struct scsi_cmnd *SCpnt)
return
(
SUCCESS
);
}
static
int
sbp2scsi_reset
(
struct
scsi_cmnd
*
SCpnt
)
{
unsigned
long
flags
;
int
rc
;
spin_lock_irqsave
(
SCpnt
->
device
->
host
->
host_lock
,
flags
);
rc
=
__sbp2scsi_reset
(
SCpnt
);
spin_unlock_irqrestore
(
SCpnt
->
device
->
host
->
host_lock
,
flags
);
return
rc
;
}
static
const
char
*
sbp2scsi_info
(
struct
Scsi_Host
*
host
)
{
return
"SCSI emulation for IEEE-1394 SBP-2 Devices"
;
...
...
drivers/message/fusion/mptscsih.c
View file @
94d0e7b8
...
...
@@ -1801,7 +1801,6 @@ int
mptscsih_dev_reset
(
struct
scsi_cmnd
*
SCpnt
)
{
MPT_SCSI_HOST
*
hd
;
spinlock_t
*
host_lock
=
SCpnt
->
device
->
host
->
host_lock
;
/* If we can't locate our host adapter structure, return FAILED status.
*/
...
...
@@ -1818,7 +1817,6 @@ mptscsih_dev_reset(struct scsi_cmnd * SCpnt)
printk
(
KERN_WARNING
MYNAM
": %s: >> Attempting target reset! (sc=%p)
\n
"
,
hd
->
ioc
->
name
,
SCpnt
);
spin_unlock_irq
(
host_lock
);
if
(
mptscsih_TMHandler
(
hd
,
MPI_SCSITASKMGMT_TASKTYPE_TARGET_RESET
,
SCpnt
->
device
->
channel
,
SCpnt
->
device
->
id
,
0
,
0
,
5
/* 5 second timeout */
)
...
...
@@ -1830,12 +1828,10 @@ mptscsih_dev_reset(struct scsi_cmnd * SCpnt)
hd
->
ioc
->
name
,
SCpnt
);
hd
->
tmPending
=
0
;
hd
->
tmState
=
TM_STATE_NONE
;
spin_lock_irq
(
host_lock
);
return
FAILED
;
}
spin_lock_irq
(
host_lock
);
return
SUCCESS
;
return
SUCCESS
;
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
...
...
drivers/s390/scsi/zfcp_scsi.c
View file @
94d0e7b8
...
...
@@ -636,8 +636,6 @@ zfcp_scsi_eh_device_reset_handler(struct scsi_cmnd *scpnt)
struct
zfcp_unit
*
unit
=
(
struct
zfcp_unit
*
)
scpnt
->
device
->
hostdata
;
struct
Scsi_Host
*
scsi_host
=
scpnt
->
device
->
host
;
spin_unlock_irq
(
scsi_host
->
host_lock
);
if
(
!
unit
)
{
ZFCP_LOG_NORMAL
(
"bug: Tried reset for nonexistent unit
\n
"
);
retval
=
SUCCESS
;
...
...
@@ -680,7 +678,6 @@ zfcp_scsi_eh_device_reset_handler(struct scsi_cmnd *scpnt)
retval
=
SUCCESS
;
}
out:
spin_lock_irq
(
scsi_host
->
host_lock
);
return
retval
;
}
...
...
drivers/scsi/aha152x.c
View file @
94d0e7b8
...
...
@@ -1225,8 +1225,6 @@ static int aha152x_device_reset(Scsi_Cmnd * SCpnt)
}
DO_UNLOCK
(
flags
);
spin_lock_irq
(
shpnt
->
host_lock
);
return
ret
;
}
...
...
drivers/scsi/aic7xxx/aic79xx_osm.c
View file @
94d0e7b8
...
...
@@ -1511,17 +1511,17 @@ ahd_linux_dev_reset(Scsi_Cmnd *cmd)
ahd_name
(
ahd
),
cmd
->
device
->
channel
,
cmd
->
device
->
id
,
cmd
->
device
->
lun
,
cmd
);
#endif
ahd_
midlayer_entrypoint_
lock
(
ahd
,
&
s
);
ahd_lock
(
ahd
,
&
s
);
dev
=
ahd_linux_get_device
(
ahd
,
cmd
->
device
->
channel
,
cmd
->
device
->
id
,
cmd
->
device
->
lun
,
/*alloc*/
FALSE
);
if
(
dev
==
NULL
)
{
ahd_
midlayer_entrypoint_
unlock
(
ahd
,
&
s
);
ahd_unlock
(
ahd
,
&
s
);
kfree
(
recovery_cmd
);
return
(
FAILED
);
}
if
((
scb
=
ahd_get_scb
(
ahd
,
AHD_NEVER_COL_IDX
))
==
NULL
)
{
ahd_
midlayer_entrypoint_
unlock
(
ahd
,
&
s
);
ahd_unlock
(
ahd
,
&
s
);
kfree
(
recovery_cmd
);
return
(
FAILED
);
}
...
...
@@ -1570,7 +1570,7 @@ ahd_linux_dev_reset(Scsi_Cmnd *cmd)
spin_lock_irq
(
&
ahd
->
platform_data
->
spin_lock
);
ahd_schedule_runq
(
ahd
);
ahd_linux_run_complete_queue
(
ahd
);
ahd_
midlayer_entrypoint_
unlock
(
ahd
,
&
s
);
ahd_unlock
(
ahd
,
&
s
);
printf
(
"%s: Device reset returning 0x%x
\n
"
,
ahd_name
(
ahd
),
retval
);
return
(
retval
);
}
...
...
drivers/scsi/aic7xxx_old.c
View file @
94d0e7b8
...
...
@@ -10358,7 +10358,7 @@ aic7xxx_queue(Scsi_Cmnd *cmd, void (*fn)(Scsi_Cmnd *))
* Returns an enumerated type that indicates the status of the operation.
*-F*************************************************************************/
static
int
aic7xxx_bus_device_reset
(
Scsi_Cmnd
*
cmd
)
__
aic7xxx_bus_device_reset
(
Scsi_Cmnd
*
cmd
)
{
struct
aic7xxx_host
*
p
;
struct
aic7xxx_scb
*
scb
;
...
...
@@ -10551,6 +10551,18 @@ aic7xxx_bus_device_reset(Scsi_Cmnd *cmd)
return
SUCCESS
;
}
static
int
aic7xxx_bus_device_reset
(
Scsi_Cmnd
*
cmd
)
{
int
rc
;
spin_lock_irq
(
cmd
->
device
->
host
->
host_lock
);
rc
=
__aic7xxx_bus_device_reset
(
cmd
);
spin_unlock_irq
(
cmd
->
device
->
host
->
host_lock
);
return
rc
;
}
/*+F*************************************************************************
* Function:
...
...
drivers/scsi/ibmvscsi/ibmvscsi.c
View file @
94d0e7b8
...
...
@@ -976,9 +976,7 @@ static int ibmvscsi_eh_device_reset_handler(struct scsi_cmnd *cmd)
return
FAILED
;
}
spin_unlock_irq
(
hostdata
->
host
->
host_lock
);
wait_for_completion
(
&
evt
->
comp
);
spin_lock_irq
(
hostdata
->
host
->
host_lock
);
/* make sure we got a good response */
if
(
unlikely
(
srp_rsp
.
srp
.
generic
.
type
!=
SRP_RSP_TYPE
))
{
...
...
drivers/scsi/ipr.c
View file @
94d0e7b8
...
...
@@ -2916,7 +2916,7 @@ static int ipr_eh_host_reset(struct scsi_cmnd * scsi_cmd)
* Return value:
* SUCCESS / FAILED
**/
static
int
ipr_eh_dev_reset
(
struct
scsi_cmnd
*
scsi_cmd
)
static
int
__
ipr_eh_dev_reset
(
struct
scsi_cmnd
*
scsi_cmd
)
{
struct
ipr_cmnd
*
ipr_cmd
;
struct
ipr_ioa_cfg
*
ioa_cfg
;
...
...
@@ -2970,6 +2970,17 @@ static int ipr_eh_dev_reset(struct scsi_cmnd * scsi_cmd)
return
(
IPR_IOASC_SENSE_KEY
(
ioasc
)
?
FAILED
:
SUCCESS
);
}
static
int
ipr_eh_dev_reset
(
struct
scsi_cmnd
*
cmd
)
{
int
rc
;
spin_lock_irq
(
cmd
->
device
->
host
->
host_lock
);
rc
=
__ipr_eh_dev_reset
(
cmd
);
spin_unlock_irq
(
cmd
->
device
->
host
->
host_lock
);
return
rc
;
}
/**
* ipr_bus_reset_done - Op done function for bus reset.
* @ipr_cmd: ipr command struct
...
...
drivers/scsi/lpfc/lpfc_scsi.c
View file @
94d0e7b8
...
...
@@ -928,7 +928,7 @@ lpfc_abort_handler(struct scsi_cmnd *cmnd)
}
static
int
lpfc_reset_lun_handler
(
struct
scsi_cmnd
*
cmnd
)
__
lpfc_reset_lun_handler
(
struct
scsi_cmnd
*
cmnd
)
{
struct
Scsi_Host
*
shost
=
cmnd
->
device
->
host
;
struct
lpfc_hba
*
phba
=
(
struct
lpfc_hba
*
)
shost
->
hostdata
[
0
];
...
...
@@ -1040,6 +1040,16 @@ lpfc_reset_lun_handler(struct scsi_cmnd *cmnd)
return
ret
;
}
static
int
lpfc_reset_lun_handler
(
struct
scsi_cmnd
*
cmnd
)
{
int
rc
;
spin_lock_irq
(
cmnd
->
device
->
host
->
host_lock
);
rc
=
__lpfc_reset_lun_handler
(
cmnd
);
spin_unlock_irq
(
cmnd
->
device
->
host
->
host_lock
);
return
rc
;
}
/*
* Note: midlayer calls this function with the host_lock held
*/
...
...
drivers/scsi/megaraid.c
View file @
94d0e7b8
...
...
@@ -1938,7 +1938,7 @@ megaraid_abort(Scsi_Cmnd *cmd)
static
int
megaraid_reset
(
Scsi_Cmnd
*
cmd
)
__
megaraid_reset
(
Scsi_Cmnd
*
cmd
)
{
adapter_t
*
adapter
;
megacmd_t
mc
;
...
...
@@ -1972,6 +1972,18 @@ megaraid_reset(Scsi_Cmnd *cmd)
return
rval
;
}
static
int
megaraid_reset
(
Scsi_Cmnd
*
cmd
)
{
adapter
=
(
adapter_t
*
)
cmd
->
device
->
host
->
hostdata
;
int
rc
;
spin_lock_irq
(
&
adapter
->
lock
);
rc
=
__megaraid_reset
(
cmd
);
spin_unlock_irq
(
&
adapter
->
lock
);
return
rc
;
}
/**
...
...
drivers/scsi/megaraid/megaraid_mbox.c
View file @
94d0e7b8
...
...
@@ -2726,7 +2726,7 @@ megaraid_abort_handler(struct scsi_cmnd *scp)
* host
**/
static
int
megaraid_reset_handler
(
struct
scsi_cmnd
*
scp
)
__
megaraid_reset_handler
(
struct
scsi_cmnd
*
scp
)
{
adapter_t
*
adapter
;
scb_t
*
scb
;
...
...
@@ -2847,6 +2847,18 @@ megaraid_reset_handler(struct scsi_cmnd *scp)
return
rval
;
}
static
int
megaraid_reset_handler
(
struct
scsi_cmnd
*
cmd
)
{
int
rc
;
spin_lock_irq
(
cmd
->
device
->
host
->
host_lock
);
rc
=
__megaraid_reset_handler
(
cmd
);
spin_unlock_irq
(
cmd
->
device
->
host
->
host_lock
);
return
rc
;
}
/*
* START: internal commands library
...
...
drivers/scsi/qla1280.c
View file @
94d0e7b8
...
...
@@ -1114,7 +1114,13 @@ qla1280_eh_abort(struct scsi_cmnd * cmd)
static
int
qla1280_eh_device_reset
(
struct
scsi_cmnd
*
cmd
)
{
return
qla1280_error_action
(
cmd
,
DEVICE_RESET
);
int
rc
;
spin_lock_irq
(
cmd
->
device
->
host
->
host_lock
);
rc
=
qla1280_error_action
(
cmd
,
DEVICE_RESET
);
spin_unlock_irq
(
cmd
->
device
->
host
->
host_lock
);
return
rc
;
}
/**************************************************************************
...
...
drivers/scsi/qla2xxx/qla_os.c
View file @
94d0e7b8
...
...
@@ -613,12 +613,8 @@ qla2xxx_eh_device_reset(struct scsi_cmnd *cmd)
qla_printk
(
KERN_INFO
,
ha
,
"scsi(%ld:%d:%d): DEVICE RESET ISSUED.
\n
"
,
ha
->
host_no
,
id
,
lun
);
spin_unlock_irq
(
ha
->
host
->
host_lock
);
if
(
qla2x00_wait_for_hba_online
(
ha
)
!=
QLA_SUCCESS
)
{
spin_lock_irq
(
ha
->
host
->
host_lock
);
if
(
qla2x00_wait_for_hba_online
(
ha
)
!=
QLA_SUCCESS
)
goto
eh_dev_reset_done
;
}
if
(
qla2x00_wait_for_loop_ready
(
ha
)
==
QLA_SUCCESS
)
{
if
(
qla2x00_device_reset
(
ha
,
fcport
)
==
0
)
...
...
@@ -669,8 +665,6 @@ qla2xxx_eh_device_reset(struct scsi_cmnd *cmd)
"scsi(%ld:%d:%d): DEVICE RESET SUCCEEDED.
\n
"
,
ha
->
host_no
,
id
,
lun
);
eh_dev_reset_done:
spin_lock_irq
(
ha
->
host
->
host_lock
);
return
ret
;
}
...
...
drivers/scsi/scsi_error.c
View file @
94d0e7b8
...
...
@@ -857,17 +857,14 @@ static int scsi_eh_abort_cmds(struct list_head *work_q,
**/
static
int
scsi_try_bus_device_reset
(
struct
scsi_cmnd
*
scmd
)
{
unsigned
long
flags
;
int
rtn
=
FAILED
;
int
rtn
;
if
(
!
scmd
->
device
->
host
->
hostt
->
eh_device_reset_handler
)
return
rtn
;
return
FAILED
;
scmd
->
owner
=
SCSI_OWNER_LOWLEVEL
;
spin_lock_irqsave
(
scmd
->
device
->
host
->
host_lock
,
flags
);
rtn
=
scmd
->
device
->
host
->
hostt
->
eh_device_reset_handler
(
scmd
);
spin_unlock_irqrestore
(
scmd
->
device
->
host
->
host_lock
,
flags
);
if
(
rtn
==
SUCCESS
)
{
scmd
->
device
->
was_reset
=
1
;
...
...
drivers/scsi/sym53c8xx_2/sym_glue.c
View file @
94d0e7b8
...
...
@@ -867,7 +867,13 @@ static int sym53c8xx_eh_abort_handler(struct scsi_cmnd *cmd)
static
int
sym53c8xx_eh_device_reset_handler
(
struct
scsi_cmnd
*
cmd
)
{
return
sym_eh_handler
(
SYM_EH_DEVICE_RESET
,
"DEVICE RESET"
,
cmd
);
int
rc
;
spin_lock_irq
(
cmd
->
device
->
host
->
host_lock
);
rc
=
sym_eh_handler
(
SYM_EH_DEVICE_RESET
,
"DEVICE RESET"
,
cmd
);
spin_unlock_irq
(
cmd
->
device
->
host
->
host_lock
);
return
rc
;
}
static
int
sym53c8xx_eh_bus_reset_handler
(
struct
scsi_cmnd
*
cmd
)
...
...
drivers/usb/storage/scsiglue.c
View file @
94d0e7b8
...
...
@@ -253,8 +253,6 @@ static int device_reset(struct scsi_cmnd *srb)
US_DEBUGP
(
"%s called
\n
"
,
__FUNCTION__
);
scsi_unlock
(
us_to_host
(
us
));
/* lock the device pointers and do the reset */
down
(
&
(
us
->
dev_semaphore
));
if
(
test_bit
(
US_FLIDX_DISCONNECTING
,
&
us
->
flags
))
{
...
...
@@ -264,8 +262,6 @@ static int device_reset(struct scsi_cmnd *srb)
result
=
us
->
transport_reset
(
us
);
up
(
&
(
us
->
dev_semaphore
));
/* lock the host for the return */
scsi_lock
(
us_to_host
(
us
));
return
result
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment