View | Details | Raw Unified | Return to bug 275871 | Differences between
and this patch

Collapse All | Expand All

(-)b/sys/fs/unionfs/union_vnops.c (-4 / +18 lines)
Lines 2691-2699 unionfs_vput_pair(struct vop_vput_pair_args *ap) Link Here
2691
		vp = *vpp;
2691
		vp = *vpp;
2692
2692
2693
	if (vp != NULLVP) {
2693
	if (vp != NULLVP) {
2694
		unp = VTOUNIONFS(vp);
2694
		if (vp->v_type != VSOCK) {
2695
		uvp = unp->un_uppervp;
2695
			unp = VTOUNIONFS(vp);
2696
		lvp = unp->un_lowervp;
2696
			uvp = unp->un_uppervp;
2697
			lvp = unp->un_lowervp;
2698
		} else {
2699
			if (udvp != NULLVP && vp->v_mount == udvp->v_mount)
2700
				uvp = vp;
2701
			else {
2702
				if (ldvp == NULLVP || vp->v_mount != ldvp->v_mount)
2703
					panic("%s: ldvp %p does not contain vp %p",
2704
					    __func__, ldvp, vp);
2705
				/*VNASSERT(ldvp != NULLVP && vp->v_mount == ldvp->v_mount,
2706
				    vp, ("%s: ldvp %p does not contain vp %p",
2707
				    __func__, ldvp, vp));*/
2708
				lvp = vp;
2709
			}
2710
		}
2697
		if (uvp != NULLVP)
2711
		if (uvp != NULLVP)
2698
			vref(uvp);
2712
			vref(uvp);
2699
		if (lvp != NULLVP)
2713
		if (lvp != NULLVP)
Lines 2759-2765 unionfs_vput_pair(struct vop_vput_pair_args *ap) Link Here
2759
	 * underlying vnodes have been unlocked, so vp may have been reclaimed.
2773
	 * underlying vnodes have been unlocked, so vp may have been reclaimed.
2760
	 */
2774
	 */
2761
	vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
2775
	vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
2762
	if (vp->v_data == NULL && vfs_busy(mp, MBF_NOWAIT) == 0) {
2776
	if (vp->v_data == NULL && unp != NULL && vfs_busy(mp, MBF_NOWAIT) == 0) {
2763
		vput(vp);
2777
		vput(vp);
2764
		error = unionfs_nodeget(mp, uvp, lvp, dvp, &tempvp, NULL);
2778
		error = unionfs_nodeget(mp, uvp, lvp, dvp, &tempvp, NULL);
2765
		if (error == 0) {
2779
		if (error == 0) {

Return to bug 275871