* [PATCH v5] Snoop SET FEATURES - WRITE CACHE ENABLE/DISABLE command
@ 2006-06-12 3:06 zhao, forrest
2006-06-12 3:50 ` Tejun Heo
2006-06-12 3:53 ` Jeff Garzik
0 siblings, 2 replies; 3+ messages in thread
From: zhao, forrest @ 2006-06-12 3:06 UTC (permalink / raw)
To: jgarzik; +Cc: linux-ide
OK. I ported it to latest #upstream
Signed-off-by: Zhao, Forrest <forrest.zhao@intel.com>
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
index 40d1612..aaed5e5 100644
--- a/drivers/scsi/libata-core.c
+++ b/drivers/scsi/libata-core.c
@@ -5185,6 +5185,7 @@ static void ata_host_init(struct ata_por
INIT_WORK(&ap->port_task, NULL, NULL);
INIT_WORK(&ap->hotplug_task, ata_scsi_hotplug, ap);
+ INIT_WORK(&ap->scsi_rescan_task, ata_scsi_dev_rescan, ap);
INIT_LIST_HEAD(&ap->eh_done_q);
init_waitqueue_head(&ap->eh_wait_q);
diff --git a/drivers/scsi/libata-eh.c b/drivers/scsi/libata-eh.c
index 6285257..f82799e 100644
--- a/drivers/scsi/libata-eh.c
+++ b/drivers/scsi/libata-eh.c
@@ -1554,6 +1554,9 @@ static int ata_eh_revalidate_and_attach(
if (rc)
break;
+ /* schedule the scsi_rescan_device() here */
+ queue_work(ata_aux_wq, &(ap->scsi_rescan_task));
+
ehc->i.action &= ~ATA_EH_REVALIDATE;
} else if (dev->class == ATA_DEV_UNKNOWN &&
ehc->tries[dev->devno] &&
diff --git a/drivers/scsi/libata-scsi.c b/drivers/scsi/libata-scsi.c
index 5f90d8e..45a49be 100644
--- a/drivers/scsi/libata-scsi.c
+++ b/drivers/scsi/libata-scsi.c
@@ -1306,6 +1306,17 @@ static void ata_scsi_qc_complete(struct
u8 *cdb = cmd->cmnd;
int need_sense = (qc->err_mask != 0);
+ /* We snoop the SET_FEATURES - Write Cache ON/OFF command, and
+ * schedule EH_REVALIDATE operation to update the IDENTIFY DEVICE
+ * cache
+ */
+ if (!need_sense && (qc->tf.command == ATA_CMD_SET_FEATURES) &&
+ ((qc->tf.feature == SETFEATURES_WC_ON) ||
+ (qc->tf.feature == SETFEATURES_WC_OFF))) {
+ qc->ap->eh_info.action |= ATA_EH_REVALIDATE;
+ ata_port_schedule_eh(qc->ap);
+ }
+
/* For ATA pass thru (SAT) commands, generate a sense block if
* user mandated it or if there's an error. Note that if we
* generate because the user forced us to, a check condition
@@ -2992,3 +3003,28 @@ static int ata_scsi_user_scan(struct Scs
return rc;
}
+
+/**
+ * ata_scsi_dev_rescan - initiate scsi_rescan_device()
+ * @data: Pointer to ATA port to perform scsi_rescan_device()
+ *
+ * After ATA pass thru (SAT) commands are executed successfully,
+ * libata need to propagate the changes to SCSI layer.
+ *
+ * LOCKING:
+ * Kernel thread context (may sleep).
+ */
+void ata_scsi_dev_rescan(void *data)
+{
+ struct ata_port *ap = data;
+ struct ata_device *dev;
+ unsigned int i;
+
+ for (i = 0; i < ATA_MAX_DEVICES; i++) {
+ dev = &ap->device[i];
+
+ if (ata_dev_enabled(dev))
+ scsi_rescan_device(&(dev->sdev->sdev_gendev));
+ }
+}
+
diff --git a/drivers/scsi/libata.h b/drivers/scsi/libata.h
index 1dd496f..bdd4888 100644
--- a/drivers/scsi/libata.h
+++ b/drivers/scsi/libata.h
@@ -104,6 +104,7 @@ extern void ata_scsi_rbuf_fill(struct at
unsigned int (*actor) (struct ata_scsi_args
*args,
u8 *rbuf, unsigned int
buflen));
extern void ata_schedule_scsi_eh(struct Scsi_Host *shost);
+extern void ata_scsi_dev_rescan(void *data);
/* libata-eh.c */
extern enum scsi_eh_timer_return ata_scsi_timed_out(struct scsi_cmnd
*cmd);
diff --git a/include/linux/ata.h b/include/linux/ata.h
index c494e1c..3671af8 100644
--- a/include/linux/ata.h
+++ b/include/linux/ata.h
@@ -181,6 +181,9 @@ enum {
XFER_PIO_0 = 0x08,
XFER_PIO_SLOW = 0x00,
+ SETFEATURES_WC_ON = 0x02, /* Enable write cache */
+ SETFEATURES_WC_OFF = 0x82, /* Disable write cache */
+
/* ATAPI stuff */
ATAPI_PKT_DMA = (1 << 0),
ATAPI_DMADIR = (1 << 2), /* ATAPI data dir:
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v5] Snoop SET FEATURES - WRITE CACHE ENABLE/DISABLE command
2006-06-12 3:06 [PATCH v5] Snoop SET FEATURES - WRITE CACHE ENABLE/DISABLE command zhao, forrest
@ 2006-06-12 3:50 ` Tejun Heo
2006-06-12 3:53 ` Jeff Garzik
1 sibling, 0 replies; 3+ messages in thread
From: Tejun Heo @ 2006-06-12 3:50 UTC (permalink / raw)
To: zhao, forrest; +Cc: jgarzik, linux-ide
zhao, forrest wrote:
> OK. I ported it to latest #upstream
>
> Signed-off-by: Zhao, Forrest <forrest.zhao@intel.com>
>
The patch looks good to me, but can you repost it with proper header
message? If Jeff applies your patch w/ git-applymbox, "OK. I ported it
to latest #upstream" will end up as the commit message body, which isn't
so descriptive. Please write what the patch does above Signed-off-by.
You can write 'ported to latest #upstream' kind of message below
Signed-off-by separated w/ '---'. For example.
Subject: [PATCH] libata: Snoop SET FEATURES - WRITE CACHE ENABLE/DISABLE
command (v5)
[Explain what the patch does.]
Signed-off-by: [....]
---
OK. I ported it to latest #upstream
[If the patch touches a lot of files, including diffstat -p1 result here
would be nice.]
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
index 11df827..7efe991 100644
--- a/drivers/scsi/libata-core.c
+++ b/drivers/scsi/libata-core.c
@@ -69,6 +69,8 @@ static void ata_dev_xfermask(struct ata_
....
--
tejun
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v5] Snoop SET FEATURES - WRITE CACHE ENABLE/DISABLE command
2006-06-12 3:06 [PATCH v5] Snoop SET FEATURES - WRITE CACHE ENABLE/DISABLE command zhao, forrest
2006-06-12 3:50 ` Tejun Heo
@ 2006-06-12 3:53 ` Jeff Garzik
1 sibling, 0 replies; 3+ messages in thread
From: Jeff Garzik @ 2006-06-12 3:53 UTC (permalink / raw)
To: zhao, forrest; +Cc: linux-ide
zhao, forrest wrote:
> OK. I ported it to latest #upstream
>
> Signed-off-by: Zhao, Forrest <forrest.zhao@intel.com>
Patch content looks OK, but
1) "OK. I ported it to latest #upstream" is not a good description :) I
use the git-applymbox script to apply the patch, and the full technical
patch description is copied from your email's message body directly into
the Linux kernel changelog.
The appropriate place for comments like "OK. I ported it to latest
#upstream" is following the "---" description terminator line. See
Tejun's patches for an example :)
2) Both git-applymbox(1) and patch(1) fail to apply the patch:
[jgarzik@pretzel libata-dev]$ git-applymbox /g/tmp/mbox ~/info/signoff.txt
1 patch(es) to process.
Applying 'Snoop SET FEATURES - WRITE CACHE ENABLE/DISABLE command'
fatal: corrupt patch at line 84
[jgarzik@pretzel libata-dev]$ patch -sp1 < /g/tmp/mbox
patch: **** malformed patch at line 144: *args,
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2006-06-12 3:53 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-06-12 3:06 [PATCH v5] Snoop SET FEATURES - WRITE CACHE ENABLE/DISABLE command zhao, forrest
2006-06-12 3:50 ` Tejun Heo
2006-06-12 3:53 ` Jeff Garzik
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).