Author: mm
Date: Wed Nov 14 00:43:27 2012
New Revision: 243013
URL: http://svnweb.freebsd.org/changeset/base/243013

Log:
  Update vendor/illumos/dist and vendor/illumos-sys/dist
  to illumos-gate 13887:196932ec9e6a
  (illumos zfs issue #3236)

Modified:
  vendor/illumos/dist/cmd/ztest/ztest.c

Changes in other areas also in this revision:
Modified:
  vendor-sys/illumos/dist/uts/common/fs/zfs/arc.c
  vendor-sys/illumos/dist/uts/common/fs/zfs/dbuf.c
  vendor-sys/illumos/dist/uts/common/fs/zfs/dmu.c
  vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_pool.c
  vendor-sys/illumos/dist/uts/common/fs/zfs/spa_misc.c
  vendor-sys/illumos/dist/uts/common/fs/zfs/sys/dbuf.h
  vendor-sys/illumos/dist/uts/common/fs/zfs/sys/dmu.h
  vendor-sys/illumos/dist/uts/common/fs/zfs/sys/zio.h
  vendor-sys/illumos/dist/uts/common/fs/zfs/sys/zio_impl.h
  vendor-sys/illumos/dist/uts/common/fs/zfs/zfs_vnops.c
  vendor-sys/illumos/dist/uts/common/fs/zfs/zio.c
  vendor-sys/illumos/dist/uts/common/fs/zfs/zvol.c

Modified: vendor/illumos/dist/cmd/ztest/ztest.c
==============================================================================
--- vendor/illumos/dist/cmd/ztest/ztest.c       Wed Nov 14 00:40:40 2012        
(r243012)
+++ vendor/illumos/dist/cmd/ztest/ztest.c       Wed Nov 14 00:43:27 2012        
(r243013)
@@ -202,6 +202,7 @@ enum ztest_io_type {
        ZTEST_IO_WRITE_ZEROES,
        ZTEST_IO_TRUNCATE,
        ZTEST_IO_SETATTR,
+       ZTEST_IO_REWRITE,
        ZTEST_IO_TYPES
 };
 
@@ -1865,6 +1866,12 @@ ztest_get_data(void *arg, lr_write_t *lr
                    DMU_READ_NO_PREFETCH);
 
                if (error == 0) {
+                       blkptr_t *obp = dmu_buf_get_blkptr(db);
+                       if (obp) {
+                               ASSERT(BP_IS_HOLE(bp));
+                               *bp = *obp;
+                       }
+
                        zgd->zgd_db = db;
                        zgd->zgd_bp = bp;
 
@@ -2010,6 +2017,9 @@ ztest_remove(ztest_ds_t *zd, ztest_od_t 
                        continue;
                }
 
+               /*
+                * No object was found.
+                */
                if (od->od_object == 0)
                        continue;
 
@@ -2125,6 +2135,7 @@ ztest_prealloc(ztest_ds_t *zd, uint64_t 
 static void
 ztest_io(ztest_ds_t *zd, uint64_t object, uint64_t offset)
 {
+       int err;
        ztest_block_tag_t wbt;
        dmu_object_info_t doi;
        enum ztest_io_type io_type;
@@ -2177,6 +2188,25 @@ ztest_io(ztest_ds_t *zd, uint64_t object
        case ZTEST_IO_SETATTR:
                (void) ztest_setattr(zd, object);
                break;
+
+       case ZTEST_IO_REWRITE:
+               (void) rw_rdlock(&ztest_name_lock);
+               err = ztest_dsl_prop_set_uint64(zd->zd_name,
+                   ZFS_PROP_CHECKSUM, spa_dedup_checksum(ztest_spa),
+                   B_FALSE);
+               VERIFY(err == 0 || err == ENOSPC);
+               err = ztest_dsl_prop_set_uint64(zd->zd_name,
+                   ZFS_PROP_COMPRESSION,
+                   ztest_random_dsl_prop(ZFS_PROP_COMPRESSION),
+                   B_FALSE);
+               VERIFY(err == 0 || err == ENOSPC);
+               (void) rw_unlock(&ztest_name_lock);
+
+               VERIFY0(dmu_read(zd->zd_os, object, offset, blocksize, data,
+                   DMU_READ_NO_PREFETCH));
+
+               (void) ztest_write(zd, object, offset, blocksize, data);
+               break;
        }
 
        (void) rw_unlock(&zd->zd_zilog_lock);
@@ -2264,7 +2294,12 @@ ztest_zil_remount(ztest_ds_t *zd, uint64
 {
        objset_t *os = zd->zd_os;
 
-       VERIFY(mutex_lock(&zd->zd_dirobj_lock) == 0);
+       /*
+        * We grab the zd_dirobj_lock to ensure that no other thread is
+        * updating the zil (i.e. adding in-memory log records) and the
+        * zd_zilog_lock to block any I/O.
+        */
+       VERIFY0(mutex_lock(&zd->zd_dirobj_lock));
        (void) rw_wrlock(&zd->zd_zilog_lock);
 
        /* zfsvfs_teardown() */
@@ -4917,8 +4952,8 @@ ztest_ddt_repair(ztest_ds_t *zd, uint64_
         */
        for (int i = 0; i < copies; i++) {
                uint64_t offset = i * blocksize;
-               VERIFY(dmu_buf_hold(os, object, offset, FTAG, &db,
-                   DMU_READ_NO_PREFETCH) == 0);
+               VERIFY0(dmu_buf_hold(os, object, offset, FTAG, &db,
+                   DMU_READ_NO_PREFETCH));
                ASSERT(db->db_offset == offset);
                ASSERT(db->db_size == blocksize);
                ASSERT(ztest_pattern_match(db->db_data, db->db_size, pattern) ||
@@ -4934,8 +4969,8 @@ ztest_ddt_repair(ztest_ds_t *zd, uint64_
        /*
         * Find out what block we got.
         */
-       VERIFY(dmu_buf_hold(os, object, 0, FTAG, &db,
-           DMU_READ_NO_PREFETCH) == 0);
+       VERIFY0(dmu_buf_hold(os, object, 0, FTAG, &db,
+           DMU_READ_NO_PREFETCH));
        blk = *((dmu_buf_impl_t *)db)->db_blkptr;
        dmu_buf_rele(db, FTAG);
 
@@ -5612,6 +5647,8 @@ ztest_freeze(void)
        kernel_init(FREAD | FWRITE);
        VERIFY3U(0, ==, spa_open(ztest_opts.zo_pool, &spa, FTAG));
        VERIFY3U(0, ==, ztest_dataset_open(0));
+       spa->spa_debug = B_TRUE;
+       ztest_spa = spa;
 
        /*
         * Force the first log block to be transactionally allocated.
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to