aboutsummaryrefslogtreecommitdiff
path: root/sys/cam/cam_periph.c
Commit message (Collapse)AuthorAgeFilesLines
* cam_periph: wired is really a bool, update it to a bool.Warner Losh2021-11-051-12/+13
| | | | | | Sponsored by: Netflix Reviewed by: scottl Differential Revision: https://reviews.freebsd.org/D32823
* cam_periph: Add ability to wire units to a serial numberWarner Losh2021-11-051-4/+12
| | | | | | | | | | | | | | | | | | | | | | | For scsi, ata and nvme, at least, we read a serial number from the device (if the device supports it, some scsi drives do not) and record it during the *_xpt probe device state machine before it posts the AC_FOUND_DEVICE async event. For mmc, no serial number is ever retrieved, so it's always NULL. Add the ability to match this serial number during device wiring. This mechanism is competely optional, and often times using a label and/or some other attribute of the device is easier. However, other times wiring a unit to a serial number simplifies management as most monitoring tools require the *daX device and having it stable from boot to boot helps with data continuity. It can be especially helpful for nvme where no other means exists to reliably tie a ndaX device to an underlying nvme drive and namespace. A similar mechanism exists in Linux to mange device unit numbers with udev. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D32683
* cam_periph: fix bug in camperiphunitnext logicWarner Losh2021-11-051-1/+2
| | | | | | | | | | | If we assigned just a lun as a wired unit (something that camperiphunit will accept), we failed to properly skip over that unit when computing a next unit number. Add lun so the code matches the comments that we have to skip all the same criteria that camperiphunit uses to select wired units for a driver. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D32682
* cam_periph: switch from negative logic to positive logicWarner Losh2021-11-051-4/+4
| | | | | | | | | | | When scanning the resources that are wired for this driver, skip any that whose number doesn't match newunit. They aren't relevant. Switch to positive logic to break out of the loop (and thus go to the next unit) if we find either a target resource or an at resource. This makes the code easier to read and modify. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D32681
* cam_periph: Remove vestigial "scbus" comparisonWarner Losh2021-11-051-5/+5
| | | | | | | | | | | | The code in camperiphunit rejects "scbus" as an 'at' location that would allow any other wiring to use that unit number. Yet in camperiphunitnext, if we have a no target and the 'at' location of 'scbus' it would be excluded on the basis that it's a wiring cadidate. This is improper and appears to be a hold-over of the pre-hints / pre-newbus config system, so remove it. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D32680
* cam_periph: style changeWarner Losh2021-11-031-1/+2
| | | | | | | | wrap a long line at 80 columns Sponsored by: Netflix Reviewed by: chs Differential Revision: https://reviews.freebsd.org/D32679
* cam(4): preserve alloc_flags when copying CCBsEdward Tomasz Napierala2021-07-061-2/+23
| | | | | | | | | | | | | | | | | | Before UMA CCBs, all CCBs were of the same size, and could be trivially copied using bcopy(9). Now we have to preserve alloc_flags, otherwise we might end up attempting to free stack-allocated CCB to UMA; we also need to take CCB size into account. This fixes kernel panic which would occur when trying to access a stopped (as in, SCSI START STOP, also "ctladm stop") SCSI device. Reported By: Gary Jennejohn <gljennjohn@gmail.com> Tested By: Gary Jennejohn <gljennjohn@gmail.com> Reviewed By: imp Sponsored by: NetApp, Inc. Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D31054
* cam: make sure to clear CCBs allocated on the stackEdward Tomasz Napierala2021-03-301-0/+6
| | | | | | | | | | | This is required for small CCBs support, where we need to track whether the CCB was allocated from an UMA zone or not. There are no (intended) functional changes with the current source. Reviewed By: imp Sponsored by: NetApp, Inc. Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D29484
* cam: Permit non-pollable sims.John Baldwin2021-02-111-1/+5
| | | | | | | | | | | | | | Some CAM sim drivers do not support polling (notably iscsi(4)). Rather than using a no-op poll routine that always times out requests, permit a SIM to set a NULL poll callback. cam_periph_runccb() will fail polled requests non-pollable sims immediately as if they had timed out. Reviewed by: scottl, mav (earlier version) Reviewed by: imp MFC after: 2 weeks Sponsored by: Chelsio Differential Revision: https://reviews.freebsd.org/D28453
* Remove alignment requirements for KVA buffer mapping.Alexander Motin2020-11-291-13/+1
| | | | | | | | After r368124 vmapbuf() should happily map misaligned maxphys-sized buffers thanks to extra page added to pbuf_zone. Notes: svn path=/head/; revision=368134
* Make MAXPHYS tunable. Bump MAXPHYS to 1M.Konstantin Belousov2020-11-281-8/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Replace MAXPHYS by runtime variable maxphys. It is initialized from MAXPHYS by default, but can be also adjusted with the tunable kern.maxphys. Make b_pages[] array in struct buf flexible. Size b_pages[] for buffer cache buffers exactly to atop(maxbcachebuf) (currently it is sized to atop(MAXPHYS)), and b_pages[] for pbufs is sized to atop(maxphys) + 1. The +1 for pbufs allow several pbuf consumers, among them vmapbuf(), to use unaligned buffers still sized to maxphys, esp. when such buffers come from userspace (*). Overall, we save significant amount of otherwise wasted memory in b_pages[] for buffer cache buffers, while bumping MAXPHYS to desired high value. Eliminate all direct uses of the MAXPHYS constant in kernel and driver sources, except a place which initialize maxphys. Some random (and arguably weird) uses of MAXPHYS, e.g. in linuxolator, are converted straight. Some drivers, which use MAXPHYS to size embeded structures, get private MAXPHYS-like constant; their convertion is out of scope for this work. Changes to cam/, dev/ahci, dev/ata, dev/mpr, dev/mpt, dev/mvs, dev/siis, where either submitted by, or based on changes by mav. Suggested by: mav (*) Reviewed by: imp, mav, imp, mckusick, scottl (intermediate versions) Tested by: pho Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D27225 Notes: svn path=/head/; revision=368124
* vmapbuf: don't smuggle address or length in bufBrooks Davis2020-10-211-7/+1
| | | | | | | | | | | | | | | | | | | | Instead, add arguments to vmapbuf. Since this argument is always a pointer use a type of void * and cast to vm_offset_t in vmapbuf. (In CheriBSD we've altered vm_fault_quick_hold_pages to take a pointer and check its bounds.) In no other situtation does b_data contain a user pointer and vmapbuf replaces b_data with the actual mapping. Suggested by: jhb Reviewed by: imp, jhb Obtained from: CheriBSD MFC after: 1 week Sponsored by: DARPA Differential Revision: https://reviews.freebsd.org/D26784 Notes: svn path=/head/; revision=366911
* cam: clean up empty lines in .c and .h filesMateusz Guzik2020-09-011-12/+3
| | | | Notes: svn path=/head/; revision=365225
* Use devctl.h instead of bus.h to reduce newbus pollution.Warner Losh2020-08-211-1/+1
| | | | | | | | | | There's no need for these parts of the kernel to know about newbus, so narrow what is included to devctl.h for device_notify_*. Suggested by: kib@ Notes: svn path=/head/; revision=364442
* Remove stale commentWarner Losh2020-04-131-8/+1
| | | | | | | | There's no useracc here, and even if there was it shouldn't be here. vmapbuf is sufficient and as the comment says, useracc is racy. Notes: svn path=/head/; revision=359901
* Add comment about how the deferred callback for AC_FOUND_DEVICE weWarner Losh2020-03-141-1/+3
| | | | | | | | | | | | generate for a race where a device goes away, we start to tear down the periph state for the device, and then the device suddently reappears. The key that makes it work is removal of periph from the drv list before calling the deferred callback. Hat tip to: mav@ Notes: svn path=/head/; revision=358987
* Reword a comment to describe what's actually going on. We can call invalidateWarner Losh2020-03-071-1/+1
| | | | | | | | several times potentially. We just don't do anything on the second and subsequent calls. Notes: svn path=/head/; revision=358727
* The KASSERT is too strict: revert r357897Warner Losh2020-02-151-5/+0
| | | | | | | | | | | It's valid for a periph to be removed with outstanding transactions on the device. In CAM, multiple periphs attach to a single device. There's no interlock to prevent one of these going away while other periphs have outstanding CCBs and it's not an error either. Remove this overly agressive KASSERT to prevent false-positive panics when devices depart. Notes: svn path=/head/; revision=357969
* Add a KASSERT that there's no outstanding CCBs when we call camperiphfree. WeWarner Losh2020-02-141-0/+5
| | | | | | | | | | know that if there are any outstanding CCBs, then when they dereference the path that's freed at the bottom of camperiphfree there will be some flavor of panic. This moves that eventual panic to a traceback of when we free the last reference on the device, which is earlier but may not be early enough. Notes: svn path=/head/; revision=357897
* Make pass(4) handle misaligned buffers of MAXPHYS size.Alexander Motin2019-12-231-10/+10
| | | | | | | | | | | | | | | | | | | Since we are already using malloc()+copyin()/copyout() for smaller data blocks, and since new asynchronous API does it always, I see no reason to keep this ugly artificial size/alignment limitation in old API. Tape applications suffer enough from the MAXPHYS limitations by itself, and additional alignment requirement, often halving effectively usable block size, does not help. It would be good to use unmapped I/O here instead, but it require some HBA drivers polishing first to support non-BIO unmapped buffers. MFC after: 2 weeks Sponsored by: iXsystems, Inc. Notes: svn path=/head/; revision=356042
* Do not retry long ready waits if previous gave nothing.Alexander Motin2019-11-221-1/+11
| | | | | | | | | | | | | | | | I have some disks reporting "Logical unit is in process of becoming ready" for about half an hour before finally reporting failure. During that time CAM waits for the readiness during ~2 minutes for each request, that makes system boot take very long time. This change reduces wait times for the following requests to ~1 second if previously long wait for that device has timed out. MFC after: 2 weeks Sponsored by: iXsystems, Inc. Notes: svn path=/head/; revision=355023
* Fix assumptions of only one device per SES slot.Alexander Motin2019-09-111-1/+3
| | | | | | | | | | | It is typical to have one, but no longer true for multi-actuator HDDs with separate LUN for each actuator. MFC after: 4 days Sponsored by: iXsystems, Inc. Notes: svn path=/head/; revision=352201
* Unify SCSI_STATUS_BUSY retry handling with other cases.Alexander Motin2019-04-021-2/+10
| | | | | | | | | | | - Do not retry if periph was invalidated. - Do not decrement retry_count if already zero. - Report action_string when applicable. MFC after: 2 weeks Notes: svn path=/head/; revision=345805
* Do not map small IOCTL buffers to KVA, but copy.Alexander Motin2019-03-281-47/+106
| | | | | | | | | | | | | | | | | CAM IOCTL interfaces traditionally mapped user-space data buffers to KVA. It was nice originally, but now it takes too much to handle respective TLB shootdowns, while small kernel memory allocations up to 64KB backed by UMA and accompanied by copyin()/copyout() can be much cheaper. For large buffers mapping still may have sense, and unmapped I/O would be even better, but the last unfortunately is more tricky, since unmapped I/O API is too specific to struct bio now. MFC after: 2 weeks Sponsored by: iXsystems, Inc. Notes: svn path=/head/; revision=345656
* Allocate pager bufs from UMA instead of 80-ish mutex protected linked list.Gleb Smirnoff2019-01-151-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | o In vm_pager_bufferinit() create pbuf_zone and start accounting on how many pbufs are we going to have set. In various subsystems that are going to utilize pbufs create private zones via call to pbuf_zsecond_create(). The latter calls uma_zsecond_create(), and sets a limit on created zone. After startup preallocate pbufs according to requirements of all pbuf zones. Subsystems that used to have a private limit with old allocator now have private pbuf zones: md(4), fusefs, NFS client, smbfs, VFS cluster, FFS, swap, vnode pager. The following subsystems use shared pbuf zone: cam(4), nvme(4), physio(9), aio(4). They should have their private limits, but changing that is out of scope of this commit. o Fetch tunable value of kern.nswbuf from init_param2() and while here move NSWBUF_MIN to opt_param.h and eliminate opt_swap.h, that was holding only this option. Default values aren't touched by this commit, but they probably should be reviewed wrt to modern hardware. This change removes a tight bottleneck from sendfile(2) operation, that uses pbufs in vnode pager. Other pagers also would benefit from faster allocation. Together with: gallatin Tested by: pho Notes: svn path=/head/; revision=343030
* Add comments explaining what hold/unhold doWarner Losh2018-11-011-0/+6
| | | | | | | | They act as a simple one-deep semaphore to keep open/close/probe from running at the same time to avoid races that creates. Notes: svn path=/head/; revision=340024
* Stop further SCSI recovery attempts after one has failed.Alexander Motin2018-07-211-5/+13
| | | | | | | | | | | | | | | | | | | | | | We've got a set of probably damaged hard disks, reporting 0x04,0x02 ("Logical unit not ready, initializing command required") in response to READ CAPACITY(16), where attempts to use START STOP UNIT for recovery results in 0x44,0x00 ("Internal target failure") after ~1 second delay. As result of all recovery retries, device open attempt took ~3 seconds before finally reporting to GEOM that device is opened, but has no media. If the open was for writing and since it hasn't formally failed, following close triggered GEOM retaste, opening device few more times with respective delays. This change reduces whole time of this cycle from ~12 seconds to ~3 by giving up on recovery after the first failure. Reviewed by: ken MFC after: 2 weeks Sponsored by: iXsystems, Inc. Notes: svn path=/head/; revision=336590
* Add and fix comments for cam_periph_runccb()Scott Long2018-05-011-3/+7
| | | | | | | Sponsored by: Netflix Notes: svn path=/head/; revision=333147
* Create a sysctl kern.cam.{,a,n}da.X.invalidateWarner Losh2018-03-141-0/+22
| | | | | | | | | | | | | | | | | | | kern.cam.{,a,n}da.X.invalidate=1 forces *daX to detach by calling cam_periph_invalidate on the underlying periph. This is for testing purposes only. Include only with options CAM_TEST_FAILURE and rename the former [AN]DA_TEST_FAILURE, and fix nda to compile with it set. We're using it at work to harden geom and the buffer cache to be resilient in the face of drive failure. Today, it far too often results in a panic. While much work was done on SIM initiated removal for the USB thumnb drive removal work, little has been done for periph initiated removal. This simulates what *daerror() does for some errors nicely: we get the same panics with it that we do with failing drives. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D14581 Notes: svn path=/head/; revision=330935
* Report the number of remaining retries when we have an error thatWarner Losh2018-02-151-2/+5
| | | | | | | we're retrying. Notes: svn path=/head/; revision=329337
* Return a C errno for cam_periph_acquire().Scott Long2018-02-061-6/+6
| | | | | | | | | | | | | | There's no compelling reason to return a cam_status type for this function and doing so only creates confusion with normal C coding practices. It's technically an API change, but the periph API isn't widely used. No efffective change to operation. Reviewed by: imp, mav, ken Sponsored by: Netflix Differential Revision: D14063 Notes: svn path=/head/; revision=328918
* When we crash, we'll stop the scheduler before we call theWarner Losh2018-01-111-2/+8
| | | | | | | | | | | | | | | | shutdown_post_sync event. For adashutdown, this causes problems because we need to poll for completion of the commands, but we're not yet officially dumping yet, so the code from r326964 assumed we could use the interrupt-driven commands rather than the polled ones. This lead to a hang. Prevent this by also checking to see if the scheduler is stopped to do the polling. Reported by: markj@ Sponsored by: Netflix Differential Review: https://reviews.freebsd.org/D13845 Notes: svn path=/head/; revision=327805
* Don't hold the periph lock when calling into cam_periph_runccb()Scott Long2018-01-091-9/+4
| | | | | | | | | | | | | | from the ada and da dump routines. This avoids difficult locking problems from needing to be handled. While it might seem like this would leave the periphs unprotected during dump, they were aleady at risk of unexpected removal due to the dump functions not keeping refcount state across the many calls that come in during a dump. This is an exercise for future work. Obtained from: Netflix Notes: svn path=/head/; revision=327710
* When doing a dump, the scheduler is normally not running, so thisWarner Losh2017-12-191-7/+14
| | | | | | | | | | | | | | | changed worked to capture dumps for me. However, the test for SCHEDULER_STOPPED() isn't right. We can also call the dump routine from ddb, in which case the scheduler is still running. This leads to an assertion panic that we're sleeping when we shouldn't. Instead, use the proper test for dumping or not. This brings us in line with other places that do special things while we're doing polled I/O like this. Noticed by: pho@ Differential Revision: https://reviews.freebsd.org/D13531 Notes: svn path=/head/; revision=326964
* Define xpt_path_inq.Warner Losh2017-12-061-3/+1
| | | | | | | | | | | This provides a nice wrarpper around the XPT_PATH_INQ ccb creation and calling. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D13387 Notes: svn path=/head/; revision=326645
* Make cam_periph_runccb be safe to call when we can only do polling.Warner Losh2017-12-061-14/+44
| | | | | | | | Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D13388 Notes: svn path=/head/; revision=326643
* Remove unused 4th argument to match the standard error routines.Warner Losh2017-12-061-2/+2
| | | | | | | | Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D13386 Notes: svn path=/head/; revision=326606
* Add NVME as a known device type for devstat processing.Warner Losh2017-12-061-18/+22
| | | | | | | | | | Also, reduce the amount of cut and pasted code a little since only two args are different in the devstat_end_transaction calls. Sponsored by: Netflix Notes: svn path=/head/; revision=326605
* sys/cam: further adoption of SPDX licensing ID tags.Pedro F. Giffuni2017-11-271-0/+2
| | | | | | | | | | | | | | | Mainly focus on files that use BSD 2-Clause license, however the tool I was using misidentified many licenses so this was mostly a manual - error prone - task. The Software Package Data Exchange (SPDX) group provides a specification to make it easier for automated tools to detect and summarize well known opensource licenses. We are gradually adopting the specification, noting that the tags are considered only advisory and do not, in any way, superceed or replace the license texts. Notes: svn path=/head/; revision=326265
* This adds CAM pass(4) support for NVMe IO's. Applications indicateWarner Losh2017-07-141-0/+16
| | | | | | | | | | | the IO type (Admin or NVM) using XPT op-codes XPT_NVME_ADMIN or XPT_NVME_IO. Submitted by: Chuck Tuffli <chuck@tuffli.net> Differential Revision: https://reviews.freebsd.org/D10247 Notes: svn path=/head/; revision=320984
* An MMC/SD/SDIO stack using CAMWarner Losh2017-07-091-0/+12
| | | | | | | | | | | | | | | | | | | | | | | Implement the MMC/SD/SDIO protocol within a CAM framework. CAM's flexible queueing will make it easier to write non-storage drivers than the legacy stack. SDIO drivers from both the kernel and as userland daemons are possible, though much of that functionality will come later. Some of the CAM integration isn't complete (there are sleeps in the device probe state machine, for example), but those minor issues can be improved in-tree more easily than out of tree and shouldn't gate progress on other fronts. Appologies to reviews if specific items have been overlooked. Submitted by: Ilya Bakulin Reviewed by: emaste, imp, mav, adrian, ian Differential Review: https://reviews.freebsd.org/D4761 merge with first commit, various compile hacks. Notes: svn path=/head/; revision=320844
* Fix a panic in camperiphfree().Kenneth D. Merry2017-06-271-2/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If a peripheral driver (e.g. da, sa, cd) is added or removed from the peripheral driver list while an unrelated peripheral driver instance (e.g. da0, sa5, cd2) is going away and is inside camperiphfree(), we could dereference an invalid pointer. When peripheral drivers are added or removed (see periphdriver_register() and periphdriver_unregister()), the peripheral driver array is resized and existing entries are moved. Although we hold the topology lock while we traverse the peripheral driver list, we retain a pointer to the location of the peripheral driver pointer and then drop the topology lock. So we are still vulnerable to the list getting moved around while the lock is dropped. To solve the problem, cache a copy of the peripheral driver pointer. If its storage location in the list changes while we have the lock dropped, it won't have any effect. This doesn't solve the issue that peripheral drivers ("da", "cd", as opposed to individual instances like "da0", "cd0") are not generally part of a reference counting scheme to guard against deregistering them while there are instances active. The caller (generally the person unloading a module) has to be aware of active drivers and not unload something that is in use. sys/cam/cam_periph.c: In camperiphfree(), cache a pointer to the peripheral driver instance to avoid holding a pointer to an invalid memory location in the event that the peripheral driver list changes while we have the topology lock dropped. PR: kern/219701 Submitted by: avg MFC after: 3 days Sponsored by: Spectra Logic Notes: svn path=/head/; revision=320421
* Fix an unsafe malloc usage with sbufs.Scott Long2017-05-031-1/+2
| | | | | | | | Reported by: ken Sponsored by: Netflix Notes: svn path=/head/; revision=317726
* Add infrastructure to the ATA and SCSI transports that supportsScott Long2017-04-191-2/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | using a driver-supplied sbuf for printing device discovery announcements. This helps ensure that messages to the console will be properly serialized (through sbuf_putbuf) and not be truncated and interleaved with other messages. The infrastructure mirrors the existing xpt_announce_periph() entry point and is opt-in for now. No content or formatting changes are visible to the operator other than the new coherency. While here, eliminate the stack usage of the temporary announcement buffer in some of the drivers. It's moved to the softc for now, but future work will eliminate it entirely by making the code flow more linear. Future work will also address locking so that the sbufs can be dynamically sized. The scsi_da, scs_cd, scsi_ses, and ata_da drivers are converted at this point, other drivers can be converted at a later date. A tunable+sysctl, kern.cam.announce_nosbuf, exists for testing purposes but will be removed later. TODO: Eliminate all of the code duplication and temporary buffers. The old printf-based methods will be retired, and xpt_announce_periph() will just be a wrapper that uses a dynamically sized sbuf. This requires that the register and deregister paths be made malloc-safe, which they aren't currently. Sponsored by: Netflix Notes: svn path=/head/; revision=317143
* Add mechanism to unload CAM periph drivers.Alexander Motin2017-03-071-0/+32
| | | | | | | | For now it allows to unload CTL kernel module if there are no target-capable SIMs in CAM. As next step full teardown of CAM targets can be implemented. Notes: svn path=/head/; revision=314870
* Improve CAM_CDB_POINTER support.Alexander Motin2017-01-131-4/+1
| | | | | | | MFC after: 2 weeks Notes: svn path=/head/; revision=312026
* Add BUF_TRACKING and FULL_BUF_TRACKING buffer debuggingConrad Meyer2016-10-311-0/+5
| | | | | | | | | | | | | | | | | | Upstream the BUF_TRACKING and FULL_BUF_TRACKING buffer debugging code. This can be handy in tracking down what code touched hung bios and bufs last. The full history is especially useful, but adds enough bloat that it shouldn't be enabled in release builds. Function names (or arbitrary string constants) are tracked in a fixed-size ring in bufs. Bios gain a pointer to the upper buf for tracking. SCSI CCBs gain a pointer to the upper bio for tracking. Reviewed by: markj Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D8366 Notes: svn path=/head/; revision=308155
* cam_periph_ccbwait could return while ccb in progressMark Johnston2016-09-301-12/+31
| | | | | | | | | | | | | | | | | | In cam_periph_runccb, cam_periph_ccbwait was using the value of the ccb pinfo.index and status fields to determine whether the ccb was done, but these fields are updated without a contending lock and could glitch into states that would be erroneously interpreted as done. Instead, have cam_periph_ccbwait look for the explicit result of the function cam_periph_done. Submitted by: Ryan Libby <rlibby@gmail.com> Reviewed by: mav MFC after: 3 weeks Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D8020 Notes: svn path=/head/; revision=306529
* Don't report to devd statuses that CAM doesn't consider errors.Alexander Motin2016-09-081-1/+1
| | | | | | | | | | Some statuses, such as "ATA pass through information available", are part part of absolutely normal operation and do not worth reporting. MFC after: 2 weeks Notes: svn path=/head/; revision=305610
* Don't repeat the the word 'the'Eitan Adler2016-05-171-1/+1
| | | | | | | | | | (one manual change to fix grammar) Confirmed With: db Approved by: secteam (not really, but this is a comment typo fix) Notes: svn path=/head/; revision=300050