Merge branch 'master' into for-2.6.31
Conflicts: drivers/block/hd.c drivers/block/mg_disk.c Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
@@ -313,7 +313,7 @@ ata_scsi_em_message_show(struct device *dev, struct device_attribute *attr,
|
||||
return ap->ops->em_show(ap, buf);
|
||||
return -EINVAL;
|
||||
}
|
||||
DEVICE_ATTR(em_message, S_IRUGO | S_IWUGO,
|
||||
DEVICE_ATTR(em_message, S_IRUGO | S_IWUSR,
|
||||
ata_scsi_em_message_show, ata_scsi_em_message_store);
|
||||
EXPORT_SYMBOL_GPL(dev_attr_em_message);
|
||||
|
||||
@@ -366,7 +366,7 @@ ata_scsi_activity_store(struct device *dev, struct device_attribute *attr,
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
DEVICE_ATTR(sw_activity, S_IWUGO | S_IRUGO, ata_scsi_activity_show,
|
||||
DEVICE_ATTR(sw_activity, S_IWUSR | S_IRUGO, ata_scsi_activity_show,
|
||||
ata_scsi_activity_store);
|
||||
EXPORT_SYMBOL_GPL(dev_attr_sw_activity);
|
||||
|
||||
@@ -2142,13 +2142,14 @@ static unsigned int ata_scsiop_inq_89(struct ata_scsi_args *args, u8 *rbuf)
|
||||
|
||||
static unsigned int ata_scsiop_inq_b1(struct ata_scsi_args *args, u8 *rbuf)
|
||||
{
|
||||
int form_factor = ata_id_form_factor(args->id);
|
||||
int media_rotation_rate = ata_id_rotation_rate(args->id);
|
||||
|
||||
rbuf[1] = 0xb1;
|
||||
rbuf[3] = 0x3c;
|
||||
if (ata_id_major_version(args->id) > 7) {
|
||||
rbuf[4] = args->id[217] >> 8;
|
||||
rbuf[5] = args->id[217];
|
||||
rbuf[7] = args->id[168] & 0xf;
|
||||
}
|
||||
rbuf[4] = media_rotation_rate >> 8;
|
||||
rbuf[5] = media_rotation_rate;
|
||||
rbuf[7] = form_factor;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -2376,7 +2377,23 @@ saving_not_supp:
|
||||
*/
|
||||
static unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf)
|
||||
{
|
||||
u64 last_lba = args->dev->n_sectors - 1; /* LBA of the last block */
|
||||
struct ata_device *dev = args->dev;
|
||||
u64 last_lba = dev->n_sectors - 1; /* LBA of the last block */
|
||||
u8 log_per_phys = 0;
|
||||
u16 lowest_aligned = 0;
|
||||
u16 word_106 = dev->id[106];
|
||||
u16 word_209 = dev->id[209];
|
||||
|
||||
if ((word_106 & 0xc000) == 0x4000) {
|
||||
/* Number and offset of logical sectors per physical sector */
|
||||
if (word_106 & (1 << 13))
|
||||
log_per_phys = word_106 & 0xf;
|
||||
if ((word_209 & 0xc000) == 0x4000) {
|
||||
u16 first = dev->id[209] & 0x3fff;
|
||||
if (first > 0)
|
||||
lowest_aligned = (1 << log_per_phys) - first;
|
||||
}
|
||||
}
|
||||
|
||||
VPRINTK("ENTER\n");
|
||||
|
||||
@@ -2407,6 +2424,11 @@ static unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf)
|
||||
/* sector size */
|
||||
rbuf[10] = ATA_SECT_SIZE >> 8;
|
||||
rbuf[11] = ATA_SECT_SIZE & 0xff;
|
||||
|
||||
rbuf[12] = 0;
|
||||
rbuf[13] = log_per_phys;
|
||||
rbuf[14] = (lowest_aligned >> 8) & 0x3f;
|
||||
rbuf[15] = lowest_aligned;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user