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
951d77fd
Commit
951d77fd
authored
Jun 18, 2016
by
James Bottomley
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'mkp-scsi/4.7/scsi-fixes' into fixes
parents
27ea13e6
8beb3300
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
12 additions
and
6 deletions
+12
-6
Documentation/scsi/scsi_eh.txt
Documentation/scsi/scsi_eh.txt
+6
-2
drivers/ata/libata-eh.c
drivers/ata/libata-eh.c
+1
-1
drivers/scsi/53c700.c
drivers/scsi/53c700.c
+2
-2
drivers/scsi/scsi_error.c
drivers/scsi/scsi_error.c
+3
-1
No files found.
Documentation/scsi/scsi_eh.txt
View file @
951d77fd
...
@@ -263,19 +263,23 @@ scmd->allowed.
...
@@ -263,19 +263,23 @@ scmd->allowed.
3. scmd recovered
3. scmd recovered
ACTION: scsi_eh_finish_cmd() is invoked to EH-finish scmd
ACTION: scsi_eh_finish_cmd() is invoked to EH-finish scmd
- shost->host_failed--
- clear scmd->eh_eflags
- clear scmd->eh_eflags
- scsi_setup_cmd_retry()
- scsi_setup_cmd_retry()
- move from local eh_work_q to local eh_done_q
- move from local eh_work_q to local eh_done_q
LOCKING: none
LOCKING: none
CONCURRENCY: at most one thread per separate eh_work_q to
keep queue manipulation lockless
4. EH completes
4. EH completes
ACTION: scsi_eh_flush_done_q() retries scmds or notifies upper
ACTION: scsi_eh_flush_done_q() retries scmds or notifies upper
layer of failure.
layer of failure. May be called concurrently but must have
a no more than one thread per separate eh_work_q to
manipulate the queue locklessly
- scmd is removed from eh_done_q and scmd->eh_entry is cleared
- scmd is removed from eh_done_q and scmd->eh_entry is cleared
- if retry is necessary, scmd is requeued using
- if retry is necessary, scmd is requeued using
scsi_queue_insert()
scsi_queue_insert()
- otherwise, scsi_finish_command() is invoked for scmd
- otherwise, scsi_finish_command() is invoked for scmd
- zero shost->host_failed
LOCKING: queue or finish function performs appropriate locking
LOCKING: queue or finish function performs appropriate locking
...
...
drivers/ata/libata-eh.c
View file @
951d77fd
...
@@ -606,7 +606,7 @@ void ata_scsi_error(struct Scsi_Host *host)
...
@@ -606,7 +606,7 @@ void ata_scsi_error(struct Scsi_Host *host)
ata_scsi_port_error_handler
(
host
,
ap
);
ata_scsi_port_error_handler
(
host
,
ap
);
/* finish or retry handled scmd's and clean up */
/* finish or retry handled scmd's and clean up */
WARN_ON
(
host
->
host_failed
||
!
list_empty
(
&
eh_work_q
));
WARN_ON
(
!
list_empty
(
&
eh_work_q
));
DPRINTK
(
"EXIT
\n
"
);
DPRINTK
(
"EXIT
\n
"
);
}
}
...
...
drivers/scsi/53c700.c
View file @
951d77fd
...
@@ -1122,7 +1122,7 @@ process_script_interrupt(__u32 dsps, __u32 dsp, struct scsi_cmnd *SCp,
...
@@ -1122,7 +1122,7 @@ process_script_interrupt(__u32 dsps, __u32 dsp, struct scsi_cmnd *SCp,
}
else
{
}
else
{
struct
scsi_cmnd
*
SCp
;
struct
scsi_cmnd
*
SCp
;
SCp
=
scsi_host_find_tag
(
SDp
->
host
,
SCSI_NO_TAG
)
;
SCp
=
SDp
->
current_cmnd
;
if
(
unlikely
(
SCp
==
NULL
))
{
if
(
unlikely
(
SCp
==
NULL
))
{
sdev_printk
(
KERN_ERR
,
SDp
,
sdev_printk
(
KERN_ERR
,
SDp
,
"no saved request for untagged cmd
\n
"
);
"no saved request for untagged cmd
\n
"
);
...
@@ -1826,7 +1826,7 @@ NCR_700_queuecommand_lck(struct scsi_cmnd *SCp, void (*done)(struct scsi_cmnd *)
...
@@ -1826,7 +1826,7 @@ NCR_700_queuecommand_lck(struct scsi_cmnd *SCp, void (*done)(struct scsi_cmnd *)
slot
->
tag
,
slot
);
slot
->
tag
,
slot
);
}
else
{
}
else
{
slot
->
tag
=
SCSI_NO_TAG
;
slot
->
tag
=
SCSI_NO_TAG
;
/*
must populate current_cmnd for scsi_host_find_tag to work
*/
/*
save current command for reselection
*/
SCp
->
device
->
current_cmnd
=
SCp
;
SCp
->
device
->
current_cmnd
=
SCp
;
}
}
/* sanity check: some of the commands generated by the mid-layer
/* sanity check: some of the commands generated by the mid-layer
...
...
drivers/scsi/scsi_error.c
View file @
951d77fd
...
@@ -1128,7 +1128,6 @@ static int scsi_eh_action(struct scsi_cmnd *scmd, int rtn)
...
@@ -1128,7 +1128,6 @@ static int scsi_eh_action(struct scsi_cmnd *scmd, int rtn)
*/
*/
void
scsi_eh_finish_cmd
(
struct
scsi_cmnd
*
scmd
,
struct
list_head
*
done_q
)
void
scsi_eh_finish_cmd
(
struct
scsi_cmnd
*
scmd
,
struct
list_head
*
done_q
)
{
{
scmd
->
device
->
host
->
host_failed
--
;
scmd
->
eh_eflags
=
0
;
scmd
->
eh_eflags
=
0
;
list_move_tail
(
&
scmd
->
eh_entry
,
done_q
);
list_move_tail
(
&
scmd
->
eh_entry
,
done_q
);
}
}
...
@@ -2227,6 +2226,9 @@ int scsi_error_handler(void *data)
...
@@ -2227,6 +2226,9 @@ int scsi_error_handler(void *data)
else
else
scsi_unjam_host
(
shost
);
scsi_unjam_host
(
shost
);
/* All scmds have been handled */
shost
->
host_failed
=
0
;
/*
/*
* Note - if the above fails completely, the action is to take
* Note - if the above fails completely, the action is to take
* individual devices offline and flush the queue of any
* individual devices offline and flush the queue of any
...
...
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