Module Name:    src
Committed By:   riastradh
Date:           Sat Apr 11 04:35:39 UTC 2015

Modified Files:
        src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_rlock.c

Log Message:
Make sure rl_t::r_zp is always initialized.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 \
    src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_rlock.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_rlock.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_rlock.c:1.3 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_rlock.c:1.4
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_rlock.c:1.3	Sat Apr 11 02:33:16 2015
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_rlock.c	Sat Apr 11 04:35:39 2015
@@ -229,6 +229,7 @@ zfs_range_proxify(avl_tree_t *tree, rl_t
 
 	/* create a proxy range lock */
 	proxy = kmem_alloc(sizeof (rl_t), KM_SLEEP);
+	proxy->r_zp = rl->r_zp;
 	proxy->r_off = rl->r_off;
 	proxy->r_len = rl->r_len;
 	proxy->r_cnt = 1;
@@ -261,6 +262,7 @@ zfs_range_split(avl_tree_t *tree, rl_t *
 
 	/* create the rear proxy range lock */
 	rear = kmem_alloc(sizeof (rl_t), KM_SLEEP);
+	rear->r_zp = rl->r_zp;
 	rear->r_off = off;
 	rear->r_len = rl->r_off + rl->r_len - off;
 	rear->r_cnt = rl->r_cnt;
@@ -283,12 +285,13 @@ zfs_range_split(avl_tree_t *tree, rl_t *
  * Create and add a new proxy range lock for the supplied range.
  */
 static void
-zfs_range_new_proxy(avl_tree_t *tree, uint64_t off, uint64_t len)
+zfs_range_new_proxy(avl_tree_t *tree, uint64_t off, uint64_t len, znode_t *zp)
 {
 	rl_t *rl;
 
 	ASSERT(len);
 	rl = kmem_alloc(sizeof (rl_t), KM_SLEEP);
+	rl->r_zp = zp;
 	rl->r_off = off;
 	rl->r_len = len;
 	rl->r_cnt = 1;
@@ -305,6 +308,7 @@ zfs_range_new_proxy(avl_tree_t *tree, ui
 static void
 zfs_range_add_reader(avl_tree_t *tree, rl_t *new, rl_t *prev, avl_index_t where)
 {
+	znode_t *zp = new->r_zp;
 	rl_t *next;
 	uint64_t off = new->r_off;
 	uint64_t len = new->r_len;
@@ -343,7 +347,7 @@ zfs_range_add_reader(avl_tree_t *tree, r
 
 	if (off < next->r_off) {
 		/* Add a proxy for initial range before the overlap */
-		zfs_range_new_proxy(tree, off, next->r_off - off);
+		zfs_range_new_proxy(tree, off, next->r_off - off, zp);
 	}
 
 	new->r_cnt = 0; /* will use proxies in tree */
@@ -360,7 +364,7 @@ zfs_range_add_reader(avl_tree_t *tree, r
 			/* there's a gap */
 			ASSERT3U(next->r_off, >, prev->r_off + prev->r_len);
 			zfs_range_new_proxy(tree, prev->r_off + prev->r_len,
-			    next->r_off - (prev->r_off + prev->r_len));
+			    next->r_off - (prev->r_off + prev->r_len), zp);
 		}
 		if (off + len == next->r_off + next->r_len) {
 			/* exact overlap with end */
@@ -381,7 +385,7 @@ zfs_range_add_reader(avl_tree_t *tree, r
 
 	/* Add the remaining end range. */
 	zfs_range_new_proxy(tree, prev->r_off + prev->r_len,
-	    (off + len) - (prev->r_off + prev->r_len));
+	    (off + len) - (prev->r_off + prev->r_len), zp);
 }
 
 /*

Reply via email to