Skip site navigation (1)Skip section navigation (2)
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>