summaryrefslogtreecommitdiff
path: root/drivers/scsi/hpsa_cmd.h
diff options
context:
space:
mode:
authorWebb Scales <webbnh@hp.com>2015-01-23 16:43:35 -0600
committerJames Bottomley <JBottomley@Parallels.com>2015-02-02 09:57:40 -0800
commit281a7fd03ea37c979bbba4d8376595c0288e3252 (patch)
tree0394dd2685426d192027fb5b1f0c4dbb5fd6da27 /drivers/scsi/hpsa_cmd.h
parent03383736348bb73a45f8460afca3c5f5bd1be172 (diff)
downloadlinux-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.h1
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 */