--- a/usr/src/uts/common/fs/zfs/dsl_scrub.c Thu Dec 04 15:57:36 2008 -0800
+++ b/usr/src/uts/common/fs/zfs/dsl_scrub.c Thu Dec 04 16:47:42 2008 -0800
@@ -918,10 +918,10 @@
dsl_pool_scrub_clean_cb(dsl_pool_t *dp,
const blkptr_t *bp, const zbookmark_t *zb)
{
- size_t size = BP_GET_LSIZE(bp);
+ size_t size = BP_GET_PSIZE(bp);
spa_t *spa = dp->dp_spa;
boolean_t needs_io;
- int zio_flags = ZIO_FLAG_SCRUB_THREAD | ZIO_FLAG_CANFAIL;
+ int zio_flags = ZIO_FLAG_SCRUB_THREAD | ZIO_FLAG_RAW | ZIO_FLAG_CANFAIL;
int zio_priority;
ASSERT(bp->blk_birth > dp->dp_scrub_min_txg);
--- a/usr/src/uts/common/fs/zfs/sys/zio.h Thu Dec 04 15:57:36 2008 -0800
+++ b/usr/src/uts/common/fs/zfs/sys/zio.h Thu Dec 04 16:47:42 2008 -0800
@@ -139,6 +139,7 @@
#define ZIO_FLAG_PROBE 0x10000
#define ZIO_FLAG_GANG_CHILD 0x20000
+#define ZIO_FLAG_RAW 0x40000
#define ZIO_FLAG_GANG_INHERIT \
(ZIO_FLAG_CANFAIL | \
--- a/usr/src/uts/common/fs/zfs/zio.c Thu Dec 04 15:57:36 2008 -0800
+++ b/usr/src/uts/common/fs/zfs/zio.c Thu Dec 04 16:47:42 2008 -0800
@@ -767,7 +767,8 @@
{
blkptr_t *bp = zio->io_bp;
- if (BP_GET_COMPRESS(bp) != ZIO_COMPRESS_OFF && zio->io_logical == zio) {
+ if (BP_GET_COMPRESS(bp) != ZIO_COMPRESS_OFF &&
+ zio->io_logical == zio && !(zio->io_flags & ZIO_FLAG_RAW)) {
uint64_t csize = BP_GET_PSIZE(bp);
void *cbuf = zio_buf_alloc(csize);