id,summary,reporter,owner,description,type,status,priority,milestone,component,version,resolution,keywords,cc 252,add disks on megaraid sas controller to DEVICESCAN,Alex Samorukov,Alex Samorukov,"I decided to add autoscan functionality for drives on MegaSAS controllers. Main motivation for this was that devices on such controllers having random numbers, from 0 to ~250 and it is very annoying to write smartd configuration (i used shell + MegaCli in the past). There is no ioctl documentation provided, so i did patch based on MegaCli tool behavior (with strace and LD_PRELAOD for IOCTL) and FreeBSD driver sources which contain similar code. What this patch is doing: * In autoscan mode, if megaraid_sas_ioctl is found in /proc/devices it is trying to identify SCSI host number with megasas controllers using sysfs (/sys/class/scsi_host/hostN/proc_name). If sysfs is not mounted it scans first 16 buses. I believe that native tool do the same. * If controller is found i am getting device list using driver ioctl and adding them to device list Code changes: * megaraid.h updated to include constant/structures to get drive list * set_fd added to linux_smart_device. I need this to override is_open check in megaraid. * -d megaraid allows to specify devices in pseudo /dev/bus/N format. We can`t easy get drive name from the bus number, and also it is possible that drive name is not exists at all (unconfigured RAID). * Added private functions get_dev_megasas, megasas_dcmd_cmd and megasas_pd_get_list to the linux_smart_interface. * I disabled ""MegaRAID SAT layer is reportedly buggy"" error. Everything was fixed after chk_cond check was added. I am unable to reproduce problem with different hardware. * I added set_info().dev_type = strprintf(""megaraid,%d"", tgt) to set device number in type. Without it --scan will show just -""d megaraid"" devices. Not sure if this is correct. * scsiata.cpp - set device type as sat+ if scsidev->get_dev_type() is not ""scsi"". Example: {{{ [root@p2986890 smartmontools]# ./smartctl --scan /dev/sda -d scsi # /dev/sda, SCSI device /dev/bus/0 -d megaraid,5 # /dev/bus/0 [megaraid_disk_05], SCSI device /dev/bus/0 -d megaraid,7 # /dev/bus/0 [megaraid_disk_07], SCSI device [root@p2986890 smartmontools]# ./smartctl --scan-open # /dev/sda -d scsi # /dev/sda, SCSI device open failed: DELL or MegaRaid controller, please try adding '-d megaraid,N' /dev/bus/0 -d sat+megaraid,5 # /dev/bus/0 [megaraid_disk_05] [SAT], ATA device /dev/bus/0 -d sat+megaraid,7 # /dev/bus/0 [megaraid_disk_07] [SAT], ATA device [root@p2986890 smartmontools]# ./smartd -d smartd 6.1 2012-12-14 r3732M [x86_64-linux-2.6.32-279.14.1.el6.x86_64] (local build) Copyright (C) 2002-12, Bruce Allen, Christian Franke, www.smartmontools.org No configuration file /usr/local/etc/smartd.conf found, scanning devices glob(3) found no matches for pattern /dev/hd[a-t] glob(3) found no matches for pattern /dev/sd[a-c][a-z] Device: /dev/sda, open() failed: DELL or MegaRaid controller, please try adding '-d megaraid,N' Device: /dev/bus/0 [megaraid_disk_05], type changed from 'megaraid,5' to 'sat+megaraid,5' Device: /dev/bus/0 [megaraid_disk_05] [SAT], opened Device: /dev/bus/0 [megaraid_disk_05] [SAT], WDC WD1003FBYX-01Y7B1, S/N:WD-XXXX, WWN:XXXX, FW:01.01V02, 1.00 TB Device: /dev/bus/0 [megaraid_disk_05] [SAT], found in smartd database: Western Digital RE4 Serial ATA Device: /dev/bus/0 [megaraid_disk_05] [SAT], not capable of SMART Health Status check Device: /dev/bus/0 [megaraid_disk_05] [SAT], is SMART capable. Adding to ""monitor"" list. Device: /dev/bus/0 [megaraid_disk_07], type changed from 'megaraid,7' to 'sat+megaraid,7' Device: /dev/bus/0 [megaraid_disk_07] [SAT], opened Device: /dev/bus/0 [megaraid_disk_07] [SAT], WDC WD1003FBYX-01Y7B1, S/N:WD-XXXX, WWN:XXXX, FW:01.01V02, 1.00 TB Device: /dev/bus/0 [megaraid_disk_07] [SAT], found in smartd database: Western Digital RE4 Serial ATA Device: /dev/bus/0 [megaraid_disk_07] [SAT], not capable of SMART Health Status check Device: /dev/bus/0 [megaraid_disk_07] [SAT], is SMART capable. Adding to ""monitor"" list. Monitoring 2 ATA and 0 SCSI devices Device: /dev/bus/0 [megaraid_disk_05] [SAT], opened ATA device Device: /dev/bus/0 [megaraid_disk_05] [SAT], previous self-test completed without error Device: /dev/bus/0 [megaraid_disk_07] [SAT], opened ATA device Device: /dev/bus/0 [megaraid_disk_07] [SAT], previous self-test completed without error }}}",enhancement,closed,minor,,all,6.0,fixed,"linux, megaraid",