libata-eh: Use switch() instead of sparse array for protocol strings
authorGeert Uytterhoeven <geert@linux-m68k.org>
Mon, 9 Jan 2017 14:49:28 +0000 (15:49 +0100)
committerTejun Heo <tj@kernel.org>
Mon, 9 Jan 2017 15:22:21 +0000 (10:22 -0500)
Replace the sparse 256-pointer array for looking up protocol strings by
a switch() statement to reduce kernel size.

According to bloat-o-meter, this saves 910 bytes on m68k (32-bit), and
1892 bytes on arm64 (64-bit).

Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Tejun Heo <tj@kernel.org>
drivers/ata/libata-eh.c

index 0e1ec37..e7196fc 100644 (file)
@@ -2606,21 +2606,39 @@ static void ata_eh_link_report(struct ata_link *link)
                                [DMA_TO_DEVICE]         = "out",
                                [DMA_FROM_DEVICE]       = "in",
                        };
-                       static const char *prot_str[] = {
-                               [ATA_PROT_UNKNOWN]      = "unknown",
-                               [ATA_PROT_NODATA]       = "nodata",
-                               [ATA_PROT_PIO]          = "pio",
-                               [ATA_PROT_DMA]          = "dma",
-                               [ATA_PROT_NCQ]          = "ncq dma",
-                               [ATA_PROT_NCQ_NODATA]   = "ncq nodata",
-                               [ATAPI_PROT_NODATA]     = "nodata",
-                               [ATAPI_PROT_PIO]        = "pio",
-                               [ATAPI_PROT_DMA]        = "dma",
-                       };
+                       const char *prot_str = NULL;
 
+                       switch (qc->tf.protocol) {
+                       case ATA_PROT_UNKNOWN:
+                               prot_str = "unknown";
+                               break;
+                       case ATA_PROT_NODATA:
+                               prot_str = "nodata";
+                               break;
+                       case ATA_PROT_PIO:
+                               prot_str = "pio";
+                               break;
+                       case ATA_PROT_DMA:
+                               prot_str = "dma";
+                               break;
+                       case ATA_PROT_NCQ:
+                               prot_str = "ncq dma";
+                               break;
+                       case ATA_PROT_NCQ_NODATA:
+                               prot_str = "ncq nodata";
+                               break;
+                       case ATAPI_PROT_NODATA:
+                               prot_str = "nodata";
+                               break;
+                       case ATAPI_PROT_PIO:
+                               prot_str = "pio";
+                               break;
+                       case ATAPI_PROT_DMA:
+                               prot_str = "dma";
+                               break;
+                       }
                        snprintf(data_buf, sizeof(data_buf), " %s %u %s",
-                                prot_str[qc->tf.protocol], qc->nbytes,
-                                dma_str[qc->dma_dir]);
+                                prot_str, qc->nbytes, dma_str[qc->dma_dir]);
                }
 
                if (ata_is_atapi(qc->tf.protocol)) {