summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/io/scsi/targets/sd.c
diff options
context:
space:
mode:
authorHans Rosenfeld <hans.rosenfeld@nexenta.com>2013-02-19 09:16:46 -0500
committerRichard Lowe <richlowe@richlowe.net>2013-02-19 18:37:36 -0500
commit28f2c52052034474a5881e13013564f72ffa345f (patch)
treec5877ec6f019954ad6ca35654e810fea43f58095 /usr/src/uts/common/io/scsi/targets/sd.c
parent16a4a8074274d2d7cc408589cf6359f4a378c861 (diff)
downloadillumos-gate-28f2c52052034474a5881e13013564f72ffa345f.tar.gz
3515 sd gives RMW warnings for reads
Reviewed by: Albert Lee <trisk@nexenta.com> Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com> Reviewed by: Gordon Ross <gordon.ross@nexenta.com> Reviewed by: Garrett D'Amore <garrett@damore.org> Approved by: Richard Lowe <richlowe@richlowe.net>
Diffstat (limited to 'usr/src/uts/common/io/scsi/targets/sd.c')
-rw-r--r--usr/src/uts/common/io/scsi/targets/sd.c28
1 files changed, 12 insertions, 16 deletions
diff --git a/usr/src/uts/common/io/scsi/targets/sd.c b/usr/src/uts/common/io/scsi/targets/sd.c
index 501bca39c8..9eea65b186 100644
--- a/usr/src/uts/common/io/scsi/targets/sd.c
+++ b/usr/src/uts/common/io/scsi/targets/sd.c
@@ -23,9 +23,9 @@
* Copyright (c) 1990, 2010, Oracle and/or its affiliates. All rights reserved.
*/
/*
- * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 2011 Bayard G. Bell. All rights reserved.
* Copyright (c) 2012 by Delphix. All rights reserved.
+ * Copyright 2013 Nexenta Systems, Inc. All rights reserved.
*/
/*
* Copyright 2011 cyril.galibern@opensvc.com
@@ -12647,16 +12647,17 @@ sd_mapblockaddr_iostart(int index, struct sd_lun *un, struct buf *bp)
if (is_aligned) {
xp->xb_blkno = SD_SYS2TGTBLOCK(un, xp->xb_blkno);
} else {
- switch (un->un_f_rmw_type) {
- case SD_RMW_TYPE_RETURN_ERROR:
- if (un->un_f_enable_rmw)
- break;
- else {
- bp->b_flags |= B_ERROR;
- goto error_exit;
- }
-
- case SD_RMW_TYPE_DEFAULT:
+ /*
+ * There is no RMW if we're just reading, so don't
+ * warn or error out because of it.
+ */
+ if (bp->b_flags & B_READ) {
+ /*EMPTY*/
+ } else if (!un->un_f_enable_rmw &&
+ un->un_f_rmw_type == SD_RMW_TYPE_RETURN_ERROR) {
+ bp->b_flags |= B_ERROR;
+ goto error_exit;
+ } else if (un->un_f_rmw_type == SD_RMW_TYPE_DEFAULT) {
mutex_enter(SD_MUTEX(un));
if (!un->un_f_enable_rmw &&
un->un_rmw_msg_timeid == NULL) {
@@ -12674,11 +12675,6 @@ sd_mapblockaddr_iostart(int index, struct sd_lun *un, struct buf *bp)
un->un_rmw_incre_count ++;
}
mutex_exit(SD_MUTEX(un));
- break;
-
- case SD_RMW_TYPE_NO_WARNING:
- default:
- break;
}
nblocks = SD_TGT2SYSBLOCK(un, nblocks);