Skip to content

Commit

Permalink
xsysace: Fix dereferencing of cf_id after hd_driveid removal
Browse files Browse the repository at this point in the history
Commit 4aaf2fe (xsysace: make it
'struct hd_driveid'-free) converted the cf_id member of 'struct
ace_device' from a 'struct hd_driveid' to a u16 array.  However,
references to the base of the structure were still using the '&'
operator.  When the address was used with the ata_id_u32() macro, the
compiler used the size of the entire array instead of sizeof(u16) to
calculate the offset from the base address.

This patch removes the use of the '&' operator from all references of
cf_id to fix the bug and remove future confusion.

Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
  • Loading branch information
Grant Likely authored and Bartlomiej Zolnierkiewicz committed Apr 8, 2009
1 parent fb4252e commit f0edef8
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions drivers/block/xsysace.c
Original file line number Diff line number Diff line change
Expand Up @@ -563,7 +563,7 @@ static void ace_fsm_dostate(struct ace_device *ace)
case ACE_FSM_STATE_IDENTIFY_PREPARE:
/* Send identify command */
ace->fsm_task = ACE_TASK_IDENTIFY;
ace->data_ptr = &ace->cf_id;
ace->data_ptr = ace->cf_id;
ace->data_count = ACE_BUF_PER_SECTOR;
ace_out(ace, ACE_SECCNTCMD, ACE_SECCNTCMD_IDENTIFY);

Expand Down Expand Up @@ -608,8 +608,8 @@ static void ace_fsm_dostate(struct ace_device *ace)
break;

case ACE_FSM_STATE_IDENTIFY_COMPLETE:
ace_fix_driveid(&ace->cf_id[0]);
ace_dump_mem(&ace->cf_id, 512); /* Debug: Dump out disk ID */
ace_fix_driveid(ace->cf_id);
ace_dump_mem(ace->cf_id, 512); /* Debug: Dump out disk ID */

if (ace->data_result) {
/* Error occured, disable the disk */
Expand All @@ -622,9 +622,9 @@ static void ace_fsm_dostate(struct ace_device *ace)

/* Record disk parameters */
set_capacity(ace->gd,
ata_id_u32(&ace->cf_id, ATA_ID_LBA_CAPACITY));
ata_id_u32(ace->cf_id, ATA_ID_LBA_CAPACITY));
dev_info(ace->dev, "capacity: %i sectors\n",
ata_id_u32(&ace->cf_id, ATA_ID_LBA_CAPACITY));
ata_id_u32(ace->cf_id, ATA_ID_LBA_CAPACITY));
}

/* We're done, drop to IDLE state and notify waiters */
Expand Down Expand Up @@ -923,7 +923,7 @@ static int ace_release(struct gendisk *disk, fmode_t mode)
static int ace_getgeo(struct block_device *bdev, struct hd_geometry *geo)
{
struct ace_device *ace = bdev->bd_disk->private_data;
u16 *cf_id = &ace->cf_id[0];
u16 *cf_id = ace->cf_id;

dev_dbg(ace->dev, "ace_getgeo()\n");

Expand Down

0 comments on commit f0edef8

Please sign in to comment.