ata: libata-eh: fix sloppy result type of ata_internal_cmd_timeout()
ata_internal_cmd_timeout() returns *unsigned long* timeout in ms, however ata_exec_internal_sg() passes that timeout to msecs_to_jiffies() that takes just *unsigned int*. Change ata_internal_cmd_timeout()'s result type to *unsigned int* as well, also updating the *struct* ata_eh_cmd_timeout_ent and the command timeout tables -- all timeouts fit into *unsigned int* but we have to change ULONG_MAX to UINT_MAX... Signed-off-by: Sergey Shtylyov <s.shtylyov@omp.ru> Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
This commit is contained in:
Родитель
61176eed36
Коммит
e06233f937
|
@ -86,36 +86,36 @@ static const unsigned long ata_eh_reset_timeouts[] = {
|
|||
ULONG_MAX, /* > 1 min has elapsed, give up */
|
||||
};
|
||||
|
||||
static const unsigned long ata_eh_identify_timeouts[] = {
|
||||
static const unsigned int ata_eh_identify_timeouts[] = {
|
||||
5000, /* covers > 99% of successes and not too boring on failures */
|
||||
10000, /* combined time till here is enough even for media access */
|
||||
30000, /* for true idiots */
|
||||
ULONG_MAX,
|
||||
UINT_MAX,
|
||||
};
|
||||
|
||||
static const unsigned long ata_eh_revalidate_timeouts[] = {
|
||||
static const unsigned int ata_eh_revalidate_timeouts[] = {
|
||||
15000, /* Some drives are slow to read log pages when waking-up */
|
||||
15000, /* combined time till here is enough even for media access */
|
||||
ULONG_MAX,
|
||||
UINT_MAX,
|
||||
};
|
||||
|
||||
static const unsigned long ata_eh_flush_timeouts[] = {
|
||||
static const unsigned int ata_eh_flush_timeouts[] = {
|
||||
15000, /* be generous with flush */
|
||||
15000, /* ditto */
|
||||
30000, /* and even more generous */
|
||||
ULONG_MAX,
|
||||
UINT_MAX,
|
||||
};
|
||||
|
||||
static const unsigned long ata_eh_other_timeouts[] = {
|
||||
static const unsigned int ata_eh_other_timeouts[] = {
|
||||
5000, /* same rationale as identify timeout */
|
||||
10000, /* ditto */
|
||||
/* but no merciful 30sec for other commands, it just isn't worth it */
|
||||
ULONG_MAX,
|
||||
UINT_MAX,
|
||||
};
|
||||
|
||||
struct ata_eh_cmd_timeout_ent {
|
||||
const u8 *commands;
|
||||
const unsigned long *timeouts;
|
||||
const unsigned int *timeouts;
|
||||
};
|
||||
|
||||
/* The following table determines timeouts to use for EH internal
|
||||
|
@ -326,7 +326,7 @@ static int ata_lookup_timeout_table(u8 cmd)
|
|||
* RETURNS:
|
||||
* Determined timeout.
|
||||
*/
|
||||
unsigned long ata_internal_cmd_timeout(struct ata_device *dev, u8 cmd)
|
||||
unsigned int ata_internal_cmd_timeout(struct ata_device *dev, u8 cmd)
|
||||
{
|
||||
struct ata_eh_context *ehc = &dev->link->eh_context;
|
||||
int ent = ata_lookup_timeout_table(cmd);
|
||||
|
@ -361,7 +361,7 @@ void ata_internal_cmd_timed_out(struct ata_device *dev, u8 cmd)
|
|||
return;
|
||||
|
||||
idx = ehc->cmd_timeout_idx[dev->devno][ent];
|
||||
if (ata_eh_cmd_timeout_table[ent].timeouts[idx + 1] != ULONG_MAX)
|
||||
if (ata_eh_cmd_timeout_table[ent].timeouts[idx + 1] != UINT_MAX)
|
||||
ehc->cmd_timeout_idx[dev->devno][ent]++;
|
||||
}
|
||||
|
||||
|
|
|
@ -132,7 +132,7 @@ int ata_scsi_dev_config(struct scsi_device *sdev, struct ata_device *dev);
|
|||
int __ata_scsi_queuecmd(struct scsi_cmnd *scmd, struct ata_device *dev);
|
||||
|
||||
/* libata-eh.c */
|
||||
extern unsigned long ata_internal_cmd_timeout(struct ata_device *dev, u8 cmd);
|
||||
extern unsigned int ata_internal_cmd_timeout(struct ata_device *dev, u8 cmd);
|
||||
extern void ata_internal_cmd_timed_out(struct ata_device *dev, u8 cmd);
|
||||
extern void ata_eh_acquire(struct ata_port *ap);
|
||||
extern void ata_eh_release(struct ata_port *ap);
|
||||
|
|
Загрузка…
Ссылка в новой задаче