Author: mav
Date: Tue Jun  4 00:42:51 2019
New Revision: 348596
URL: https://svnweb.freebsd.org/changeset/base/348596

Log:
  9689 zfs range lock code should not be zpl-specific
  
  illumos/illumos-gate@7931524763ef94dc16989451dddd206563d03bb4
  
  Reviewed by: Serapheim Dimitropoulos <[email protected]>
  Reviewed by: George Wilson <[email protected]>
  Approved by: Robert Mustacchi <[email protected]>
  Author:     Matthew Ahrens <[email protected]>

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/sys/dmu.h
  vendor-sys/illumos/dist/uts/common/fs/zfs/sys/zfs_rlock.h
  vendor-sys/illumos/dist/uts/common/fs/zfs/sys/zfs_znode.h
  vendor-sys/illumos/dist/uts/common/fs/zfs/zfs_rlock.c
  vendor-sys/illumos/dist/uts/common/fs/zfs/zfs_vnops.c
  vendor-sys/illumos/dist/uts/common/fs/zfs/zfs_znode.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       Tue Jun  4 00:01:37 2019        
(r348595)
+++ vendor/illumos/dist/cmd/ztest/ztest.c       Tue Jun  4 00:42:51 2019        
(r348596)
@@ -237,7 +237,9 @@ typedef struct bufwad {
 } bufwad_t;
 
 /*
- * XXX -- fix zfs range locks to be generic so we can use them here.
+ * It would be better to use a rangelock_t per object.  Unfortunately
+ * the rangelock_t is not a drop-in replacement for rl_t, because we
+ * still need to map from object ID to rangelock_t.
  */
 typedef enum {
        RL_READER,
@@ -1845,12 +1847,12 @@ static void
 ztest_get_done(zgd_t *zgd, int error)
 {
        ztest_ds_t *zd = zgd->zgd_private;
-       uint64_t object = zgd->zgd_rl->rl_object;
+       uint64_t object = ((rl_t *)zgd->zgd_lr)->rl_object;
 
        if (zgd->zgd_db)
                dmu_buf_rele(zgd->zgd_db, zgd);
 
-       ztest_range_unlock(zgd->zgd_rl);
+       ztest_range_unlock((rl_t *)zgd->zgd_lr);
        ztest_object_unlock(zd, object);
 
        umem_free(zgd, sizeof (*zgd));
@@ -1900,8 +1902,8 @@ ztest_get_data(void *arg, lr_write_t *lr, char *buf, s
        zgd->zgd_private = zd;
 
        if (buf != NULL) {      /* immediate write */
-               zgd->zgd_rl = ztest_range_lock(zd, object, offset, size,
-                   RL_READER);
+               zgd->zgd_lr = (struct locked_range *)ztest_range_lock(zd,
+                   object, offset, size, RL_READER);
 
                error = dmu_read(os, object, offset, size, buf,
                    DMU_READ_NO_PREFETCH);
@@ -1915,8 +1917,8 @@ ztest_get_data(void *arg, lr_write_t *lr, char *buf, s
                        offset = 0;
                }
 
-               zgd->zgd_rl = ztest_range_lock(zd, object, offset, size,
-                   RL_READER);
+               zgd->zgd_lr = (struct locked_range *)ztest_range_lock(zd,
+                   object, offset, size, RL_READER);
 
                error = dmu_buf_hold(os, object, offset, zgd, &db,
                    DMU_READ_NO_PREFETCH);
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to