Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

megaraid: Don't use create_proc_read_entry()

Don't use create_proc_read_entry() as that is deprecated, but rather use
proc_create_data() and seq_file instead.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Neela Syam Kolli <megaraidlinux@lsi.com>
cc: James E.J. Bottomley <JBottomley@parallels.com>
cc: linux-scsi@vger.kernel.org
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

authored by

David Howells and committed by
Al Viro
c7f079ca 6bbefe86

+382 -675
+382 -658
drivers/scsi/megaraid.c
··· 39 39 #include <linux/completion.h> 40 40 #include <linux/delay.h> 41 41 #include <linux/proc_fs.h> 42 + #include <linux/seq_file.h> 42 43 #include <linux/reboot.h> 43 44 #include <linux/module.h> 44 45 #include <linux/list.h> ··· 2070 2069 #ifdef CONFIG_PROC_FS 2071 2070 /* Following code handles /proc fs */ 2072 2071 2073 - #define CREATE_READ_PROC(string, func) create_proc_read_entry(string, \ 2074 - S_IRUSR | S_IFREG, \ 2075 - controller_proc_dir_entry, \ 2076 - func, adapter) 2077 - 2078 2072 /** 2079 - * mega_create_proc_entry() 2080 - * @index - index in soft state array 2081 - * @parent - parent node for this /proc entry 2082 - * 2083 - * Creates /proc entries for our controllers. 2084 - */ 2085 - static void 2086 - mega_create_proc_entry(int index, struct proc_dir_entry *parent) 2087 - { 2088 - struct proc_dir_entry *controller_proc_dir_entry = NULL; 2089 - u8 string[64] = { 0 }; 2090 - adapter_t *adapter = hba_soft_state[index]; 2091 - 2092 - sprintf(string, "hba%d", adapter->host->host_no); 2093 - 2094 - controller_proc_dir_entry = 2095 - adapter->controller_proc_dir_entry = proc_mkdir(string, parent); 2096 - 2097 - if(!controller_proc_dir_entry) { 2098 - printk(KERN_WARNING "\nmegaraid: proc_mkdir failed\n"); 2099 - return; 2100 - } 2101 - adapter->proc_read = CREATE_READ_PROC("config", proc_read_config); 2102 - adapter->proc_stat = CREATE_READ_PROC("stat", proc_read_stat); 2103 - adapter->proc_mbox = CREATE_READ_PROC("mailbox", proc_read_mbox); 2104 - #if MEGA_HAVE_ENH_PROC 2105 - adapter->proc_rr = CREATE_READ_PROC("rebuild-rate", proc_rebuild_rate); 2106 - adapter->proc_battery = CREATE_READ_PROC("battery-status", 2107 - proc_battery); 2108 - 2109 - /* 2110 - * Display each physical drive on its channel 2111 - */ 2112 - adapter->proc_pdrvstat[0] = CREATE_READ_PROC("diskdrives-ch0", 2113 - proc_pdrv_ch0); 2114 - adapter->proc_pdrvstat[1] = CREATE_READ_PROC("diskdrives-ch1", 2115 - proc_pdrv_ch1); 2116 - adapter->proc_pdrvstat[2] = CREATE_READ_PROC("diskdrives-ch2", 2117 - proc_pdrv_ch2); 2118 - adapter->proc_pdrvstat[3] = CREATE_READ_PROC("diskdrives-ch3", 2119 - proc_pdrv_ch3); 2120 - 2121 - /* 2122 - * Display a set of up to 10 logical drive through each of following 2123 - * /proc entries 2124 - */ 2125 - adapter->proc_rdrvstat[0] = CREATE_READ_PROC("raiddrives-0-9", 2126 - proc_rdrv_10); 2127 - adapter->proc_rdrvstat[1] = CREATE_READ_PROC("raiddrives-10-19", 2128 - proc_rdrv_20); 2129 - adapter->proc_rdrvstat[2] = CREATE_READ_PROC("raiddrives-20-29", 2130 - proc_rdrv_30); 2131 - adapter->proc_rdrvstat[3] = CREATE_READ_PROC("raiddrives-30-39", 2132 - proc_rdrv_40); 2133 - #endif 2134 - } 2135 - 2136 - 2137 - /** 2138 - * proc_read_config() 2139 - * @page - buffer to write the data in 2140 - * @start - where the actual data has been written in page 2141 - * @offset - same meaning as the read system call 2142 - * @count - same meaning as the read system call 2143 - * @eof - set if no more data needs to be returned 2144 - * @data - pointer to our soft state 2073 + * proc_show_config() 2074 + * @m - Synthetic file construction data 2075 + * @v - File iterator 2145 2076 * 2146 2077 * Display configuration information about the controller. 2147 2078 */ 2148 2079 static int 2149 - proc_read_config(char *page, char **start, off_t offset, int count, int *eof, 2150 - void *data) 2080 + proc_show_config(struct seq_file *m, void *v) 2151 2081 { 2152 2082 2153 - adapter_t *adapter = (adapter_t *)data; 2154 - int len = 0; 2083 + adapter_t *adapter = m->private; 2155 2084 2156 - len += sprintf(page+len, "%s", MEGARAID_VERSION); 2157 - 2085 + seq_puts(m, MEGARAID_VERSION); 2158 2086 if(adapter->product_info.product_name[0]) 2159 - len += sprintf(page+len, "%s\n", 2160 - adapter->product_info.product_name); 2087 + seq_printf(m, "%s\n", adapter->product_info.product_name); 2161 2088 2162 - len += sprintf(page+len, "Controller Type: "); 2089 + seq_puts(m, "Controller Type: "); 2163 2090 2164 - if( adapter->flag & BOARD_MEMMAP ) { 2165 - len += sprintf(page+len, 2166 - "438/466/467/471/493/518/520/531/532\n"); 2167 - } 2168 - else { 2169 - len += sprintf(page+len, 2170 - "418/428/434\n"); 2171 - } 2091 + if( adapter->flag & BOARD_MEMMAP ) 2092 + seq_puts(m, "438/466/467/471/493/518/520/531/532\n"); 2093 + else 2094 + seq_puts(m, "418/428/434\n"); 2172 2095 2173 - if(adapter->flag & BOARD_40LD) { 2174 - len += sprintf(page+len, 2175 - "Controller Supports 40 Logical Drives\n"); 2176 - } 2096 + if(adapter->flag & BOARD_40LD) 2097 + seq_puts(m, "Controller Supports 40 Logical Drives\n"); 2177 2098 2178 - if(adapter->flag & BOARD_64BIT) { 2179 - len += sprintf(page+len, 2180 - "Controller capable of 64-bit memory addressing\n"); 2181 - } 2182 - if( adapter->has_64bit_addr ) { 2183 - len += sprintf(page+len, 2184 - "Controller using 64-bit memory addressing\n"); 2185 - } 2186 - else { 2187 - len += sprintf(page+len, 2188 - "Controller is not using 64-bit memory addressing\n"); 2189 - } 2099 + if(adapter->flag & BOARD_64BIT) 2100 + seq_puts(m, "Controller capable of 64-bit memory addressing\n"); 2101 + if( adapter->has_64bit_addr ) 2102 + seq_puts(m, "Controller using 64-bit memory addressing\n"); 2103 + else 2104 + seq_puts(m, "Controller is not using 64-bit memory addressing\n"); 2190 2105 2191 - len += sprintf(page+len, "Base = %08lx, Irq = %d, ", adapter->base, 2192 - adapter->host->irq); 2106 + seq_printf(m, "Base = %08lx, Irq = %d, ", 2107 + adapter->base, adapter->host->irq); 2193 2108 2194 - len += sprintf(page+len, "Logical Drives = %d, Channels = %d\n", 2195 - adapter->numldrv, adapter->product_info.nchannels); 2109 + seq_printf(m, "Logical Drives = %d, Channels = %d\n", 2110 + adapter->numldrv, adapter->product_info.nchannels); 2196 2111 2197 - len += sprintf(page+len, "Version =%s:%s, DRAM = %dMb\n", 2198 - adapter->fw_version, adapter->bios_version, 2199 - adapter->product_info.dram_size); 2112 + seq_printf(m, "Version =%s:%s, DRAM = %dMb\n", 2113 + adapter->fw_version, adapter->bios_version, 2114 + adapter->product_info.dram_size); 2200 2115 2201 - len += sprintf(page+len, 2202 - "Controller Queue Depth = %d, Driver Queue Depth = %d\n", 2203 - adapter->product_info.max_commands, adapter->max_cmds); 2116 + seq_printf(m, "Controller Queue Depth = %d, Driver Queue Depth = %d\n", 2117 + adapter->product_info.max_commands, adapter->max_cmds); 2204 2118 2205 - len += sprintf(page+len, "support_ext_cdb = %d\n", 2206 - adapter->support_ext_cdb); 2207 - len += sprintf(page+len, "support_random_del = %d\n", 2208 - adapter->support_random_del); 2209 - len += sprintf(page+len, "boot_ldrv_enabled = %d\n", 2210 - adapter->boot_ldrv_enabled); 2211 - len += sprintf(page+len, "boot_ldrv = %d\n", 2212 - adapter->boot_ldrv); 2213 - len += sprintf(page+len, "boot_pdrv_enabled = %d\n", 2214 - adapter->boot_pdrv_enabled); 2215 - len += sprintf(page+len, "boot_pdrv_ch = %d\n", 2216 - adapter->boot_pdrv_ch); 2217 - len += sprintf(page+len, "boot_pdrv_tgt = %d\n", 2218 - adapter->boot_pdrv_tgt); 2219 - len += sprintf(page+len, "quiescent = %d\n", 2220 - atomic_read(&adapter->quiescent)); 2221 - len += sprintf(page+len, "has_cluster = %d\n", 2222 - adapter->has_cluster); 2119 + seq_printf(m, "support_ext_cdb = %d\n", adapter->support_ext_cdb); 2120 + seq_printf(m, "support_random_del = %d\n", adapter->support_random_del); 2121 + seq_printf(m, "boot_ldrv_enabled = %d\n", adapter->boot_ldrv_enabled); 2122 + seq_printf(m, "boot_ldrv = %d\n", adapter->boot_ldrv); 2123 + seq_printf(m, "boot_pdrv_enabled = %d\n", adapter->boot_pdrv_enabled); 2124 + seq_printf(m, "boot_pdrv_ch = %d\n", adapter->boot_pdrv_ch); 2125 + seq_printf(m, "boot_pdrv_tgt = %d\n", adapter->boot_pdrv_tgt); 2126 + seq_printf(m, "quiescent = %d\n", 2127 + atomic_read(&adapter->quiescent)); 2128 + seq_printf(m, "has_cluster = %d\n", adapter->has_cluster); 2223 2129 2224 - len += sprintf(page+len, "\nModule Parameters:\n"); 2225 - len += sprintf(page+len, "max_cmd_per_lun = %d\n", 2226 - max_cmd_per_lun); 2227 - len += sprintf(page+len, "max_sectors_per_io = %d\n", 2228 - max_sectors_per_io); 2229 - 2230 - *eof = 1; 2231 - 2232 - return len; 2130 + seq_puts(m, "\nModule Parameters:\n"); 2131 + seq_printf(m, "max_cmd_per_lun = %d\n", max_cmd_per_lun); 2132 + seq_printf(m, "max_sectors_per_io = %d\n", max_sectors_per_io); 2133 + return 0; 2233 2134 } 2234 2135 2235 - 2236 - 2237 2136 /** 2238 - * proc_read_stat() 2239 - * @page - buffer to write the data in 2240 - * @start - where the actual data has been written in page 2241 - * @offset - same meaning as the read system call 2242 - * @count - same meaning as the read system call 2243 - * @eof - set if no more data needs to be returned 2244 - * @data - pointer to our soft state 2137 + * proc_show_stat() 2138 + * @m - Synthetic file construction data 2139 + * @v - File iterator 2245 2140 * 2246 - * Diaplay statistical information about the I/O activity. 2141 + * Display statistical information about the I/O activity. 2247 2142 */ 2248 2143 static int 2249 - proc_read_stat(char *page, char **start, off_t offset, int count, int *eof, 2250 - void *data) 2144 + proc_show_stat(struct seq_file *m, void *v) 2251 2145 { 2252 - adapter_t *adapter; 2253 - int len; 2254 - int i; 2255 - 2256 - i = 0; /* avoid compilation warnings */ 2257 - len = 0; 2258 - adapter = (adapter_t *)data; 2259 - 2260 - len = sprintf(page, "Statistical Information for this controller\n"); 2261 - len += sprintf(page+len, "pend_cmds = %d\n", 2262 - atomic_read(&adapter->pend_cmds)); 2146 + adapter_t *adapter = m->private; 2263 2147 #if MEGA_HAVE_STATS 2264 - for(i = 0; i < adapter->numldrv; i++) { 2265 - len += sprintf(page+len, "Logical Drive %d:\n", i); 2266 - 2267 - len += sprintf(page+len, 2268 - "\tReads Issued = %lu, Writes Issued = %lu\n", 2269 - adapter->nreads[i], adapter->nwrites[i]); 2270 - 2271 - len += sprintf(page+len, 2272 - "\tSectors Read = %lu, Sectors Written = %lu\n", 2273 - adapter->nreadblocks[i], adapter->nwriteblocks[i]); 2274 - 2275 - len += sprintf(page+len, 2276 - "\tRead errors = %lu, Write errors = %lu\n\n", 2277 - adapter->rd_errors[i], adapter->wr_errors[i]); 2278 - } 2279 - #else 2280 - len += sprintf(page+len, 2281 - "IO and error counters not compiled in driver.\n"); 2148 + int i; 2282 2149 #endif 2283 2150 2284 - *eof = 1; 2285 - 2286 - return len; 2151 + seq_puts(m, "Statistical Information for this controller\n"); 2152 + seq_printf(m, "pend_cmds = %d\n", atomic_read(&adapter->pend_cmds)); 2153 + #if MEGA_HAVE_STATS 2154 + for(i = 0; i < adapter->numldrv; i++) { 2155 + seq_printf(m, "Logical Drive %d:\n", i); 2156 + seq_printf(m, "\tReads Issued = %lu, Writes Issued = %lu\n", 2157 + adapter->nreads[i], adapter->nwrites[i]); 2158 + seq_printf(m, "\tSectors Read = %lu, Sectors Written = %lu\n", 2159 + adapter->nreadblocks[i], adapter->nwriteblocks[i]); 2160 + seq_printf(m, "\tRead errors = %lu, Write errors = %lu\n\n", 2161 + adapter->rd_errors[i], adapter->wr_errors[i]); 2162 + } 2163 + #else 2164 + seq_puts(m, "IO and error counters not compiled in driver.\n"); 2165 + #endif 2166 + return 0; 2287 2167 } 2288 2168 2289 2169 2290 2170 /** 2291 - * proc_read_mbox() 2292 - * @page - buffer to write the data in 2293 - * @start - where the actual data has been written in page 2294 - * @offset - same meaning as the read system call 2295 - * @count - same meaning as the read system call 2296 - * @eof - set if no more data needs to be returned 2297 - * @data - pointer to our soft state 2171 + * proc_show_mbox() 2172 + * @m - Synthetic file construction data 2173 + * @v - File iterator 2298 2174 * 2299 2175 * Display mailbox information for the last command issued. This information 2300 2176 * is good for debugging. 2301 2177 */ 2302 2178 static int 2303 - proc_read_mbox(char *page, char **start, off_t offset, int count, int *eof, 2304 - void *data) 2179 + proc_show_mbox(struct seq_file *m, void *v) 2305 2180 { 2306 - 2307 - adapter_t *adapter = (adapter_t *)data; 2181 + adapter_t *adapter = m->private; 2308 2182 volatile mbox_t *mbox = adapter->mbox; 2309 - int len = 0; 2310 2183 2311 - len = sprintf(page, "Contents of Mail Box Structure\n"); 2312 - len += sprintf(page+len, " Fw Command = 0x%02x\n", 2313 - mbox->m_out.cmd); 2314 - len += sprintf(page+len, " Cmd Sequence = 0x%02x\n", 2315 - mbox->m_out.cmdid); 2316 - len += sprintf(page+len, " No of Sectors= %04d\n", 2317 - mbox->m_out.numsectors); 2318 - len += sprintf(page+len, " LBA = 0x%02x\n", 2319 - mbox->m_out.lba); 2320 - len += sprintf(page+len, " DTA = 0x%08x\n", 2321 - mbox->m_out.xferaddr); 2322 - len += sprintf(page+len, " Logical Drive= 0x%02x\n", 2323 - mbox->m_out.logdrv); 2324 - len += sprintf(page+len, " No of SG Elmt= 0x%02x\n", 2325 - mbox->m_out.numsgelements); 2326 - len += sprintf(page+len, " Busy = %01x\n", 2327 - mbox->m_in.busy); 2328 - len += sprintf(page+len, " Status = 0x%02x\n", 2329 - mbox->m_in.status); 2330 - 2331 - *eof = 1; 2332 - 2333 - return len; 2184 + seq_puts(m, "Contents of Mail Box Structure\n"); 2185 + seq_printf(m, " Fw Command = 0x%02x\n", mbox->m_out.cmd); 2186 + seq_printf(m, " Cmd Sequence = 0x%02x\n", mbox->m_out.cmdid); 2187 + seq_printf(m, " No of Sectors= %04d\n", mbox->m_out.numsectors); 2188 + seq_printf(m, " LBA = 0x%02x\n", mbox->m_out.lba); 2189 + seq_printf(m, " DTA = 0x%08x\n", mbox->m_out.xferaddr); 2190 + seq_printf(m, " Logical Drive= 0x%02x\n", mbox->m_out.logdrv); 2191 + seq_printf(m, " No of SG Elmt= 0x%02x\n", mbox->m_out.numsgelements); 2192 + seq_printf(m, " Busy = %01x\n", mbox->m_in.busy); 2193 + seq_printf(m, " Status = 0x%02x\n", mbox->m_in.status); 2194 + return 0; 2334 2195 } 2335 2196 2336 2197 2337 2198 /** 2338 - * proc_rebuild_rate() 2339 - * @page - buffer to write the data in 2340 - * @start - where the actual data has been written in page 2341 - * @offset - same meaning as the read system call 2342 - * @count - same meaning as the read system call 2343 - * @eof - set if no more data needs to be returned 2344 - * @data - pointer to our soft state 2199 + * proc_show_rebuild_rate() 2200 + * @m - Synthetic file construction data 2201 + * @v - File iterator 2345 2202 * 2346 2203 * Display current rebuild rate 2347 2204 */ 2348 2205 static int 2349 - proc_rebuild_rate(char *page, char **start, off_t offset, int count, int *eof, 2350 - void *data) 2206 + proc_show_rebuild_rate(struct seq_file *m, void *v) 2351 2207 { 2352 - adapter_t *adapter = (adapter_t *)data; 2208 + adapter_t *adapter = m->private; 2353 2209 dma_addr_t dma_handle; 2354 2210 caddr_t inquiry; 2355 2211 struct pci_dev *pdev; 2356 - int len = 0; 2357 2212 2358 - if( make_local_pdev(adapter, &pdev) != 0 ) { 2359 - *eof = 1; 2360 - return len; 2361 - } 2213 + if( make_local_pdev(adapter, &pdev) != 0 ) 2214 + return 0; 2362 2215 2363 - if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) { 2364 - free_local_pdev(pdev); 2365 - *eof = 1; 2366 - return len; 2367 - } 2216 + if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) 2217 + goto free_pdev; 2368 2218 2369 2219 if( mega_adapinq(adapter, dma_handle) != 0 ) { 2370 - 2371 - len = sprintf(page, "Adapter inquiry failed.\n"); 2372 - 2220 + seq_puts(m, "Adapter inquiry failed.\n"); 2373 2221 printk(KERN_WARNING "megaraid: inquiry failed.\n"); 2374 - 2375 - mega_free_inquiry(inquiry, dma_handle, pdev); 2376 - 2377 - free_local_pdev(pdev); 2378 - 2379 - *eof = 1; 2380 - 2381 - return len; 2222 + goto free_inquiry; 2382 2223 } 2383 2224 2384 - if( adapter->flag & BOARD_40LD ) { 2385 - len = sprintf(page, "Rebuild Rate: [%d%%]\n", 2386 - ((mega_inquiry3 *)inquiry)->rebuild_rate); 2387 - } 2388 - else { 2389 - len = sprintf(page, "Rebuild Rate: [%d%%]\n", 2225 + if( adapter->flag & BOARD_40LD ) 2226 + seq_printf(m, "Rebuild Rate: [%d%%]\n", 2227 + ((mega_inquiry3 *)inquiry)->rebuild_rate); 2228 + else 2229 + seq_printf(m, "Rebuild Rate: [%d%%]\n", 2390 2230 ((mraid_ext_inquiry *) 2391 - inquiry)->raid_inq.adapter_info.rebuild_rate); 2392 - } 2231 + inquiry)->raid_inq.adapter_info.rebuild_rate); 2393 2232 2394 - 2233 + free_inquiry: 2395 2234 mega_free_inquiry(inquiry, dma_handle, pdev); 2396 - 2235 + free_pdev: 2397 2236 free_local_pdev(pdev); 2398 - 2399 - *eof = 1; 2400 - 2401 - return len; 2237 + return 0; 2402 2238 } 2403 2239 2404 2240 2405 2241 /** 2406 - * proc_battery() 2407 - * @page - buffer to write the data in 2408 - * @start - where the actual data has been written in page 2409 - * @offset - same meaning as the read system call 2410 - * @count - same meaning as the read system call 2411 - * @eof - set if no more data needs to be returned 2412 - * @data - pointer to our soft state 2242 + * proc_show_battery() 2243 + * @m - Synthetic file construction data 2244 + * @v - File iterator 2413 2245 * 2414 2246 * Display information about the battery module on the controller. 2415 2247 */ 2416 2248 static int 2417 - proc_battery(char *page, char **start, off_t offset, int count, int *eof, 2418 - void *data) 2249 + proc_show_battery(struct seq_file *m, void *v) 2419 2250 { 2420 - adapter_t *adapter = (adapter_t *)data; 2251 + adapter_t *adapter = m->private; 2421 2252 dma_addr_t dma_handle; 2422 2253 caddr_t inquiry; 2423 2254 struct pci_dev *pdev; 2424 - u8 battery_status = 0; 2425 - char str[256]; 2426 - int len = 0; 2255 + u8 battery_status; 2427 2256 2428 - if( make_local_pdev(adapter, &pdev) != 0 ) { 2429 - *eof = 1; 2430 - return len; 2431 - } 2257 + if( make_local_pdev(adapter, &pdev) != 0 ) 2258 + return 0; 2432 2259 2433 - if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) { 2434 - free_local_pdev(pdev); 2435 - *eof = 1; 2436 - return len; 2437 - } 2260 + if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) 2261 + goto free_pdev; 2438 2262 2439 2263 if( mega_adapinq(adapter, dma_handle) != 0 ) { 2440 - 2441 - len = sprintf(page, "Adapter inquiry failed.\n"); 2442 - 2264 + seq_printf(m, "Adapter inquiry failed.\n"); 2443 2265 printk(KERN_WARNING "megaraid: inquiry failed.\n"); 2444 - 2445 - mega_free_inquiry(inquiry, dma_handle, pdev); 2446 - 2447 - free_local_pdev(pdev); 2448 - 2449 - *eof = 1; 2450 - 2451 - return len; 2266 + goto free_inquiry; 2452 2267 } 2453 2268 2454 2269 if( adapter->flag & BOARD_40LD ) { ··· 2278 2461 /* 2279 2462 * Decode the battery status 2280 2463 */ 2281 - sprintf(str, "Battery Status:[%d]", battery_status); 2464 + seq_printf(m, "Battery Status:[%d]", battery_status); 2282 2465 2283 2466 if(battery_status == MEGA_BATT_CHARGE_DONE) 2284 - strcat(str, " Charge Done"); 2467 + seq_puts(m, " Charge Done"); 2285 2468 2286 2469 if(battery_status & MEGA_BATT_MODULE_MISSING) 2287 - strcat(str, " Module Missing"); 2470 + seq_puts(m, " Module Missing"); 2288 2471 2289 2472 if(battery_status & MEGA_BATT_LOW_VOLTAGE) 2290 - strcat(str, " Low Voltage"); 2473 + seq_puts(m, " Low Voltage"); 2291 2474 2292 2475 if(battery_status & MEGA_BATT_TEMP_HIGH) 2293 - strcat(str, " Temperature High"); 2476 + seq_puts(m, " Temperature High"); 2294 2477 2295 2478 if(battery_status & MEGA_BATT_PACK_MISSING) 2296 - strcat(str, " Pack Missing"); 2479 + seq_puts(m, " Pack Missing"); 2297 2480 2298 2481 if(battery_status & MEGA_BATT_CHARGE_INPROG) 2299 - strcat(str, " Charge In-progress"); 2482 + seq_puts(m, " Charge In-progress"); 2300 2483 2301 2484 if(battery_status & MEGA_BATT_CHARGE_FAIL) 2302 - strcat(str, " Charge Fail"); 2485 + seq_puts(m, " Charge Fail"); 2303 2486 2304 2487 if(battery_status & MEGA_BATT_CYCLES_EXCEEDED) 2305 - strcat(str, " Cycles Exceeded"); 2488 + seq_puts(m, " Cycles Exceeded"); 2306 2489 2307 - len = sprintf(page, "%s\n", str); 2490 + seq_putc(m, '\n'); 2308 2491 2309 - 2492 + free_inquiry: 2310 2493 mega_free_inquiry(inquiry, dma_handle, pdev); 2311 - 2494 + free_pdev: 2312 2495 free_local_pdev(pdev); 2313 - 2314 - *eof = 1; 2315 - 2316 - return len; 2496 + return 0; 2317 2497 } 2318 2498 2319 2499 2320 - /** 2321 - * proc_pdrv_ch0() 2322 - * @page - buffer to write the data in 2323 - * @start - where the actual data has been written in page 2324 - * @offset - same meaning as the read system call 2325 - * @count - same meaning as the read system call 2326 - * @eof - set if no more data needs to be returned 2327 - * @data - pointer to our soft state 2328 - * 2329 - * Display information about the physical drives on physical channel 0. 2500 + /* 2501 + * Display scsi inquiry 2330 2502 */ 2331 - static int 2332 - proc_pdrv_ch0(char *page, char **start, off_t offset, int count, int *eof, 2333 - void *data) 2503 + static void 2504 + mega_print_inquiry(struct seq_file *m, char *scsi_inq) 2334 2505 { 2335 - adapter_t *adapter = (adapter_t *)data; 2506 + int i; 2336 2507 2337 - *eof = 1; 2508 + seq_puts(m, " Vendor: "); 2509 + seq_write(m, scsi_inq + 8, 8); 2510 + seq_puts(m, " Model: "); 2511 + seq_write(m, scsi_inq + 16, 16); 2512 + seq_puts(m, " Rev: "); 2513 + seq_write(m, scsi_inq + 32, 4); 2514 + seq_putc(m, '\n'); 2338 2515 2339 - return (proc_pdrv(adapter, page, 0)); 2516 + i = scsi_inq[0] & 0x1f; 2517 + seq_printf(m, " Type: %s ", scsi_device_type(i)); 2518 + 2519 + seq_printf(m, " ANSI SCSI revision: %02x", 2520 + scsi_inq[2] & 0x07); 2521 + 2522 + if( (scsi_inq[2] & 0x07) == 1 && (scsi_inq[3] & 0x0f) == 1 ) 2523 + seq_puts(m, " CCS\n"); 2524 + else 2525 + seq_putc(m, '\n'); 2340 2526 } 2341 2527 2342 - 2343 2528 /** 2344 - * proc_pdrv_ch1() 2345 - * @page - buffer to write the data in 2346 - * @start - where the actual data has been written in page 2347 - * @offset - same meaning as the read system call 2348 - * @count - same meaning as the read system call 2349 - * @eof - set if no more data needs to be returned 2350 - * @data - pointer to our soft state 2351 - * 2352 - * Display information about the physical drives on physical channel 1. 2353 - */ 2354 - static int 2355 - proc_pdrv_ch1(char *page, char **start, off_t offset, int count, int *eof, 2356 - void *data) 2357 - { 2358 - adapter_t *adapter = (adapter_t *)data; 2359 - 2360 - *eof = 1; 2361 - 2362 - return (proc_pdrv(adapter, page, 1)); 2363 - } 2364 - 2365 - 2366 - /** 2367 - * proc_pdrv_ch2() 2368 - * @page - buffer to write the data in 2369 - * @start - where the actual data has been written in page 2370 - * @offset - same meaning as the read system call 2371 - * @count - same meaning as the read system call 2372 - * @eof - set if no more data needs to be returned 2373 - * @data - pointer to our soft state 2374 - * 2375 - * Display information about the physical drives on physical channel 2. 2376 - */ 2377 - static int 2378 - proc_pdrv_ch2(char *page, char **start, off_t offset, int count, int *eof, 2379 - void *data) 2380 - { 2381 - adapter_t *adapter = (adapter_t *)data; 2382 - 2383 - *eof = 1; 2384 - 2385 - return (proc_pdrv(adapter, page, 2)); 2386 - } 2387 - 2388 - 2389 - /** 2390 - * proc_pdrv_ch3() 2391 - * @page - buffer to write the data in 2392 - * @start - where the actual data has been written in page 2393 - * @offset - same meaning as the read system call 2394 - * @count - same meaning as the read system call 2395 - * @eof - set if no more data needs to be returned 2396 - * @data - pointer to our soft state 2397 - * 2398 - * Display information about the physical drives on physical channel 3. 2399 - */ 2400 - static int 2401 - proc_pdrv_ch3(char *page, char **start, off_t offset, int count, int *eof, 2402 - void *data) 2403 - { 2404 - adapter_t *adapter = (adapter_t *)data; 2405 - 2406 - *eof = 1; 2407 - 2408 - return (proc_pdrv(adapter, page, 3)); 2409 - } 2410 - 2411 - 2412 - /** 2413 - * proc_pdrv() 2529 + * proc_show_pdrv() 2530 + * @m - Synthetic file construction data 2414 2531 * @page - buffer to write the data in 2415 2532 * @adapter - pointer to our soft state 2416 2533 * 2417 2534 * Display information about the physical drives. 2418 2535 */ 2419 2536 static int 2420 - proc_pdrv(adapter_t *adapter, char *page, int channel) 2537 + proc_show_pdrv(struct seq_file *m, adapter_t *adapter, int channel) 2421 2538 { 2422 2539 dma_addr_t dma_handle; 2423 2540 char *scsi_inq; ··· 2362 2611 u8 state; 2363 2612 int tgt; 2364 2613 int max_channels; 2365 - int len = 0; 2366 - char str[80]; 2367 2614 int i; 2368 2615 2369 - if( make_local_pdev(adapter, &pdev) != 0 ) { 2370 - return len; 2371 - } 2616 + if( make_local_pdev(adapter, &pdev) != 0 ) 2617 + return 0; 2372 2618 2373 - if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) { 2619 + if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) 2374 2620 goto free_pdev; 2375 - } 2376 2621 2377 2622 if( mega_adapinq(adapter, dma_handle) != 0 ) { 2378 - len = sprintf(page, "Adapter inquiry failed.\n"); 2379 - 2623 + seq_puts(m, "Adapter inquiry failed.\n"); 2380 2624 printk(KERN_WARNING "megaraid: inquiry failed.\n"); 2381 - 2382 2625 goto free_inquiry; 2383 2626 } 2384 2627 2385 2628 2386 2629 scsi_inq = pci_alloc_consistent(pdev, 256, &scsi_inq_dma_handle); 2387 - 2388 2630 if( scsi_inq == NULL ) { 2389 - len = sprintf(page, "memory not available for scsi inq.\n"); 2390 - 2631 + seq_puts(m, "memory not available for scsi inq.\n"); 2391 2632 goto free_inquiry; 2392 2633 } 2393 2634 ··· 2402 2659 i = channel*16 + tgt; 2403 2660 2404 2661 state = *(pdrv_state + i); 2405 - 2406 2662 switch( state & 0x0F ) { 2407 - 2408 2663 case PDRV_ONLINE: 2409 - sprintf(str, 2410 - "Channel:%2d Id:%2d State: Online", 2411 - channel, tgt); 2664 + seq_printf(m, "Channel:%2d Id:%2d State: Online", 2665 + channel, tgt); 2412 2666 break; 2413 2667 2414 2668 case PDRV_FAILED: 2415 - sprintf(str, 2416 - "Channel:%2d Id:%2d State: Failed", 2417 - channel, tgt); 2669 + seq_printf(m, "Channel:%2d Id:%2d State: Failed", 2670 + channel, tgt); 2418 2671 break; 2419 2672 2420 2673 case PDRV_RBLD: 2421 - sprintf(str, 2422 - "Channel:%2d Id:%2d State: Rebuild", 2423 - channel, tgt); 2674 + seq_printf(m, "Channel:%2d Id:%2d State: Rebuild", 2675 + channel, tgt); 2424 2676 break; 2425 2677 2426 2678 case PDRV_HOTSPARE: 2427 - sprintf(str, 2428 - "Channel:%2d Id:%2d State: Hot spare", 2429 - channel, tgt); 2679 + seq_printf(m, "Channel:%2d Id:%2d State: Hot spare", 2680 + channel, tgt); 2430 2681 break; 2431 2682 2432 2683 default: 2433 - sprintf(str, 2434 - "Channel:%2d Id:%2d State: Un-configured", 2435 - channel, tgt); 2684 + seq_printf(m, "Channel:%2d Id:%2d State: Un-configured", 2685 + channel, tgt); 2436 2686 break; 2437 - 2438 2687 } 2439 2688 2440 2689 /* ··· 2445 2710 * Check for overflow. We print less than 240 2446 2711 * characters for inquiry 2447 2712 */ 2448 - if( (len + 240) >= PAGE_SIZE ) break; 2449 - 2450 - len += sprintf(page+len, "%s.\n", str); 2451 - 2452 - len += mega_print_inquiry(page+len, scsi_inq); 2713 + seq_puts(m, ".\n"); 2714 + mega_print_inquiry(m, scsi_inq); 2453 2715 } 2454 2716 2455 2717 free_pci: ··· 2455 2723 mega_free_inquiry(inquiry, dma_handle, pdev); 2456 2724 free_pdev: 2457 2725 free_local_pdev(pdev); 2458 - 2459 - return len; 2726 + return 0; 2460 2727 } 2461 - 2462 - 2463 - /* 2464 - * Display scsi inquiry 2465 - */ 2466 - static int 2467 - mega_print_inquiry(char *page, char *scsi_inq) 2468 - { 2469 - int len = 0; 2470 - int i; 2471 - 2472 - len = sprintf(page, " Vendor: "); 2473 - for( i = 8; i < 16; i++ ) { 2474 - len += sprintf(page+len, "%c", scsi_inq[i]); 2475 - } 2476 - 2477 - len += sprintf(page+len, " Model: "); 2478 - 2479 - for( i = 16; i < 32; i++ ) { 2480 - len += sprintf(page+len, "%c", scsi_inq[i]); 2481 - } 2482 - 2483 - len += sprintf(page+len, " Rev: "); 2484 - 2485 - for( i = 32; i < 36; i++ ) { 2486 - len += sprintf(page+len, "%c", scsi_inq[i]); 2487 - } 2488 - 2489 - len += sprintf(page+len, "\n"); 2490 - 2491 - i = scsi_inq[0] & 0x1f; 2492 - 2493 - len += sprintf(page+len, " Type: %s ", scsi_device_type(i)); 2494 - 2495 - len += sprintf(page+len, 2496 - " ANSI SCSI revision: %02x", scsi_inq[2] & 0x07); 2497 - 2498 - if( (scsi_inq[2] & 0x07) == 1 && (scsi_inq[3] & 0x0f) == 1 ) 2499 - len += sprintf(page+len, " CCS\n"); 2500 - else 2501 - len += sprintf(page+len, "\n"); 2502 - 2503 - return len; 2504 - } 2505 - 2506 2728 2507 2729 /** 2508 - * proc_rdrv_10() 2509 - * @page - buffer to write the data in 2510 - * @start - where the actual data has been written in page 2511 - * @offset - same meaning as the read system call 2512 - * @count - same meaning as the read system call 2513 - * @eof - set if no more data needs to be returned 2514 - * @data - pointer to our soft state 2730 + * proc_show_pdrv_ch0() 2731 + * @m - Synthetic file construction data 2732 + * @v - File iterator 2515 2733 * 2516 - * Display real time information about the logical drives 0 through 9. 2734 + * Display information about the physical drives on physical channel 0. 2517 2735 */ 2518 2736 static int 2519 - proc_rdrv_10(char *page, char **start, off_t offset, int count, int *eof, 2520 - void *data) 2737 + proc_show_pdrv_ch0(struct seq_file *m, void *v) 2521 2738 { 2522 - adapter_t *adapter = (adapter_t *)data; 2523 - 2524 - *eof = 1; 2525 - 2526 - return (proc_rdrv(adapter, page, 0, 9)); 2739 + return proc_show_pdrv(m, m->private, 0); 2527 2740 } 2528 2741 2529 2742 2530 2743 /** 2531 - * proc_rdrv_20() 2532 - * @page - buffer to write the data in 2533 - * @start - where the actual data has been written in page 2534 - * @offset - same meaning as the read system call 2535 - * @count - same meaning as the read system call 2536 - * @eof - set if no more data needs to be returned 2537 - * @data - pointer to our soft state 2744 + * proc_show_pdrv_ch1() 2745 + * @m - Synthetic file construction data 2746 + * @v - File iterator 2538 2747 * 2539 - * Display real time information about the logical drives 0 through 9. 2748 + * Display information about the physical drives on physical channel 1. 2540 2749 */ 2541 2750 static int 2542 - proc_rdrv_20(char *page, char **start, off_t offset, int count, int *eof, 2543 - void *data) 2751 + proc_show_pdrv_ch1(struct seq_file *m, void *v) 2544 2752 { 2545 - adapter_t *adapter = (adapter_t *)data; 2546 - 2547 - *eof = 1; 2548 - 2549 - return (proc_rdrv(adapter, page, 10, 19)); 2753 + return proc_show_pdrv(m, m->private, 1); 2550 2754 } 2551 2755 2552 2756 2553 2757 /** 2554 - * proc_rdrv_30() 2555 - * @page - buffer to write the data in 2556 - * @start - where the actual data has been written in page 2557 - * @offset - same meaning as the read system call 2558 - * @count - same meaning as the read system call 2559 - * @eof - set if no more data needs to be returned 2560 - * @data - pointer to our soft state 2758 + * proc_show_pdrv_ch2() 2759 + * @m - Synthetic file construction data 2760 + * @v - File iterator 2561 2761 * 2562 - * Display real time information about the logical drives 0 through 9. 2762 + * Display information about the physical drives on physical channel 2. 2563 2763 */ 2564 2764 static int 2565 - proc_rdrv_30(char *page, char **start, off_t offset, int count, int *eof, 2566 - void *data) 2765 + proc_show_pdrv_ch2(struct seq_file *m, void *v) 2567 2766 { 2568 - adapter_t *adapter = (adapter_t *)data; 2569 - 2570 - *eof = 1; 2571 - 2572 - return (proc_rdrv(adapter, page, 20, 29)); 2767 + return proc_show_pdrv(m, m->private, 2); 2573 2768 } 2574 2769 2575 2770 2576 2771 /** 2577 - * proc_rdrv_40() 2578 - * @page - buffer to write the data in 2579 - * @start - where the actual data has been written in page 2580 - * @offset - same meaning as the read system call 2581 - * @count - same meaning as the read system call 2582 - * @eof - set if no more data needs to be returned 2583 - * @data - pointer to our soft state 2772 + * proc_show_pdrv_ch3() 2773 + * @m - Synthetic file construction data 2774 + * @v - File iterator 2584 2775 * 2585 - * Display real time information about the logical drives 0 through 9. 2776 + * Display information about the physical drives on physical channel 3. 2586 2777 */ 2587 2778 static int 2588 - proc_rdrv_40(char *page, char **start, off_t offset, int count, int *eof, 2589 - void *data) 2779 + proc_show_pdrv_ch3(struct seq_file *m, void *v) 2590 2780 { 2591 - adapter_t *adapter = (adapter_t *)data; 2592 - 2593 - *eof = 1; 2594 - 2595 - return (proc_rdrv(adapter, page, 30, 39)); 2781 + return proc_show_pdrv(m, m->private, 3); 2596 2782 } 2597 2783 2598 2784 2599 2785 /** 2600 - * proc_rdrv() 2601 - * @page - buffer to write the data in 2786 + * proc_show_rdrv() 2787 + * @m - Synthetic file construction data 2602 2788 * @adapter - pointer to our soft state 2603 2789 * @start - starting logical drive to display 2604 2790 * @end - ending logical drive to display ··· 2525 2875 * /proc/scsi/scsi interface 2526 2876 */ 2527 2877 static int 2528 - proc_rdrv(adapter_t *adapter, char *page, int start, int end ) 2878 + proc_show_rdrv(struct seq_file *m, adapter_t *adapter, int start, int end ) 2529 2879 { 2530 2880 dma_addr_t dma_handle; 2531 2881 logdrv_param *lparam; ··· 2537 2887 u8 *rdrv_state; 2538 2888 int num_ldrv; 2539 2889 u32 array_sz; 2540 - int len = 0; 2541 2890 int i; 2542 2891 2543 - if( make_local_pdev(adapter, &pdev) != 0 ) { 2544 - return len; 2545 - } 2892 + if( make_local_pdev(adapter, &pdev) != 0 ) 2893 + return 0; 2546 2894 2547 - if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) { 2548 - free_local_pdev(pdev); 2549 - return len; 2550 - } 2895 + if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) 2896 + goto free_pdev; 2551 2897 2552 2898 if( mega_adapinq(adapter, dma_handle) != 0 ) { 2553 - 2554 - len = sprintf(page, "Adapter inquiry failed.\n"); 2555 - 2899 + seq_puts(m, "Adapter inquiry failed.\n"); 2556 2900 printk(KERN_WARNING "megaraid: inquiry failed.\n"); 2557 - 2558 - mega_free_inquiry(inquiry, dma_handle, pdev); 2559 - 2560 - free_local_pdev(pdev); 2561 - 2562 - return len; 2901 + goto free_inquiry; 2563 2902 } 2564 2903 2565 2904 memset(&mc, 0, sizeof(megacmd_t)); ··· 2574 2935 &disk_array_dma_handle); 2575 2936 2576 2937 if( disk_array == NULL ) { 2577 - len = sprintf(page, "memory not available.\n"); 2578 - 2579 - mega_free_inquiry(inquiry, dma_handle, pdev); 2580 - 2581 - free_local_pdev(pdev); 2582 - 2583 - return len; 2938 + seq_puts(m, "memory not available.\n"); 2939 + goto free_inquiry; 2584 2940 } 2585 2941 2586 2942 mc.xferaddr = (u32)disk_array_dma_handle; ··· 2585 2951 mc.opcode = OP_DCMD_READ_CONFIG; 2586 2952 2587 2953 if( mega_internal_command(adapter, &mc, NULL) ) { 2588 - 2589 - len = sprintf(page, "40LD read config failed.\n"); 2590 - 2591 - mega_free_inquiry(inquiry, dma_handle, pdev); 2592 - 2593 - pci_free_consistent(pdev, array_sz, disk_array, 2594 - disk_array_dma_handle); 2595 - 2596 - free_local_pdev(pdev); 2597 - 2598 - return len; 2954 + seq_puts(m, "40LD read config failed.\n"); 2955 + goto free_pci; 2599 2956 } 2600 2957 2601 2958 } ··· 2594 2969 mc.cmd = NEW_READ_CONFIG_8LD; 2595 2970 2596 2971 if( mega_internal_command(adapter, &mc, NULL) ) { 2597 - 2598 2972 mc.cmd = READ_CONFIG_8LD; 2599 - 2600 - if( mega_internal_command(adapter, &mc, 2601 - NULL) ){ 2602 - 2603 - len = sprintf(page, 2604 - "8LD read config failed.\n"); 2605 - 2606 - mega_free_inquiry(inquiry, dma_handle, pdev); 2607 - 2608 - pci_free_consistent(pdev, array_sz, 2609 - disk_array, 2610 - disk_array_dma_handle); 2611 - 2612 - free_local_pdev(pdev); 2613 - 2614 - return len; 2973 + if( mega_internal_command(adapter, &mc, NULL) ) { 2974 + seq_puts(m, "8LD read config failed.\n"); 2975 + goto free_pci; 2615 2976 } 2616 2977 } 2617 2978 } ··· 2617 3006 * Check for overflow. We print less than 240 characters for 2618 3007 * information about each logical drive. 2619 3008 */ 2620 - if( (len + 240) >= PAGE_SIZE ) break; 2621 - 2622 - len += sprintf(page+len, "Logical drive:%2d:, ", i); 3009 + seq_printf(m, "Logical drive:%2d:, ", i); 2623 3010 2624 3011 switch( rdrv_state[i] & 0x0F ) { 2625 3012 case RDRV_OFFLINE: 2626 - len += sprintf(page+len, "state: offline"); 3013 + seq_puts(m, "state: offline"); 2627 3014 break; 2628 - 2629 3015 case RDRV_DEGRADED: 2630 - len += sprintf(page+len, "state: degraded"); 3016 + seq_puts(m, "state: degraded"); 2631 3017 break; 2632 - 2633 3018 case RDRV_OPTIMAL: 2634 - len += sprintf(page+len, "state: optimal"); 3019 + seq_puts(m, "state: optimal"); 2635 3020 break; 2636 - 2637 3021 case RDRV_DELETED: 2638 - len += sprintf(page+len, "state: deleted"); 3022 + seq_puts(m, "state: deleted"); 2639 3023 break; 2640 - 2641 3024 default: 2642 - len += sprintf(page+len, "state: unknown"); 3025 + seq_puts(m, "state: unknown"); 2643 3026 break; 2644 3027 } 2645 3028 ··· 2641 3036 * Check if check consistency or initialization is going on 2642 3037 * for this logical drive. 2643 3038 */ 2644 - if( (rdrv_state[i] & 0xF0) == 0x20 ) { 2645 - len += sprintf(page+len, 2646 - ", check-consistency in progress"); 2647 - } 2648 - else if( (rdrv_state[i] & 0xF0) == 0x10 ) { 2649 - len += sprintf(page+len, 2650 - ", initialization in progress"); 2651 - } 3039 + if( (rdrv_state[i] & 0xF0) == 0x20 ) 3040 + seq_puts(m, ", check-consistency in progress"); 3041 + else if( (rdrv_state[i] & 0xF0) == 0x10 ) 3042 + seq_puts(m, ", initialization in progress"); 2652 3043 2653 - len += sprintf(page+len, "\n"); 3044 + seq_putc(m, '\n'); 2654 3045 2655 - len += sprintf(page+len, "Span depth:%3d, ", 2656 - lparam->span_depth); 3046 + seq_printf(m, "Span depth:%3d, ", lparam->span_depth); 3047 + seq_printf(m, "RAID level:%3d, ", lparam->level); 3048 + seq_printf(m, "Stripe size:%3d, ", 3049 + lparam->stripe_sz ? lparam->stripe_sz/2: 128); 3050 + seq_printf(m, "Row size:%3d\n", lparam->row_size); 2657 3051 2658 - len += sprintf(page+len, "RAID level:%3d, ", 2659 - lparam->level); 2660 - 2661 - len += sprintf(page+len, "Stripe size:%3d, ", 2662 - lparam->stripe_sz ? lparam->stripe_sz/2: 128); 2663 - 2664 - len += sprintf(page+len, "Row size:%3d\n", 2665 - lparam->row_size); 2666 - 2667 - 2668 - len += sprintf(page+len, "Read Policy: "); 2669 - 3052 + seq_puts(m, "Read Policy: "); 2670 3053 switch(lparam->read_ahead) { 2671 - 2672 3054 case NO_READ_AHEAD: 2673 - len += sprintf(page+len, "No read ahead, "); 3055 + seq_puts(m, "No read ahead, "); 2674 3056 break; 2675 - 2676 3057 case READ_AHEAD: 2677 - len += sprintf(page+len, "Read ahead, "); 3058 + seq_puts(m, "Read ahead, "); 2678 3059 break; 2679 - 2680 3060 case ADAP_READ_AHEAD: 2681 - len += sprintf(page+len, "Adaptive, "); 3061 + seq_puts(m, "Adaptive, "); 2682 3062 break; 2683 3063 2684 3064 } 2685 3065 2686 - len += sprintf(page+len, "Write Policy: "); 2687 - 3066 + seq_puts(m, "Write Policy: "); 2688 3067 switch(lparam->write_mode) { 2689 - 2690 3068 case WRMODE_WRITE_THRU: 2691 - len += sprintf(page+len, "Write thru, "); 3069 + seq_puts(m, "Write thru, "); 2692 3070 break; 2693 - 2694 3071 case WRMODE_WRITE_BACK: 2695 - len += sprintf(page+len, "Write back, "); 3072 + seq_puts(m, "Write back, "); 2696 3073 break; 2697 3074 } 2698 3075 2699 - len += sprintf(page+len, "Cache Policy: "); 2700 - 3076 + seq_puts(m, "Cache Policy: "); 2701 3077 switch(lparam->direct_io) { 2702 - 2703 3078 case CACHED_IO: 2704 - len += sprintf(page+len, "Cached IO\n\n"); 3079 + seq_puts(m, "Cached IO\n\n"); 2705 3080 break; 2706 - 2707 3081 case DIRECT_IO: 2708 - len += sprintf(page+len, "Direct IO\n\n"); 3082 + seq_puts(m, "Direct IO\n\n"); 2709 3083 break; 2710 3084 } 2711 3085 } 2712 3086 2713 - mega_free_inquiry(inquiry, dma_handle, pdev); 2714 - 3087 + free_pci: 2715 3088 pci_free_consistent(pdev, array_sz, disk_array, 2716 3089 disk_array_dma_handle); 2717 - 3090 + free_inquiry: 3091 + mega_free_inquiry(inquiry, dma_handle, pdev); 3092 + free_pdev: 2718 3093 free_local_pdev(pdev); 2719 - 2720 - return len; 3094 + return 0; 2721 3095 } 3096 + 3097 + /** 3098 + * proc_show_rdrv_10() 3099 + * @m - Synthetic file construction data 3100 + * @v - File iterator 3101 + * 3102 + * Display real time information about the logical drives 0 through 9. 3103 + */ 3104 + static int 3105 + proc_show_rdrv_10(struct seq_file *m, void *v) 3106 + { 3107 + return proc_show_rdrv(m, m->private, 0, 9); 3108 + } 3109 + 3110 + 3111 + /** 3112 + * proc_show_rdrv_20() 3113 + * @m - Synthetic file construction data 3114 + * @v - File iterator 3115 + * 3116 + * Display real time information about the logical drives 0 through 9. 3117 + */ 3118 + static int 3119 + proc_show_rdrv_20(struct seq_file *m, void *v) 3120 + { 3121 + return proc_show_rdrv(m, m->private, 10, 19); 3122 + } 3123 + 3124 + 3125 + /** 3126 + * proc_show_rdrv_30() 3127 + * @m - Synthetic file construction data 3128 + * @v - File iterator 3129 + * 3130 + * Display real time information about the logical drives 0 through 9. 3131 + */ 3132 + static int 3133 + proc_show_rdrv_30(struct seq_file *m, void *v) 3134 + { 3135 + return proc_show_rdrv(m, m->private, 20, 29); 3136 + } 3137 + 3138 + 3139 + /** 3140 + * proc_show_rdrv_40() 3141 + * @m - Synthetic file construction data 3142 + * @v - File iterator 3143 + * 3144 + * Display real time information about the logical drives 0 through 9. 3145 + */ 3146 + static int 3147 + proc_show_rdrv_40(struct seq_file *m, void *v) 3148 + { 3149 + return proc_show_rdrv(m, m->private, 30, 39); 3150 + } 3151 + 3152 + 3153 + /* 3154 + * seq_file wrappers for procfile show routines. 3155 + */ 3156 + static int mega_proc_open(struct inode *inode, struct file *file) 3157 + { 3158 + adapter_t *adapter = PDE(inode)->parent->data; 3159 + int (*show)(struct seq_file *, void *) = PDE_DATA(inode); 3160 + 3161 + return single_open(file, show, adapter); 3162 + } 3163 + 3164 + static const struct file_operations mega_proc_fops = { 3165 + .open = mega_proc_open, 3166 + .read = seq_read, 3167 + .llseek = seq_lseek, 3168 + .release = seq_release, 3169 + }; 3170 + 3171 + /* 3172 + * Table of proc files we need to create. 3173 + */ 3174 + struct mega_proc_file { 3175 + const char *name; 3176 + unsigned short ptr_offset; 3177 + int (*show) (struct seq_file *m, void *v); 3178 + }; 3179 + 3180 + static const struct mega_proc_file mega_proc_files[] = { 3181 + { "config", offsetof(adapter_t, proc_read), proc_show_config }, 3182 + { "stat", offsetof(adapter_t, proc_stat), proc_show_stat }, 3183 + { "mailbox", offsetof(adapter_t, proc_mbox), proc_show_mbox }, 3184 + #if MEGA_HAVE_ENH_PROC 3185 + { "rebuild-rate", offsetof(adapter_t, proc_rr), proc_show_rebuild_rate }, 3186 + { "battery-status", offsetof(adapter_t, proc_battery), proc_show_battery }, 3187 + { "diskdrives-ch0", offsetof(adapter_t, proc_pdrvstat[0]), proc_show_pdrv_ch0 }, 3188 + { "diskdrives-ch1", offsetof(adapter_t, proc_pdrvstat[1]), proc_show_pdrv_ch1 }, 3189 + { "diskdrives-ch2", offsetof(adapter_t, proc_pdrvstat[2]), proc_show_pdrv_ch2 }, 3190 + { "diskdrives-ch3", offsetof(adapter_t, proc_pdrvstat[3]), proc_show_pdrv_ch3 }, 3191 + { "raiddrives-0-9", offsetof(adapter_t, proc_rdrvstat[0]), proc_show_rdrv_10 }, 3192 + { "raiddrives-10-19", offsetof(adapter_t, proc_rdrvstat[1]), proc_show_rdrv_20 }, 3193 + { "raiddrives-20-29", offsetof(adapter_t, proc_rdrvstat[2]), proc_show_rdrv_30 }, 3194 + { "raiddrives-30-39", offsetof(adapter_t, proc_rdrvstat[3]), proc_show_rdrv_40 }, 3195 + #endif 3196 + { NULL } 3197 + }; 3198 + 3199 + /** 3200 + * mega_create_proc_entry() 3201 + * @index - index in soft state array 3202 + * @parent - parent node for this /proc entry 3203 + * 3204 + * Creates /proc entries for our controllers. 3205 + */ 3206 + static void 3207 + mega_create_proc_entry(int index, struct proc_dir_entry *parent) 3208 + { 3209 + const struct mega_proc_file *f; 3210 + adapter_t *adapter = hba_soft_state[index]; 3211 + struct proc_dir_entry *dir, *de, **ppde; 3212 + u8 string[16]; 3213 + 3214 + sprintf(string, "hba%d", adapter->host->host_no); 3215 + 3216 + dir = adapter->controller_proc_dir_entry = proc_mkdir(string, parent); 3217 + if(!dir) { 3218 + printk(KERN_WARNING "\nmegaraid: proc_mkdir failed\n"); 3219 + return; 3220 + } 3221 + dir->data = adapter; 3222 + 3223 + for (f = mega_proc_files; f->name; f++) { 3224 + de = proc_create_data(f->name, S_IRUSR, dir, &mega_proc_fops, 3225 + f->show); 3226 + if (!de) { 3227 + printk(KERN_WARNING "\nmegaraid: proc_create failed\n"); 3228 + return; 3229 + } 3230 + 3231 + ppde = (void *)adapter + f->ptr_offset; 3232 + *ppde = de; 3233 + } 3234 + } 3235 + 2722 3236 #else 2723 3237 static inline void mega_create_proc_entry(int index, struct proc_dir_entry *parent) 2724 3238 {
-17
drivers/scsi/megaraid.h
··· 987 987 static int mega_is_bios_enabled (adapter_t *); 988 988 989 989 #ifdef CONFIG_PROC_FS 990 - static int mega_print_inquiry(char *, char *); 991 990 static void mega_create_proc_entry(int, struct proc_dir_entry *); 992 - static int proc_read_config(char *, char **, off_t, int, int *, void *); 993 - static int proc_read_stat(char *, char **, off_t, int, int *, void *); 994 - static int proc_read_mbox(char *, char **, off_t, int, int *, void *); 995 - static int proc_rebuild_rate(char *, char **, off_t, int, int *, void *); 996 - static int proc_battery(char *, char **, off_t, int, int *, void *); 997 - static int proc_pdrv_ch0(char *, char **, off_t, int, int *, void *); 998 - static int proc_pdrv_ch1(char *, char **, off_t, int, int *, void *); 999 - static int proc_pdrv_ch2(char *, char **, off_t, int, int *, void *); 1000 - static int proc_pdrv_ch3(char *, char **, off_t, int, int *, void *); 1001 - static int proc_pdrv(adapter_t *, char *, int); 1002 - static int proc_rdrv_10(char *, char **, off_t, int, int *, void *); 1003 - static int proc_rdrv_20(char *, char **, off_t, int, int *, void *); 1004 - static int proc_rdrv_30(char *, char **, off_t, int, int *, void *); 1005 - static int proc_rdrv_40(char *, char **, off_t, int, int *, void *); 1006 - static int proc_rdrv(adapter_t *, char *, int, int); 1007 - 1008 991 static int mega_adapinq(adapter_t *, dma_addr_t); 1009 992 static int mega_internal_dev_inquiry(adapter_t *, u8, u8, dma_addr_t); 1010 993 #endif