Commit 1ed1fa5f authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi

Pull SCSI fix from James Bottomley:
 "A single bug fix for hpsa.

  The user visible consequences aren't clear, but the ioaccel2 raid
  acceleration may misfire on the malformed request assuming the payload
  is big enough to require chaining (more than 31 sg entries)"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
  scsi: hpsa: correct ioaccel2 chaining
parents 7b103151 625d7d35
...@@ -4940,7 +4940,7 @@ static int hpsa_scsi_ioaccel2_queue_command(struct ctlr_info *h, ...@@ -4940,7 +4940,7 @@ static int hpsa_scsi_ioaccel2_queue_command(struct ctlr_info *h,
curr_sg->reserved[0] = 0; curr_sg->reserved[0] = 0;
curr_sg->reserved[1] = 0; curr_sg->reserved[1] = 0;
curr_sg->reserved[2] = 0; curr_sg->reserved[2] = 0;
curr_sg->chain_indicator = 0x80; curr_sg->chain_indicator = IOACCEL2_CHAIN;
curr_sg = h->ioaccel2_cmd_sg_list[c->cmdindex]; curr_sg = h->ioaccel2_cmd_sg_list[c->cmdindex];
} }
...@@ -4957,6 +4957,11 @@ static int hpsa_scsi_ioaccel2_queue_command(struct ctlr_info *h, ...@@ -4957,6 +4957,11 @@ static int hpsa_scsi_ioaccel2_queue_command(struct ctlr_info *h,
curr_sg++; curr_sg++;
} }
/*
* Set the last s/g element bit
*/
(curr_sg - 1)->chain_indicator = IOACCEL2_LAST_SG;
switch (cmd->sc_data_direction) { switch (cmd->sc_data_direction) {
case DMA_TO_DEVICE: case DMA_TO_DEVICE:
cp->direction &= ~IOACCEL2_DIRECTION_MASK; cp->direction &= ~IOACCEL2_DIRECTION_MASK;
......
...@@ -517,6 +517,7 @@ struct ioaccel2_sg_element { ...@@ -517,6 +517,7 @@ struct ioaccel2_sg_element {
u8 reserved[3]; u8 reserved[3];
u8 chain_indicator; u8 chain_indicator;
#define IOACCEL2_CHAIN 0x80 #define IOACCEL2_CHAIN 0x80
#define IOACCEL2_LAST_SG 0x40
}; };
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment