SCCS-vsn: sys/miscfs/union/union_vnops.c 8.26
*
* %sccs.include.redist.c%
*
*
* %sccs.include.redist.c%
*
- * @(#)union_vnops.c 8.25 (Berkeley) %G%
+ * @(#)union_vnops.c 8.26 (Berkeley) %G%
*/
#include <sys/param.h>
*/
#include <sys/param.h>
+int
+union_revoke(ap)
+ struct vop_revoke_args /* {
+ struct vnode *a_vp;
+ int a_flags;
+ } */ *ap;
+{
+ struct vnode *vp = ap->a_vp;
+
+ if (UPPERVP(vp))
+ VOP_REVOKE(UPPERVP(vp), ap->a_flags);
+ if (LOWERVP(vp))
+ VOP_REVOKE(UPPERVP(vp), ap->a_flags);
+ vgone(vp);
+}
+
int
union_mmap(ap)
struct vop_mmap_args /* {
int
union_mmap(ap)
struct vop_mmap_args /* {
}
if ((un->un_flags & UN_CACHED) == 0)
}
if ((un->un_flags & UN_CACHED) == 0)
- VOP_REVOKE(ap->a_vp, 0);
un->un_flags |= UN_ULOCK;
}
#ifdef DIAGNOSTIC
un->un_flags |= UN_ULOCK;
}
#ifdef DIAGNOSTIC
- if (un->un_flags & UN_KLOCK)
+ if (un->un_flags & UN_KLOCK) {
vprint("union: dangling klock", vp);
panic("union: dangling upper lock (%lx)", vp);
vprint("union: dangling klock", vp);
panic("union: dangling upper lock (%lx)", vp);
{ &vop_lease_desc, union_lease }, /* lease */
{ &vop_ioctl_desc, union_ioctl }, /* ioctl */
{ &vop_select_desc, union_select }, /* select */
{ &vop_lease_desc, union_lease }, /* lease */
{ &vop_ioctl_desc, union_ioctl }, /* ioctl */
{ &vop_select_desc, union_select }, /* select */
+ { &vop_revoke_desc, union_revoke }, /* revoke */
{ &vop_mmap_desc, union_mmap }, /* mmap */
{ &vop_fsync_desc, union_fsync }, /* fsync */
{ &vop_seek_desc, union_seek }, /* seek */
{ &vop_mmap_desc, union_mmap }, /* mmap */
{ &vop_fsync_desc, union_fsync }, /* fsync */
{ &vop_seek_desc, union_seek }, /* seek */