Date: Tue, 14 Sep 2010 10:20:03 GMT From: Martin Matuska <mm@FreeBSD.org> To: freebsd-bugs@FreeBSD.org Subject: Re: kern/150544: Panic, when viewing the list of ZFS snapshots Message-ID: <201009141020.o8EAK3Of085577@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/150544; it has been noted by GNATS.
From: Martin Matuska <mm@FreeBSD.org>
To: jhell <jhell@DataIX.net>
Cc: Andriy Gapon <avg@freebsd.org>,
"Vladislav V. Prodan" <universite@ukr.net>,
bug-followup@freebsd.org
Subject: Re: kern/150544: Panic, when viewing the list of ZFS snapshots
Date: Tue, 14 Sep 2010 12:10:13 +0200
This is a multi-part message in MIME format.
--------------020008070507050708080007
Content-Type: text/plain; charset=windows-1250
Content-Transfer-Encoding: 8bit
This new patch should be complete for this issue, my testing succeeds.
Dňa 14. 9. 2010 11:16, jhell wrote / napísal(a):
> On 09/14/2010 05:01, Andriy Gapon wrote:
>> on 14/09/2010 11:54 jhell said the following:
>>> Andriy,
>>> I backed your patch out and applied Martin's.
>>>
>>> Martin,
>>>
>>> That patch did not work. core.txt.41 backtrace attached.
>>
>> It was kind of obvious (to me at least) that the Martin's patch alone won't work.
>> I think I already explained what the problem is (zfsctl_mknode_shares passing
>> zfsctl_ops_shares to gfs_dir_create with all vops in zfsctl_ops_shares being NULL).
>>
>
> Yeah, It didn't seem like it was really that simple for just a lock
> after I seen that message you posted before about that content/context.
>
> If that (.zfs/shares) is really not needed and we really have no way to
> use it at the moment wouldn't be useful to go through and ifdef those
> parts that effect that ?
>
--------------020008070507050708080007
Content-Type: text/plain;
name="zfs_ctldir.c.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="zfs_ctldir.c.patch"
Index: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c
===================================================================
--- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c (revision 212358)
+++ sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c (working copy)
@@ -1101,8 +1101,9 @@
return (ENOTSUP);
}
if ((error = zfs_zget(zfsvfs, zfsvfs->z_shares_dir, &dzp)) == 0) {
+ vn_lock(ZTOV(dzp), LK_SHARED | LK_RETRY);
error = VOP_READDIR(ZTOV(dzp), uiop, cr, eofp, ap->a_ncookies, ap->a_cookies);
- VN_RELE(ZTOV(dzp));
+ VN_URELE(ZTOV(dzp));
} else {
*eofp = 1;
error = ENOENT;
@@ -1149,6 +1150,7 @@
NULL, NULL);
sdp = vp->v_data;
sdp->zc_cmtime = ((zfsctl_node_t *)pvp->v_data)->zc_cmtime;
+ VOP_UNLOCK(vp, 0);
return (vp);
}
@@ -1176,8 +1178,9 @@
return (ENOTSUP);
}
if ((error = zfs_zget(zfsvfs, zfsvfs->z_shares_dir, &dzp)) == 0) {
+ vn_lock(ZTOV(dzp), LK_SHARED | LK_RETRY);
error = VOP_GETATTR(ZTOV(dzp), vap, cr);
- VN_RELE(ZTOV(dzp));
+ VN_URELE(ZTOV(dzp));
}
ZFS_EXIT(zfsvfs);
return (error);
@@ -1253,6 +1256,20 @@
.vop_fid = zfsctl_common_fid,
};
+static struct vop_vector zfsctl_ops_shares = {
+ .vop_default = &default_vnodeops,
+ .vop_open = zfsctl_common_open,
+ .vop_close = zfsctl_common_close,
+ .vop_ioctl = VOP_EINVAL,
+ .vop_getattr = zfsctl_shares_getattr,
+ .vop_access = zfsctl_common_access,
+ .vop_readdir = zfsctl_shares_readdir,
+ .vop_lookup = zfsctl_shares_lookup,
+ .vop_inactive = gfs_vop_inactive,
+ .vop_reclaim = zfsctl_common_reclaim,
+ .vop_fid = zfsctl_shares_fid,
+};
+
/*
* pvp is the GFS vnode '.zfs/snapshot'.
*
--------------020008070507050708080007--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201009141020.o8EAK3Of085577>
