Skip to contentSkip to conversation

SCSI/SD: clearer output of disk cache state

PATCH In review Luben Tuikov 5 participants 9 messages Nov 4, 2006 – Nov 15, 2006 SCSI

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 SCSI/SD: clearer output of disk cache state

---
 drivers/scsi/sd.c |   17 +++++++----------
 1 files changed, 7 insertions(+), 10 deletions(-)

This patch is 8 months old.

Luben

drivers/scsi/sd.c +7 -10
index 9d98723..f157747 100644
@@ -1354,11 +1354,6 @@ sd_read_cache_type(struct scsi_disk *sdk
 	res = sd_do_mode_sense(sdp, dbd, modepage, buffer, len, &data, &sshdr);
 
 	if (scsi_status_is_good(res)) {
-		const char *types[] = {
-			"write through", "none", "write back",
-			"write back, no read (daft)"
-		};
-		int ct = 0;
 		int offset = data.header_length + data.block_descriptor_length;
 
 		if (offset >= SD_BUF_SIZE - 2) {
@@ -1387,11 +1382,13 @@ sd_read_cache_type(struct scsi_disk *sdk
 			sdkp->DPOFUA = 0;
 		}
 
-		ct =  sdkp->RCD + 2*sdkp->WCE;
-
-		printk(KERN_NOTICE "SCSI device %s: drive cache: %s%s\n",
-		       diskname, types[ct],
-		       sdkp->DPOFUA ? " w/ FUA" : "");
+		printk(KERN_NOTICE "SCSI device %s: "
+		       "write cache: %s, read cache: %s, %s\n",
+		       diskname,
+		       sdkp->WCE ? "enabled" : "disabled",
+		       sdkp->RCD ? "disabled" : "enabled",
+		       sdkp->DPOFUA ? "supports DPO and FUA"
+		       : "doesn't support DPO or FUA");
 
 		return;
 	}
Signature · 1 line
1.4.3.3.g8478
#1 lore raw

drivers/scsi/sd.c sd_read_cache_type(struct scsi_disk *sdk · line 1391

Quoted 12 lines
drivers/scsi/sd.c +7 -5
-		ct =  sdkp->RCD + 2*sdkp->WCE;
-
-		printk(KERN_NOTICE "SCSI device %s: drive cache: %s%s\n",
-		       diskname, types[ct],
-		       sdkp->DPOFUA ? " w/ FUA" : "");
+		printk(KERN_NOTICE "SCSI device %s: "
+		       "write cache: %s, read cache: %s, %s\n",
+		       diskname,
+		       sdkp->WCE ? "enabled" : "disabled",
+		       sdkp->RCD ? "disabled" : "enabled",
+		       sdkp->DPOFUA ? "supports DPO and FUA"
+		       : "doesn't support DPO or FUA");

Looks good to me.

#2 lore raw
In reply to Luben Tuikov
Quoted 6 lines · Luben Tuikov
---
 drivers/scsi/sd.c |   17 +++++++----------
 1 files changed, 7 insertions(+), 10 deletions(-)

This patch is 8 months old.

Um:

patching file drivers/scsi/sd.c
Hunk #1 FAILED at 1354.
Hunk #2 FAILED at 1382.
2 out of 2 hunks FAILED -- saving rejects to file drivers/scsi/sd.c.rej

I think the code you're trying to change has altered a bit in the latest kernels.

James

#3 lore raw
Quoted 10 lines · --- James Bottomley
Quoted 6 lines · Luben Tuikov
---
 drivers/scsi/sd.c |   17 +++++++----------
 1 files changed, 7 insertions(+), 10 deletions(-)

This patch is 8 months old.

Um:

Quoted 7 lines

patching file drivers/scsi/sd.c
Hunk #1 FAILED at 1354.
Hunk #2 FAILED at 1382.
2 out of 2 hunks FAILED -- saving rejects to file drivers/scsi/sd.c.rej

I think the code you're trying to change has altered a bit in the latest kernels.

Re-based:

---

 drivers/scsi/sd.c |   13 +++++++------
 1 files changed, 7 insertions(+), 6 deletions(-)
drivers/scsi/sd.c +7 -6
index 84ff203..ffbd021 100644
@@ -1467,7 +1467,6 @@ sd_read_cache_type(struct scsi_disk *sdk
        res = sd_do_mode_sense(sdp, dbd, modepage, buffer, len, &data, &sshdr);
 
        if (scsi_status_is_good(res)) {
-               int ct = 0;
                int offset = data.header_length + data.block_descriptor_length;
 
                if (offset >= SD_BUF_SIZE - 2) {
@@ -1496,11 +1495,13 @@ sd_read_cache_type(struct scsi_disk *sdk
                        sdkp->DPOFUA = 0;
                }
 
-               ct =  sdkp->RCD + 2*sdkp->WCE;
-
-               printk(KERN_NOTICE "SCSI device %s: drive cache: %s%s\n",
-                      diskname, sd_cache_types[ct],
-                      sdkp->DPOFUA ? " w/ FUA" : "");
+               printk(KERN_NOTICE "SCSI device %s: "
+                      "write cache: %s, read cache: %s, %s\n",
+                      diskname,
+                      sdkp->WCE ? "enabled" : "disabled",
+                      sdkp->RCD ? "disabled" : "enabled",
+                      sdkp->DPOFUA ? "supports DPO and FUA"
+                      : "doesn't support DPO or FUA");
 
                return;
        }
#4 lore raw
Quoted 15 lines · Luben Tuikov
Quoted 14 lines · --- James Bottomley
Quoted 6 lines · Luben Tuikov
---
 drivers/scsi/sd.c |   17 +++++++----------
 1 files changed, 7 insertions(+), 10 deletions(-)

This patch is 8 months old.

Um:

patching file drivers/scsi/sd.c
Hunk #1 FAILED at 1354.
Hunk #2 FAILED at 1382.
2 out of 2 hunks FAILED -- saving rejects to file drivers/scsi/sd.c.rej

Quoted 6 lines
Quoted 2 lines

I think the code you're trying to change has altered a bit in the latest kernels.

Re-based:

ACK

#5 lore raw
In reply to Luben Tuikov
Quoted 1 line · Luben Tuikov

Re-based:

Thanks,

If you want to go the whole hog on this one, we probably also need WCE and RCD files (taking 1 or 0) for the scsi_disk class and a date in the feature removal file for dumping the cache_type file.

James

#6 lore raw
In reply to Luben Tuikov
Quoted 47 lines · Luben Tuikov
Quoted 9 lines · --- James Bottomley
Quoted 6 lines · Luben Tuikov
---
 drivers/scsi/sd.c |   17 +++++++----------
 1 files changed, 7 insertions(+), 10 deletions(-)

This patch is 8 months old.

Um:

Quoted 7 lines

patching file drivers/scsi/sd.c
Hunk #1 FAILED at 1354.
Hunk #2 FAILED at 1382.
2 out of 2 hunks FAILED -- saving rejects to file drivers/scsi/sd.c.rej

I think the code you're trying to change has altered a bit in the latest kernels.

Re-based:

---

 drivers/scsi/sd.c |   13 +++++++------
 1 files changed, 7 insertions(+), 6 deletions(-)
drivers/scsi/sd.c +0 -6
index 84ff203..ffbd021 100644
@@ -1467,7 +1467,6 @@ sd_read_cache_type(struct scsi_disk *sdk
        res = sd_do_mode_sense(sdp, dbd, modepage, buffer, len, &data, &sshdr);
 
        if (scsi_status_is_good(res)) {
-               int ct = 0;
                int offset = data.header_length + data.block_descriptor_length;
 
                if (offset >= SD_BUF_SIZE - 2) {
@@ -1496,11 +1495,13 @@ sd_read_cache_type(struct scsi_disk *sdk
                        sdkp->DPOFUA = 0;
                }
 
-               ct =  sdkp->RCD + 2*sdkp->WCE;
-
-               printk(KERN_NOTICE "SCSI device %s: drive cache: %s%s\n",
-                      diskname, sd_cache_types[ct],
-                      sdkp->DPOFUA ? " w/ FUA" : "");

drivers/scsi/sd.c sd_read_cache_type(struct scsi_disk *sdk · line 1507

Quoted 10 lines
drivers/scsi/sd.c +7 -0
+               printk(KERN_NOTICE "SCSI device %s: "
+                      "write cache: %s, read cache: %s, %s\n",
+                      diskname,
+                      sdkp->WCE ? "enabled" : "disabled",
+                      sdkp->RCD ? "disabled" : "enabled",
+                      sdkp->DPOFUA ? "supports DPO and FUA"
+                      : "doesn't support DPO or FUA");
 
                return;
        }

The definition of the DPOFUA flag (in the block descriptor returned by MODE SENSE for direct access devices) is a bit fuzzy in practice. When I queried the t10 reflector a member from a disk company said it should be interpreted as ... we support DPO and/or FUA.

I also noticed that one disk manufacturer's unit attention mode page had a bit to disable FUA (force unit access). So you can set the FUA bit (in a READ or WRITE), we will ignore it! The associated note says that it improves performance :-)

Doug Gilbert

#8 lore raw
Quoted 7 lines · --- James Bottomley
Quoted 3 lines · Luben Tuikov

Re-based:

It still won't apply ... this time it looks like a mailer tab->space conversion problem.

Attached.

Luben

drivers/scsi/sd.c +7 -6
index 84ff203..ffbd021 100644
@@ -1467,7 +1467,6 @@ sd_read_cache_type(struct scsi_disk *sdk
 	res = sd_do_mode_sense(sdp, dbd, modepage, buffer, len, &data, &sshdr);
 
 	if (scsi_status_is_good(res)) {
-		int ct = 0;
 		int offset = data.header_length + data.block_descriptor_length;
 
 		if (offset >= SD_BUF_SIZE - 2) {
@@ -1496,11 +1495,13 @@ sd_read_cache_type(struct scsi_disk *sdk
 			sdkp->DPOFUA = 0;
 		}
 
-		ct =  sdkp->RCD + 2*sdkp->WCE;
-
-		printk(KERN_NOTICE "SCSI device %s: drive cache: %s%s\n",
-		       diskname, sd_cache_types[ct],
-		       sdkp->DPOFUA ? " w/ FUA" : "");
+		printk(KERN_NOTICE "SCSI device %s: "
+		       "write cache: %s, read cache: %s, %s\n",
+		       diskname,
+		       sdkp->WCE ? "enabled" : "disabled",
+		       sdkp->RCD ? "disabled" : "enabled",
+		       sdkp->DPOFUA ? "supports DPO and FUA"
+		       : "doesn't support DPO or FUA");
 
 		return;
 	}