Page MenuHomeFreeBSD

D33611.id100438.diff
No OneTemporary

D33611.id100438.diff

Index: sys/fs/unionfs/union_subr.c
===================================================================
--- sys/fs/unionfs/union_subr.c
+++ sys/fs/unionfs/union_subr.c
@@ -454,13 +454,6 @@
vp->v_vnlock = &(vp->v_lock);
vp->v_data = NULL;
vp->v_object = NULL;
- if (vp->v_writecount > 0) {
- if (uvp != NULL)
- VOP_ADD_WRITECOUNT(uvp, -vp->v_writecount);
- else if (lvp != NULL)
- VOP_ADD_WRITECOUNT(lvp, -vp->v_writecount);
- } else if (vp->v_writecount < 0)
- vp->v_writecount = 0;
if (unp->un_hashtbl != NULL) {
/*
* Clear out any cached child vnodes. This should only
Index: sys/fs/unionfs/union_vnops.c
===================================================================
--- sys/fs/unionfs/union_vnops.c
+++ sys/fs/unionfs/union_vnops.c
@@ -2528,20 +2528,7 @@
vp = ap->a_vp;
unp = VTOUNIONFS(vp);
tvp = unp->un_uppervp != NULL ? unp->un_uppervp : unp->un_lowervp;
- VI_LOCK(vp);
- /* text refs are bypassed to lowervp */
- VNASSERT(vp->v_writecount >= 0, vp, ("wrong null writecount"));
- VNASSERT(vp->v_writecount + ap->a_inc >= 0, vp,
- ("wrong writecount inc %d", ap->a_inc));
- if (tvp != NULL)
- error = VOP_ADD_WRITECOUNT(tvp, ap->a_inc);
- else if (vp->v_writecount < 0)
- error = ETXTBSY;
- else
- error = 0;
- if (error == 0)
- vp->v_writecount += ap->a_inc;
- VI_UNLOCK(vp);
+ error = VOP_ADD_WRITECOUNT(tvp, ap->a_inc);
return (error);
}
@@ -2667,6 +2654,33 @@
return (res);
}
+static int
+unionfs_set_text(struct vop_set_text_args *ap)
+{
+ struct vnode *tvp;
+ struct unionfs_node *unp;
+ int error;
+
+ unp = VTOUNIONFS(ap->a_vp);
+ ASSERT_VOP_LOCKED(ap->a_vp, __func__);
+ tvp = unp->un_uppervp != NULL ? unp->un_uppervp : unp->un_lowervp;
+ error = VOP_SET_TEXT(tvp);
+ return (error);
+}
+
+static int
+unionfs_unset_text(struct vop_unset_text_args *ap)
+{
+ struct vnode *tvp;
+ struct unionfs_node *unp;
+
+ ASSERT_VOP_LOCKED(ap->a_vp, __func__);
+ unp = VTOUNIONFS(ap->a_vp);
+ tvp = unp->un_uppervp != NULL ? unp->un_uppervp : unp->un_lowervp;
+ VOP_UNSET_TEXT_CHECKED(tvp);
+ return (0);
+}
+
struct vop_vector unionfs_vnodeops = {
.vop_default = &default_vnodeops,
@@ -2718,5 +2732,7 @@
.vop_vptofh = unionfs_vptofh,
.vop_add_writecount = unionfs_add_writecount,
.vop_vput_pair = unionfs_vput_pair,
+ .vop_set_text = unionfs_set_text,
+ .vop_unset_text = unionfs_unset_text,
};
VFS_VOP_VECTOR_REGISTER(unionfs_vnodeops);

File Metadata

Mime Type
text/plain
Expires
Thu, Mar 12, 2:46 PM (21 h, 54 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29564867
Default Alt Text
D33611.id100438.diff (2 KB)

Event Timeline