Module Name: src Committed By: hannken Date: Fri Feb 22 09:01:32 UTC 2019
Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_replay.c Log Message: Always set "cn_namelen" in addition to "cn_nameptr". Fix vnode locking for REMOVE, RMDIR and RENAME. To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.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_replay.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c:1.11 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c:1.12 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c:1.11 Mon May 28 21:05:07 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c Fri Feb 22 09:01:32 2019 @@ -501,6 +501,9 @@ zfs_replay_create(zfsvfs_t *zfsvfs, lr_c name = (char *)start; cn.cn_nameptr = name; +#ifdef __NetBSD__ + cn.cn_namelen = strlen(name); +#endif error = VOP_CREATE(ZTOV(dzp), &vp, &cn, &xva.xva_vattr /*,vflg*/); break; case TX_MKDIR_ATTR: @@ -519,6 +522,9 @@ zfs_replay_create(zfsvfs_t *zfsvfs, lr_c name = (char *)(lr + 1); cn.cn_nameptr = name; +#ifdef __NetBSD__ + cn.cn_namelen = strlen(name); +#endif error = VOP_MKDIR(ZTOV(dzp), &vp, &cn, &xva.xva_vattr /*,vflg*/); break; case TX_MKXATTR: @@ -528,6 +534,9 @@ zfs_replay_create(zfsvfs_t *zfsvfs, lr_c name = (char *)(lr + 1); link = name + strlen(name) + 1; cn.cn_nameptr = name; +#ifdef __NetBSD__ + cn.cn_namelen = strlen(name); +#endif error = VOP_SYMLINK(ZTOV(dzp), &vp, &cn, &xva.xva_vattr, link /*,vflg*/); break; default: @@ -585,7 +594,7 @@ zfs_replay_remove(zfsvfs_t *zfsvfs, lr_r goto fail; } #ifdef __NetBSD__ - VOP_UNLOCK(vp, 0); + vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); #endif switch ((int)lr->lr_common.lrc_txtype) { @@ -596,11 +605,12 @@ zfs_replay_remove(zfsvfs_t *zfsvfs, lr_r error = VOP_RMDIR(ZTOV(dzp), vp, &cn /*,vflg*/); break; default: +#ifdef __NetBSD__ + vput(vp); +#endif error = SET_ERROR(ENOTSUP); } -#ifdef __NetBSD__ - vrele(vp); -#else +#ifndef __NetBSD__ vput(vp); #endif VOP_UNLOCK(ZTOV(dzp), 0); @@ -635,6 +645,9 @@ zfs_replay_link(zfsvfs_t *zfsvfs, lr_lin vflg |= FIGNORECASE; cn.cn_nameptr = name; +#ifdef __NetBSD__ + cn.cn_namelen = strlen(name); +#endif cn.cn_cred = kcred; #ifndef __NetBSD__ cn.cn_thread = curthread; @@ -698,7 +711,9 @@ zfs_replay_rename(zfsvfs_t *zfsvfs, lr_r VOP_UNLOCK(ZTOV(sdzp), 0); if (error != 0) goto fail; +#ifndef __NetBSD__ VOP_UNLOCK(svp, 0); +#endif tcn.cn_nameptr = tname; tcn.cn_namelen = strlen(tname); @@ -718,7 +733,8 @@ zfs_replay_rename(zfsvfs_t *zfsvfs, lr_r goto fail; } #ifdef __NetBSD__ - vn_lock(tvp, LK_EXCLUSIVE | LK_RETRY); + if (tvp != NULL) + vn_lock(tvp, LK_EXCLUSIVE | LK_RETRY); #endif error = VOP_RENAME(ZTOV(sdzp), svp, &scn, ZTOV(tdzp), tvp, &tcn /*,vflg*/);