ide: ide_id_has_flush_cache_ext() -> ata_id_flush_ext_enabled()
PATCH 3/3 ide: ide_id_has_flush_cache_ext() -> ata_id_flush_ext_enabled()
* Add ata_id_flush_ext_enabled() inline helper to <linux/ata.h>.
* ide_id_has_flush_cache_ext() -> ata_id_flush_ext_enabled()
The latter one also checks if the command is marked as supported in word 83 and validity of words 83 & 86.
Cc Jeff Garzik <[email protected]>
Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>
--- drivers/ide/ide-disk.c | 6 +++--- drivers/ide/ide-io.c | 2 +- include/linux/ata.h | 13 +++++++++++++ include/linux/ide.h | 4 ---- 4 files changed, 17 insertions(+), 8 deletions(-)
drivers/ide/ide-disk.c +3 -3
@@ -582,7 +582,7 @@ static void idedisk_prepare_flush(structBUG_ON (task ==NULL );memset (task,0 ,sizeof (*task)); -if (ide_id_has_flush_cache_ext (drive->id) && +if (ata_id_flush_ext_enabled (drive->id) && (drive->capacity64 >= (1UL <<28 ))) task->tf.command =ATA_CMD_FLUSH_EXT ;else
@@ -659,7 +659,7 @@ static void update_ordered(ide_drive_t * capacity =idedisk_capacity (drive); barrier =ata_id_flush_enabled (id) && !drive->noflush && (drive->addressing ==0 || capacity <= (1ULL <<28 ) || -ide_id_has_flush_cache_ext (id)); +ata_id_flush_ext_enabled (id));printk (KERN_INFO "%s: cache flushes %ssupported\n" , drive->name, barrier ?"" :"not " );
@@ -705,7 +705,7 @@ static int do_idedisk_flushcache(ide_driide_task_t args;memset (&args,0 ,sizeof (ide_task_t)); -if (ide_id_has_flush_cache_ext (drive->id)) +if (ata_id_flush_ext_enabled (drive->id)) args.tf.command =ATA_CMD_FLUSH_EXT ;else args.tf.command =ATA_CMD_FLUSH ;
drivers/ide/ide-io.c +1 -1
@@ -188,7 +188,7 @@ static ide_startstop_t ide_start_power_side_complete_power_step (drive, rq,0 ,0 );return ide_stopped; } -if (ide_id_has_flush_cache_ext (drive->id)) +if (ata_id_flush_ext_enabled (drive->id)) args->tf.command =ATA_CMD_FLUSH_EXT ;else args->tf.command =ATA_CMD_FLUSH ;
include/linux/ata.h +13 -0
@@ -573,6 +573,19 @@ static inline int ata_id_has_flush_ext(creturn id[ATA_ID_COMMAND_SET_2 ] & (1 <<13 ); } +static inline int ata_id_flush_ext_enabled (const u16 *id) +{ +if (ata_id_has_flush_ext (id) ==0 ) +return 0 ; +if ((id[ATA_ID_CSF_DEFAULT ] &0xC000 ) !=0x4000 ) +return 0 ; +/* +* some Maxtor disks have bit 13 defined incorrectly +* so check bit 10 too +*/ +return (id[ATA_ID_CFS_ENABLE_2 ] &0x2400 ) ==0x2400 ; +} +static inline int ata_id_has_lba48 (const u16 *id) {if ((id[ATA_ID_COMMAND_SET_2 ] &0xC000 ) !=0x4000 )
include/linux/ide.h +0 -4
@@ -1451,10 +1451,6 @@ extern struct mutex ide_cfg_mtx;extern struct bus_type ide_bus_type;extern struct class *ide_port_class; -/* some Maxtor disks have bit 13 defined incorrectly so check bit 10 too */ -#define ide_id_has_flush_cache_ext (id) \ - (((id)[ATA_ID_CFS_ENABLE_2] & 0x2400) == 0x2400) -static inline void ide_dump_identify (u8 *id) {print_hex_dump (KERN_INFO ,"" ,DUMP_PREFIX_NONE ,16 ,2 , id,512 ,0 );