summaryrefslogtreecommitdiff
path: root/sys/scsi/sd.c
AgeCommit message (Collapse)Author
2012-12-19Temporarily bring back the shutdown hook, but only use it to flush the diskMark Kettenis
cache. This shouldn't interfere with the hibernate code and makes sure we still flush the cache for controller that don't pass DVACT_POWRDOWN down to their children yet. This will be removed when the autoconf subsystem gets changed to do that for us by default. ok deraadt@
2012-10-15In DVACT_SUSPEND, do a flush of the disk. We do this in DVACT_POWERDOWNTheo de Raadt
as well, but it might be wise to flush before a hibernate operation, in case hiberate looks at blocks which are in the buffer cache. ok krw
2012-10-08Revamp the sequences for suspend/hibernate -> resume so that the codeTheo de Raadt
paths are reflexive. It is now possible to fail part-way through a suspend sequence, and recover along the resume code path. Split DVACT_SUSPEND by adding a new DVACT_POWERDOWN method is used after hibernate (and suspend too) to finish the job. Some drivers must be converted at the same time to use this instead of shutdown hooks (the others will follow at a later time) ok kettenis mlarkin
2012-07-09Revert previous.Kenneth R Westerback
The standards gpds are jealous gods. kettenis@ and beck@ have shown EROFS is the wrong thing to return. So revert to EACCES until a better error code is decided on.
2012-07-08Return EROFS when a read-write mount of a read-only sd(4) deviceKenneth R Westerback
is attempted. This is instead of the current EACCES and is intended to result in better error messages from mount(8). Tweak default EROFS error text to mention fsck'ing in mount_ext2fs and mount_msdos since they both have fsck's like ffs. ok deraadt@ aja@ ian@ phessler@
2012-06-10Do NOT make all check condition results report EIO. Only use EIOKenneth R Westerback
when b_error has not already been set to something more informative, e.g. EROFS. DO check the result of ffs_sbupdate() and error out of a mount() call when ffs_sbupdate() reports EROFS while attempting a rw mount. Letting RW mounts proceed regardless of EROFS led to crashes and usb problems for Oliver Seufer while using the RW/RO switches on some usb devices. Fix developed using devices kindly supplied by Oliver & Co. ok miod@
2011-10-10Put the drive in standby mode when we're powering down the machine.Mark Kettenis
tested by dcoppa@, ok krw@, miod@
2011-07-18Fix an off-by-1 error and a 32-bit integer arithmetic overflow bugMatthew Dempsky
that caused large disks to appear offline. Discovered and tested by mlarkin@; ok dlg@
2011-07-12fix some notyet codeDavid Gwynne
2011-07-12now that we know if a disk is thin provisioned (or an ssd), we can chooseDavid Gwynne
to use the fifo bufq sorting on such disks. there's no point ordering io if the real blocks arent in the order we think they are. ok krw@ tedu@ miod@
2011-07-11ask the disk about unmap (read trim) parameters. check if we have theDavid Gwynne
required vpd pages, then read them for the values we want. we look for the max blocks per unmap, the max descriptors per unmap, and which scsi command to use for unmapping (unmap will be preferred). two fixes and ok matthew@
2011-07-11disks report trim^Wunmap^Wif theyre thin provisioned via a bit inDavid Gwynne
the read cap 16 data. move the read cap code into sd.c so i can get at this bit without much contorting, and to make it trivial to get at the other interesting things in there later. thin disks report themselves as "thin" in dmesg along with their size now. ok matthew@
2011-07-06Eliminate redundant buf validation checks in xxstrategy() methods nowMatthew Dempsky
that they're implemented consistently in bounds_check_with_label(). Also, per krw's request, change bounds_check_with_label() to return 0 if the checks succeed, and change the drivers to test == -1 instead of <= 0. (Man page update to follow; intentionally omitting arch/vax/mba/hp.c from this commit because it doesn't even build currently and miod@ promises to kill it soon.) ok krw@
2011-07-03Remove config_activate() and DVACT_ACTIVATE. PCMCIA's the only thingMatthew Dempsky
that's ever used it, and it's long since been changed to use DVACT_{QUIESCE,SUSPEND,RESUME} instead. ok deraadt@, dlg@; miod@ also agreed with this idea when I brought it up a few weeks ago
2011-06-30Refactor some common open/close/detach disk driver code intoMatthew Dempsky
subr_disk.c. For now just the MI disk drivers. ok deraadt@, krw@; jsing@ liked the approach too
2011-06-19Use disk_lock_nointr() in the xxclose() routines so that they cannotTheo de Raadt
be interrupted. ok matthew
2011-06-19Use disk_lock/disk_unlock directly and in the same way in these drivers,Theo de Raadt
rather than using various wrappings. Convert vnd to using the sc_dk rwlock instead of using one of its own. ok matthew
2011-06-05Drop kernel support for the useless DIOCWLABEL ioctl and prune a lotMatthew Dempsky
of silly flag twiddling code in various disk drivers. ok deraadt@, miod@ N.B., users will need a -current disklabel(8) to be able to write new disklabels to disk now.
2011-06-03Get rid of the wlabel argument to bounds_check_with_label(). It'sMatthew Dempsky
never done anything in OpenBSD and just clutters disk drivers with silly flag handling. More cleanup to follow. ok deraadt@, millert@; no objections krw@
2011-05-31Change a few of the more common disk drivers (sd, cd, wd, rd, and vnd)Matthew Dempsky
to return EBUSY if the user tries to modify an open partition's offset or size. Only sadness can result if a user tries this, and rejecting it prevents a race between sdstart() and sdstrategy(). Curiously, there was already code in the kernel and in disklabel(8) to detect/handle this, but it was effectively disabled because the disk drivers always used something like "/* sc->sc_dk.dk_openmask */ 0", and this commented out code has existed since even r1.1 in NetBSD. I had no problems building a release and messing around with disklabel(8) for a bit with this diff. Canarying the more common MI disk drivers until we gain confidence that there aren't any regressions, then we can switch the remaining drivers. "I am surprised you got me convinced that this stuff is safe" deraadt@ ok krw@
2011-04-08Since we don't print "drive offline" anymore, there is no need toKenneth R Westerback
print the "sdN:" at the start of the now empty line. Noted by miod@.
2011-04-07Do not use NULL in integer comparisons. No functional change.Miod Vallat
ok matthew@ tedu@, also eyeballed by at least krw@ oga@ kettenis@ jsg@
2011-04-07'disk offline' is not helpful. Silence is golden.Kenneth R Westerback
Prodded repeatedly by deraadt@
2011-03-31- use nitems(); no binary change.Jasper Lievisse Adriaanse
ok krw@
2011-03-17use dma_alloc/dma_free instead of malloc to allocate buffers which needTheo de Raadt
to be in the right address space. help from matthew and krw
2011-02-21If a spin up command can't be started becaause of a lack of openings,Kenneth R Westerback
delay and retry the original command rather than immediately erroring out. Fixes USB drives that spin themselves down due to inactivity, as confirmed by pirofti@ and jsg@. ok miod@, rough agreement pending more general solution dlg@.
2010-12-24Have sd(4) devices check for and respect read-only information theKenneth R Westerback
way st(4) does. Have both decline to open read-only devices for anything but read-only access. Suggestion to fail opens rather than individual i/o's from deraadt@. Problem USB device found and donated by chefren, who also tested diffs. Thanks! ok dlg@ marco@
2010-09-24init err to 0 in sd_get_parms to avoid confusion when checking rigidDavid Gwynne
geometry. it doesnt matter waht the value there is cos rigid will be NULL, but this is clearer.
2010-09-22All users of physio(9) now pass NULL as the buf pointer argument, soMatthew Dempsky
no point in keeping it around. "i like this" thib@ (a while back); ok krw@ and oga@; reminder to update the man page and tweaks jmc@
2010-09-21Add a real DIOCGPDINFO, allowing access to the physical informationKenneth R Westerback
about the device rather than the contents of whichever disklabel was read. Tweak whitespace in sd.c to make the code appearance consistant.
2010-09-20bufq_drain() does not need to be done in deactivate; we only needTheo de Raadt
to deactivate transactions we are currently doing. ok dlg
2010-09-12Garbage collect rot_rate from disk_parms. No longer in disk label so noKenneth R Westerback
need to calculate and save. Not used anywhere in tree.
2010-09-11Be more ruthlessly consistent in variable names for blk/block ==Kenneth R Westerback
512 == DEV_BSIZE units and variable-sized physical device 'sectors'. I hope this reduces confusion a bit more. No change to .o files. ok for intent miod@, with tweak.
2010-09-10scsi_xsh_del the io handler in deactivate to prevent it from being run onDavid Gwynne
a device thats now gone, or from being on the list of pending io when the device is actually detached. found and fix tested by jakemsr@ "go for it" jakemsr@
2010-09-08Introduce a disk_lookup() function which calls device_lookup(), beforeJoel Sing
verifying that the resulting device is present on the disklist. This avoids a race whereby the disk driver can be accessed as soon as the softc has been allocated, but before the disk has completed initialisation and has called disk_attach() (up until this point dk_label is still a null pointer). Cut cd(4), sd(4) and wd(4) across to disk_lookup(). All callers of disk_attach() need to be tested and cut over in due course. ok deraadt@ krw@
2010-09-08Store a struct device pointer within struct disk and populate this whenJoel Sing
disk_attach() is called by the device driver. We will be building on this shortly. ok deraadt@ krw@
2010-09-01Restore compilability after bufq changesMiod Vallat
2010-09-01make struct bufq a member of the softc for devices that use it,David Gwynne
rather than it being a pointer to something that needs to be allocated at attach. since all these devices need a bufq to operate, it makes sense to have it allocated as part of the softc and get bufq_init to just initialise all its fields. it also gets rid of the possibility that you wont be able to allocate the bufq struct during attach, which is something you dont want to happen. secondly, it consistently implements a split between wrapper functions and the per discipline implementation of the bufq handlers. it consistently does the locking in the wrappers rather than doing half in the wrappers and the other half in the implementations. it also consistently handles the outstanding bufq bq pointer in the wrappers. this hides most of the implementation inside kern_bufq.c. the only stuff left in buf.h is for the bits each implementation needs to put inside struct buf. tested by thib@ krw@ and me ok thib@ matthew@ no objection from krw@
2010-08-31in the activate function, order the DVACT_ functions in the order theyTheo de Raadt
can expect to be used
2010-08-28Garbage collect struct dkdriver.Matthew Dempsky
ok miod@; "please go ahead" jsing@
2010-08-03Don't attempt to set the read or write caches on usb disks. ItKenneth R Westerback
breaks at least one previously working device, as discovered by naddy@. dlg@ confirmed other kernels also avoid attempting this operation on usb disks. ok dlg@ deraadt@
2010-07-07Pull out disk sort. I committed the wrong version of the diff and itMarco Peereboom
wasn't ok deraadt & dlg.
2010-07-06Enable FIFO IO for sd devices. This time committed against the actual tree.Marco Peereboom
Tested by lots of people during c2k10 ok phessler krw thib
2010-07-03Stop disk on suspend and start it again upon resume. Gets rid of the loudMark Kettenis
click upon suspend that my laptop with ahci(4) has. ok dlg@, ok marco@ on an earlier iteration of this diff
2010-07-01Die struct scsi_device! Die! Instead, save a pointer to the routineKenneth R Westerback
to interpret sense errors. This is initialized to the basic interpretation routine, and specific scsi drivers (sd/st/cd) can replace this with their own. While here kill EJUSTRETURN dance and make more specialized interpretation routines directly call the basic routine if desired. Fixes by matthew@ to my first diff. Most original work by dlg@. ok matthew@ marco@ dlg@
2010-07-01Restore setting xs->bp; fixes ncr(4) on VAX.Matthew Dempsky
ok miod@, krw@
2010-06-30Flush cache before suspend.Mark Kettenis
ok krw@, marco@
2010-06-28Move disk_attach() to the end of the attach functions, at which point theJoel Sing
disk is now ready to handle I/O. ok krw@ dlg@
2010-06-24we cant rely on being able to sleep when dumping, so dont lose theDavid Gwynne
SCSI_NOSLEEP flag on the xs when setting extra flags by oring them in rather than assigning them. from matthew dempsky
2010-06-16Always check both the return value of scsi_do_mode_sense() and theKenneth R Westerback
NULL'ness of the pointer to the actual page data. Fixes a NULL deref when trying to set caching on my ASUS eeePC 1000HE's SD slot. ok dlg@