Module Name: src Committed By: martin Date: Sun Oct 6 11:18:01 UTC 2019
Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs [netbsd-9]: zfs_vnops.c Log Message: Pull up following revision(s) (requested by brad in ticket #289): external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c: revision 1.53 For ZFS on NetBSD there are a number of functions called zfs_netbsd_{create,mknod,link,etc..} that call functions called zfs_{create,mknod,link,etc..}. These later functions may return a error code along with a *vpp that is NULL. This situation was not handled by the zfs_netbsd_* functions and would result in a panic in a number of cases. The simplest to trigger it was filling up a dataset or pool resulting in a over quota condition. An attempt to create another file, or directory at that point would panic. To generate a diff of this commit: cvs rdiff -u -r1.50.2.2 -r1.50.2.3 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.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_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.50.2.2 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.50.2.3 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.50.2.2 Mon Aug 26 14:05:25 2019 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Sun Oct 6 11:18:01 2019 @@ -5318,7 +5318,8 @@ zfs_netbsd_create(void *v) KASSERT(VOP_ISLOCKED(dvp) == LK_EXCLUSIVE); if (error == 0) VN_KNOTE(dvp, NOTE_WRITE); - VOP_UNLOCK(*vpp, 0); + if (*vpp != NULL) + VOP_UNLOCK(*vpp, 0); return (error); } @@ -5358,7 +5359,8 @@ zfs_netbsd_mknod(void *v) KASSERT(VOP_ISLOCKED(dvp) == LK_EXCLUSIVE); if (error == 0) VN_KNOTE(dvp, NOTE_WRITE); - VOP_UNLOCK(*vpp, 0); + if (*vpp != NULL) + VOP_UNLOCK(*vpp, 0); return (error); } @@ -5428,7 +5430,8 @@ zfs_netbsd_mkdir(void *v) KASSERT(VOP_ISLOCKED(dvp) == LK_EXCLUSIVE); if (error == 0) VN_KNOTE(dvp, NOTE_WRITE | NOTE_LINK); - VOP_UNLOCK(*vpp, 0); + if (*vpp != NULL) + VOP_UNLOCK(*vpp, 0); return (error); } @@ -5717,7 +5720,8 @@ zfs_netbsd_symlink(void *v) VN_KNOTE(ap->a_dvp, NOTE_WRITE); KASSERT((error == 0) == (*vpp != NULL)); KASSERT(VOP_ISLOCKED(dvp) == LK_EXCLUSIVE); - VOP_UNLOCK(*vpp, 0); + if (*vpp != NULL) + VOP_UNLOCK(*vpp, 0); return (error); }