diff options
author | Webb Scales <webbnh@hp.com> | 2015-01-23 16:43:35 -0600 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2015-02-02 09:57:40 -0800 |
commit | 281a7fd03ea37c979bbba4d8376595c0288e3252 (patch) | |
tree | 0394dd2685426d192027fb5b1f0c4dbb5fd6da27 /drivers/scsi/hpsa_cmd.h | |
parent | 03383736348bb73a45f8460afca3c5f5bd1be172 (diff) | |
download | linux-281a7fd03ea37c979bbba4d8376595c0288e3252.tar.gz linux-281a7fd03ea37c979bbba4d8376595c0288e3252.tar.xz |
hpsa: fix race between abort handler and main i/o path
This means changing the allocator to reference count commands.
The reference count is now the authoritative indicator of whether a
command is allocated or not. The h->cmd_pool_bits bitmap is now
only a heuristic hint to speed up the allocation process, it is no
longer the authoritative record of allocated commands.
Since we changed the command allocator to use reference counting
as the authoritative indicator of whether a command is allocated,
fail_all_outstanding_cmds needs to use the reference count not
h->cmd_pool_bits for this purpose.
Fix hpsa_drain_accel_commands to use the reference count as the
authoritative indicator of whether a command is allocated instead of
the h->cmd_pool_bits bitmap.
Reviewed-by: Scott Teel <scott.teel@pmcs.com>
Signed-off-by: Don Brace <don.brace@pmcs.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'drivers/scsi/hpsa_cmd.h')
-rw-r--r-- | drivers/scsi/hpsa_cmd.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/scsi/hpsa_cmd.h b/drivers/scsi/hpsa_cmd.h index 4726dbb67fa3..071b64c82406 100644 --- a/drivers/scsi/hpsa_cmd.h +++ b/drivers/scsi/hpsa_cmd.h @@ -421,6 +421,7 @@ struct CommandList { * not used. */ struct hpsa_scsi_dev_t *phys_disk; + atomic_t refcount; /* Must be last to avoid memset in cmd_alloc */ } __aligned(COMMANDLIST_ALIGNMENT); /* Max S/G elements in I/O accelerator command */ |