static int devfs_spec_fsync(struct vop_fsync_args *ap) { struct vnode *vp = ap->a_vp; int error; if (!vn_isdisk(vp, NULL)) return (0); /* * Flush all dirty buffers associated with a block device. */ error = vfsync(vp, ap->a_waitfor, 10000, NULL, NULL); return (error); }
/* * fsync is usually a NOP, but we must take action when unmounting or * when recycling. */ static int tmpfs_fsync(struct vop_fsync_args *v) { struct tmpfs_node *node; struct vnode *vp = v->a_vp; node = VP_TO_TMPFS_NODE(vp); tmpfs_update(vp); if (vp->v_type == VREG) { if (vp->v_flag & VRECLAIMED) { if (node->tn_links == 0) tmpfs_truncate(vp, 0); else vfsync(v->a_vp, v->a_waitfor, 1, NULL, NULL); } } return 0; }
/* ARGSUSED */ static int ffs_fsync(struct vop_fsync_args *ap) { struct vnode *vp = ap->a_vp; int error; if (vn_isdisk(vp, NULL)) if (vp->v_rdev && vp->v_rdev->si_mountpoint != NULL && (vp->v_rdev->si_mountpoint->mnt_flag & MNT_SOFTDEP)) softdep_fsync_mountdev(vp); /* * Flush all dirty buffers associated with a vnode. */ error = vfsync(vp, ap->a_waitfor, NIADDR + 1, ffs_checkdeferred, softdep_sync_metadata); if (error == 0) error = ffs_update(vp, (ap->a_waitfor == MNT_WAIT)); return (error); }
static int flushvncache(struct vnode *vp, int waitfor) { struct puffs_node *pn = VPTOPP(vp); struct vattr va; int error = 0; /* flush out information from our metacache, see vop_setattr */ if (pn->pn_stat & PNODE_METACACHE_MASK && (pn->pn_stat & PNODE_DYING) == 0) { vattr_null(&va); error = dosetattr(vp, &va, FSCRED, SETATTR_CHSIZE | (waitfor == MNT_NOWAIT ? 0 : SETATTR_ASYNC)); if (error) return error; } /* * flush pages to avoid being overly dirty */ vfsync(vp, waitfor, 0, NULL, NULL); return error; }
/* * hpfs_fsync(struct vnode *a_vp, int a_waitfor) */ static int hpfs_fsync(struct vop_fsync_args *ap) { struct vnode *vp = ap->a_vp; /* * Flush all dirty buffers associated with a vnode. */ #ifdef DIAGNOSTIC loop: #endif vfsync(vp, ap->a_waitfor, 0, NULL, NULL); #ifdef DIAGNOSTIC if (ap->a_waitfor == MNT_WAIT && !RB_EMPTY(&vp->v_rbdirty_tree)) { vprint("hpfs_fsync: dirty", vp); goto loop; } #endif /* * Write out the on-disc version of the vnode. */ return hpfs_update(VTOHP(vp)); }