summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArne Jansen <jansen@webgods.de>2016-07-08 15:05:13 +0200
committerDan McDonald <danmcd@joyent.com>2022-02-04 10:10:10 -0500
commitc2270953142194d5f260d803d60104fad12ab076 (patch)
treea50b91db96799cd063af2c2596e58160263e5cba
parentb8aa3def2e2531e693fba6d1f00a74339a4a663d (diff)
downloadillumos-joyent-c2270953142194d5f260d803d60104fad12ab076.tar.gz
6779 kernel panic in zfs_readdir shortly after mount
Reviewed by: Toomas Soome <tsoome@me.com> Reviewed by: Marcel Telka <marcel@telka.sk> Approved by: Dan McDonald <danmcd@joyent.com>
-rw-r--r--usr/src/uts/common/fs/zfs/zfs_dir.c1
-rw-r--r--usr/src/uts/common/fs/zfs/zfs_znode.c2
2 files changed, 3 insertions, 0 deletions
diff --git a/usr/src/uts/common/fs/zfs/zfs_dir.c b/usr/src/uts/common/fs/zfs/zfs_dir.c
index 3841c11d11..5d377a109e 100644
--- a/usr/src/uts/common/fs/zfs/zfs_dir.c
+++ b/usr/src/uts/common/fs/zfs/zfs_dir.c
@@ -717,6 +717,7 @@ zfs_rmnode(znode_t *zp)
dmu_tx_hold_free(tx, acl_obj, 0, DMU_OBJECT_END);
zfs_sa_upgrade_txholds(tx, zp);
+ dmu_tx_mark_netfree(tx);
error = dmu_tx_assign(tx, TXG_WAIT);
if (error) {
/*
diff --git a/usr/src/uts/common/fs/zfs/zfs_znode.c b/usr/src/uts/common/fs/zfs/zfs_znode.c
index 257d5b2a35..84ba5947fa 100644
--- a/usr/src/uts/common/fs/zfs/zfs_znode.c
+++ b/usr/src/uts/common/fs/zfs/zfs_znode.c
@@ -1246,6 +1246,8 @@ zfs_zget(zfsvfs_t *zfsvfs, uint64_t obj_num, znode_t **zpp)
if (zp == NULL) {
err = SET_ERROR(ENOENT);
} else {
+ if (zp->z_links == 0)
+ zp->z_unlinked = B_TRUE;
*zpp = zp;
}
ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num);