Re: Loud "pop" coming from hard drive on reboot

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Alan Cox wrote:

If you see a synchronize cache succeed and you then see the drive
shutdown succeed then you know that a sync cache can be faked as ok
safely. Any other command in between or after and it doesn't get faked

This seems pretty easy to deal with at command issue.

Yup.  It could be as trivial as this (untested, and not as nice
as Alan's full suggestion).

Signed-off-by:  Mark Lord <[email protected]>
---
--- linux/include/linux/libata.h.orig	2007-04-18 10:30:25.000000000 -0400
+++ linux/include/linux/libata.h	2007-04-18 10:30:28.000000000 -0400
@@ -499,6 +499,7 @@
	struct ata_ering	ering;
	int			spdn_cnt;
	unsigned int		horkage;	/* List of broken features */
+	int			needs_flush;	/* bool: 1==written since last flush */
#ifdef CONFIG_SATA_ACPI
	/* ACPI objects info */
	acpi_handle obj_handle;
--- linux/drivers/old/libata-scsi.c	2007-04-17 22:11:12.000000000 -0400
+++ linux/drivers/ata/libata-scsi.c	2007-04-18 10:27:29.000000000 -0400
@@ -2749,18 +2749,20 @@
			return atapi_xlat;

	switch (cmd) {
-	case READ_6:
-	case READ_10:
-	case READ_16:
-
	case WRITE_6:
	case WRITE_10:
	case WRITE_16:
+		dev->needs_flush = 1;
+	case READ_6:
+	case READ_10:
+	case READ_16:
		return ata_scsi_rw_xlat;

	case SYNCHRONIZE_CACHE:
-		if (ata_try_flush_cache(dev))
+		if (dev->needs_flush && ata_try_flush_cache(dev)) {
			return ata_scsi_flush_xlat;
+			dev->needs_flush = 0;
+		}
		break;

	case VERIFY:
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux