summaryrefslogtreecommitdiff
path: root/sys/scsi/sd.c
diff options
context:
space:
mode:
authorKenneth R Westerback <krw@cvs.openbsd.org>2010-05-20 00:04:39 +0000
committerKenneth R Westerback <krw@cvs.openbsd.org>2010-05-20 00:04:39 +0000
commit3c3718e53ebd6b33568092f43f11f6f1d0c4130e (patch)
tree16aa8e117995376e0e2a6e024d714d880fe5fbf8 /sys/scsi/sd.c
parent95952ec49faed304df751391b2d2ee233711e73a (diff)
Simplify new disk cache code so simpler people can understand it.
No functional change. ok dlg@
Diffstat (limited to 'sys/scsi/sd.c')
-rw-r--r--sys/scsi/sd.c41
1 files changed, 17 insertions, 24 deletions
diff --git a/sys/scsi/sd.c b/sys/scsi/sd.c
index 8870ed4ad5b..d2f67671eb1 100644
--- a/sys/scsi/sd.c
+++ b/sys/scsi/sd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sd.c,v 1.189 2010/05/19 05:50:50 dlg Exp $ */
+/* $OpenBSD: sd.c,v 1.190 2010/05/20 00:04:38 krw Exp $ */
/* $NetBSD: sd.c,v 1.111 1997/04/02 02:29:41 mycroft Exp $ */
/*-
@@ -1006,7 +1006,7 @@ sd_ioctl_cache(struct sd_softc *sc, long cmd, struct dk_cache *dkc)
{
union scsi_mode_sense_buf *buf;
struct page_caching_mode *mode = NULL;
- int set = 0;
+ u_int wrcache, rdcache;
int big;
int rv;
@@ -1025,35 +1025,28 @@ sd_ioctl_cache(struct sd_softc *sc, long cmd, struct dk_cache *dkc)
goto done;
}
+ wrcache = (ISSET(mode->flags, PG_CACHE_FL_WCE) ? 1 : 0);
+ rdcache = (ISSET(mode->flags, PG_CACHE_FL_RCD) ? 0 : 1);
+
switch (cmd) {
case DIOCGCACHE:
- dkc->wrcache = (ISSET(mode->flags, PG_CACHE_FL_WCE) ? 1 : 0);
- dkc->rdcache = (ISSET(mode->flags, PG_CACHE_FL_RCD) ? 0 : 1);
+ dkc->wrcache = wrcache;
+ dkc->rdcache = rdcache;
break;
case DIOCSCACHE:
- if ((dkc->wrcache ? 1 : 0) !=
- (ISSET(mode->flags, PG_CACHE_FL_WCE) ? 1 : 0)) {
- if (dkc->wrcache)
- SET(mode->flags, PG_CACHE_FL_WCE);
- else
- CLR(mode->flags, PG_CACHE_FL_WCE);
-
- set = 1;
- }
-
- if ((dkc->rdcache ? 1 : 0) !=
- (ISSET(mode->flags, PG_CACHE_FL_RCD) ? 0 : 1)) {
- if (dkc->rdcache)
- CLR(mode->flags, PG_CACHE_FL_RCD);
- else
- SET(mode->flags, PG_CACHE_FL_RCD);
+ if (dkc->wrcache == wrcache && dkc->rdcache == rdcache)
+ break;
- set = 1;
- }
+ if (dkc->wrcache)
+ SET(mode->flags, PG_CACHE_FL_WCE);
+ else
+ CLR(mode->flags, PG_CACHE_FL_WCE);
- if (!set)
- break;
+ if (dkc->rdcache)
+ CLR(mode->flags, PG_CACHE_FL_RCD);
+ else
+ SET(mode->flags, PG_CACHE_FL_RCD);
if (big) {
rv = scsi_mode_select_big(sc->sc_link, SMS_PF,