> On 24. Nov 2020, at 19:16, Yorick Hardy <yorickha...@gmail.com> wrote:
> 
> Dear David,
> 
> On 2020-11-24, Yorick Hardy wrote:
>> Dear David,
>> 
>> On 2020-11-22, David Brownlee wrote:
>>> I'm seeing a (new?) panic on netbsd-9 with zfs. It seems to trigger
>>> when a newly created zfs pool attempts to be mounted:
>>> 
>>> panic: vrelel: bad ref count
>>> cpu0: Begin traceback...
>>> vpanic() at netbsd:vpanic+0x160
>>> vcache_reclaim() at netbsd:vcache_reclaim
>>> vrelel() at netbsd:vrelel+0x22e
>>> vdev_disk_open.part.4() at zfs:vdev_disk_open.part.4+0x44e
>>> vdev_open() at zfs:vdev_open+0x9e
>>> vdev_open_children() at zfs:vdev_open_children+0x39
>>> vdev_root_open() at zfs:vdev_root_open+0x33
>>> vdev_open() at zfs:vdev_open+0x9e
>>> vdev_create() at zfs:vdev_create+0x1b
>>> spa_create() at zfs:spa_create+0x28c
>>> zfs_ioc_pool_create() at zfs:zfs_ioc_pool_create+0x19b
>>> zfsdev_ioctl() at zfs:zfsdev_ioctl+0x265
>>> nb_zfsdev_ioctl() at zfs:nb_zfsdev_ioctl+0x38
>>> VOP_IOCTL() at netbsd:VOP_IOCTL+0x54
>>> vn_ioctl() at netbsd:vn_ioctl+0xa5
>>> sys_ioctl() at netbsd:sys_ioctl+0x5ab
>>> syscall() at netbsd:syscall+0x157
>>> --- syscall (number 54) ---
>>> 7e047af6822a:
>>> cpu0: End traceback...
>>> 
>>> Anyone seeing anything similar (I continue to have a bunch of other
>>> boxes which use zfs without issue)
>>> 
>>> David
>> 
>> I don't know if it helps, but it looks like vn_close(vp,..) should be called 
>> instead
>> of vrele(vp) at
>> 
>> https://nxr.netbsd.org/xref/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c#218
>> 
>> and
>> 
>> https://nxr.netbsd.org/xref/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c#250
> 
> Unless I am mistaken, I think you are hitting the error path which
> should probably call vn_close as below. My machine is a bit old, so
> I have not even compile tested yet and there is still the question
> of why/if you are in the error path.
> 
> If it does not help, apologies in advance!
> 
> --
> Kind regards,
> 
> Yorick Hardy
> 
> Index: external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c
> ===================================================================
> RCS file: 
> /cvsroot/src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c,v
> retrieving revision 1.18
> diff -u -r1.18 vdev_disk.c
> --- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c        25 Jun 
> 2020 09:39:15 -0000      1.18
> +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c        24 Nov 
> 2020 18:10:07 -0000
> @@ -215,7 +215,8 @@
>               return (SET_ERROR(error));
>       }
>       if (vp->v_type != VBLK) {
> -             vrele(vp);
> +             /* VN_RELE(vp); ?? */
> +             vn_close(vp, FREAD|FWRITE, kcred);
>               vd->vdev_stat.vs_aux = VDEV_AUX_OPEN_FAILED;
>               return (SET_ERROR(EINVAL));
>       }
> @@ -247,7 +248,8 @@
>       error = workqueue_create(&dvd->vd_wq, "vdevsync",
>           vdev_disk_flush, dvd, PRI_NONE, IPL_NONE, WQ_MPSAFE);
>       if (error != 0) {
> -             vrele(vp);
> +             /* VN_RELE(vp); ?? */
> +             vn_close(vp, FREAD|FWRITE, kcred);
>               return (SET_ERROR(error));
>       }

Good catch Yorick, though I prefer the attached diff.
Pleasae commit and request pullup to -9.

--
J. Hannken-Illjes - hann...@eis.cs.tu-bs.de - TU Braunschweig

Attachment: vdev_disk.diff
Description: Binary data

Attachment: signature.asc
Description: Message signed with OpenPGP

Reply via email to