]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
[SCSI] sd: Make revalidate less chatty
authorMartin K. Petersen <martin.petersen@oracle.com>
Mon, 9 Mar 2009 15:33:31 +0000 (11:33 -0400)
committerJames Bottomley <James.Bottomley@HansenPartnership.com>
Wed, 18 Mar 2009 01:43:52 +0000 (21:43 -0400)
sd_revalidate ends up being called several times during device setup.
With this patch we print everything during the first scan.  Subsequent
invocations will only print a message if the parameter in question has
actually changed (LUN capacity has increased, etc.).

Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
drivers/scsi/sd.c
drivers/scsi/sd.h

index 8eebaa8c6f524f5a60d615ca18973965d387f82c..aeab5d9dff27bd316a82d45eb55bf1010d510158 100644 (file)
@@ -1440,6 +1440,7 @@ sd_read_capacity(struct scsi_disk *sdkp, unsigned char *buffer)
 {
        int sector_size;
        struct scsi_device *sdp = sdkp->device;
+       sector_t old_capacity = sdkp->capacity;
 
        if (sd_try_rc16_first(sdp)) {
                sector_size = read_capacity_16(sdkp, sdp, buffer);
@@ -1531,10 +1532,11 @@ got_data:
                string_get_size(sz, STRING_UNITS_10, cap_str_10,
                                sizeof(cap_str_10));
 
-               sd_printk(KERN_NOTICE, sdkp,
-                         "%llu %d-byte hardware sectors: (%s/%s)\n",
-                         (unsigned long long)sdkp->capacity,
-                         sector_size, cap_str_10, cap_str_2);
+               if (sdkp->first_scan || old_capacity != sdkp->capacity)
+                       sd_printk(KERN_NOTICE, sdkp,
+                                 "%llu %d-byte hardware sectors: (%s/%s)\n",
+                                 (unsigned long long)sdkp->capacity,
+                                 sector_size, cap_str_10, cap_str_2);
        }
 
        /* Rescale capacity to 512-byte units */
@@ -1571,6 +1573,7 @@ sd_read_write_protect_flag(struct scsi_disk *sdkp, unsigned char *buffer)
        int res;
        struct scsi_device *sdp = sdkp->device;
        struct scsi_mode_data data;
+       int old_wp = sdkp->write_prot;
 
        set_disk_ro(sdkp->disk, 0);
        if (sdp->skip_ms_page_3f) {
@@ -1611,11 +1614,13 @@ sd_read_write_protect_flag(struct scsi_disk *sdkp, unsigned char *buffer)
        } else {
                sdkp->write_prot = ((data.device_specific & 0x80) != 0);
                set_disk_ro(sdkp->disk, sdkp->write_prot);
-               sd_printk(KERN_NOTICE, sdkp, "Write Protect is %s\n",
-                         sdkp->write_prot ? "on" : "off");
-               sd_printk(KERN_DEBUG, sdkp,
-                         "Mode Sense: %02x %02x %02x %02x\n",
-                         buffer[0], buffer[1], buffer[2], buffer[3]);
+               if (sdkp->first_scan || old_wp != sdkp->write_prot) {
+                       sd_printk(KERN_NOTICE, sdkp, "Write Protect is %s\n",
+                                 sdkp->write_prot ? "on" : "off");
+                       sd_printk(KERN_DEBUG, sdkp,
+                                 "Mode Sense: %02x %02x %02x %02x\n",
+                                 buffer[0], buffer[1], buffer[2], buffer[3]);
+               }
        }
 }
 
@@ -1633,6 +1638,9 @@ sd_read_cache_type(struct scsi_disk *sdkp, unsigned char *buffer)
        int modepage;
        struct scsi_mode_data data;
        struct scsi_sense_hdr sshdr;
+       int old_wce = sdkp->WCE;
+       int old_rcd = sdkp->RCD;
+       int old_dpofua = sdkp->DPOFUA;
 
        if (sdp->skip_ms_page_8)
                goto defaults;
@@ -1704,12 +1712,14 @@ sd_read_cache_type(struct scsi_disk *sdkp, unsigned char *buffer)
                        sdkp->DPOFUA = 0;
                }
 
-               sd_printk(KERN_NOTICE, sdkp,
-                      "Write cache: %s, read cache: %s, %s\n",
-                      sdkp->WCE ? "enabled" : "disabled",
-                      sdkp->RCD ? "disabled" : "enabled",
-                      sdkp->DPOFUA ? "supports DPO and FUA"
-                      : "doesn't support DPO or FUA");
+               if (sdkp->first_scan || old_wce != sdkp->WCE ||
+                   old_rcd != sdkp->RCD || old_dpofua != sdkp->DPOFUA)
+                       sd_printk(KERN_NOTICE, sdkp,
+                                 "Write cache: %s, read cache: %s, %s\n",
+                                 sdkp->WCE ? "enabled" : "disabled",
+                                 sdkp->RCD ? "disabled" : "enabled",
+                                 sdkp->DPOFUA ? "supports DPO and FUA"
+                                 : "doesn't support DPO or FUA");
 
                return;
        }
@@ -1805,15 +1815,6 @@ static int sd_revalidate_disk(struct gendisk *disk)
                goto out;
        }
 
-       /* defaults, until the device tells us otherwise */
-       sdp->sector_size = 512;
-       sdkp->capacity = 0;
-       sdkp->media_present = 1;
-       sdkp->write_prot = 0;
-       sdkp->WCE = 0;
-       sdkp->RCD = 0;
-       sdkp->ATO = 0;
-
        sd_spinup_disk(sdkp);
 
        /*
@@ -1827,6 +1828,8 @@ static int sd_revalidate_disk(struct gendisk *disk)
                sd_read_app_tag_own(sdkp, buffer);
        }
 
+       sdkp->first_scan = 0;
+
        /*
         * We now have all cache related info, determine how we deal
         * with ordered requests.  Note that as the current SCSI
@@ -1937,6 +1940,16 @@ static void sd_probe_async(void *data, async_cookie_t cookie)
        gd->private_data = &sdkp->driver;
        gd->queue = sdkp->device->request_queue;
 
+       /* defaults, until the device tells us otherwise */
+       sdp->sector_size = 512;
+       sdkp->capacity = 0;
+       sdkp->media_present = 1;
+       sdkp->write_prot = 0;
+       sdkp->WCE = 0;
+       sdkp->RCD = 0;
+       sdkp->ATO = 0;
+       sdkp->first_scan = 1;
+
        sd_revalidate_disk(gd);
 
        blk_queue_prep_rq(sdp->request_queue, sd_prep_fn);
index 75638e7d3f66d37c90ff2de875e345b7d98b0d8e..708778cf5f0683d9cdd181d483241e80b96b2107 100644 (file)
@@ -53,6 +53,7 @@ struct scsi_disk {
        unsigned        WCE : 1;        /* state of disk WCE bit */
        unsigned        RCD : 1;        /* state of disk RCD bit, unused */
        unsigned        DPOFUA : 1;     /* state of disk DPOFUA bit */
+       unsigned        first_scan : 1;
 };
 #define to_scsi_disk(obj) container_of(obj,struct scsi_disk,dev)