ide: ide_id_has_flush_cache() -> ata_id_flush_enabled()
PATCH 2/3 ide: ide_id_has_flush_cache() -> ata_id_flush_enabled()
* Add ata_id_flush_enabled() inline helper to <linux/ata.h>.
* ide_id_has_flush_cache() -> ata_id_flush_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 | 9 +++++++++ include/linux/ide.h | 3 --- 4 files changed, 13 insertions(+), 7 deletions(-)
drivers/ide/ide-disk.c +3 -3
@@ -657,7 +657,7 @@ static void update_ordered(ide_drive_t ** not available so we don't need to recheck that. */ capacity =idedisk_capacity (drive); - barrier =ide_id_has_flush_cache (id) && !drive->noflush && + barrier =ata_id_flush_enabled (id) && !drive->noflush && (drive->addressing ==0 || capacity <= (1ULL <<28 ) ||ide_id_has_flush_cache_ext (id));
@@ -684,7 +684,7 @@ static int set_wcache(ide_drive_t *driveif (arg <0 || arg >1 )return -EINVAL ; -if (ide_id_has_flush_cache (drive->id)) { +if (ata_id_flush_enabled (drive->id)) {memset (&args,0 ,sizeof (ide_task_t)); args.tf.feature = arg ?SETFEATURES_WC_ON :SETFEATURES_WC_OFF ;
@@ -892,7 +892,7 @@ static void idedisk_setup(ide_drive_t *dstatic void ide_cacheflush_p (ide_drive_t *drive) { -if (!drive->wcache || !ide_id_has_flush_cache (drive->id)) +if (!drive->wcache ||ata_id_flush_enabled (drive->id) ==0 )return ;if (do_idedisk_flushcache (drive))
drivers/ide/ide-io.c +1 -1
@@ -184,7 +184,7 @@ static ide_startstop_t ide_start_power_sif (drive->media != ide_disk)break ;/* Not supported? Switch to next step now. */ -if (!drive->wcache || !ide_id_has_flush_cache (drive->id)) { +if (!drive->wcache ||ata_id_flush_enabled (drive->id) ==0 ) {ide_complete_power_step (drive, rq,0 ,0 );return ide_stopped; }
include/linux/ata.h +9 -0
@@ -557,6 +557,15 @@ static inline int ata_id_has_flush(constreturn id[ATA_ID_COMMAND_SET_2 ] & (1 <<12 ); } +static inline int ata_id_flush_enabled (const u16 *id) +{ +if (ata_id_has_flush (id) ==0 ) +return 0 ; +if ((id[ATA_ID_CSF_DEFAULT ] &0xC000 ) !=0x4000 ) +return 0 ; +return id[ATA_ID_CFS_ENABLE_2 ] & (1 <<12 ); +} +static inline int ata_id_has_flush_ext (const u16 *id) {if ((id[ATA_ID_COMMAND_SET_2 ] &0xC000 ) !=0x4000 )
include/linux/ide.h +0 -3
@@ -1451,9 +1451,6 @@ extern struct mutex ide_cfg_mtx;extern struct bus_type ide_bus_type;extern struct class *ide_port_class; -/* check if CACHE FLUSH command is supported (as defined in ATA-6) */ -#define ide_id_has_flush_cache (id) ((id)[ATA_ID_CFS_ENABLE_2] & 0x1000) -/* 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)