From 24a31b7031ce5cece3e311915727fbf5bf3d3a94 Mon Sep 17 00:00:00 2001 From: Kirk McKusick Date: Sun, 26 Nov 1989 05:59:36 -0800 Subject: [PATCH] wrappers for read/write/close of special devices to set times as appropriate SCCS-vsn: sys/ufs/ffs/ffs_vnops.c 7.24 SCCS-vsn: sys/ufs/ffs/ufs_vnops.c 7.24 SCCS-vsn: sys/ufs/lfs/lfs_vnops.c 7.24 SCCS-vsn: sys/ufs/ufs/ufs_vnops.c 7.24 --- usr/src/sys/ufs/ffs/ffs_vnops.c | 65 +++++++++++++++++++++++++++++---- usr/src/sys/ufs/ffs/ufs_vnops.c | 65 +++++++++++++++++++++++++++++---- usr/src/sys/ufs/lfs/lfs_vnops.c | 65 +++++++++++++++++++++++++++++---- usr/src/sys/ufs/ufs/ufs_vnops.c | 65 +++++++++++++++++++++++++++++---- 4 files changed, 232 insertions(+), 28 deletions(-) diff --git a/usr/src/sys/ufs/ffs/ffs_vnops.c b/usr/src/sys/ufs/ffs/ffs_vnops.c index 1430af9f31..5b74189915 100644 --- a/usr/src/sys/ufs/ffs/ffs_vnops.c +++ b/usr/src/sys/ufs/ffs/ffs_vnops.c @@ -14,7 +14,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * @(#)ffs_vnops.c 7.23 (Berkeley) %G% + * @(#)ffs_vnops.c 7.24 (Berkeley) %G% */ #include "param.h" @@ -105,12 +105,12 @@ struct vnodeops ufs_vnodeops = { int spec_lookup(), spec_open(), - spec_read(), - spec_write(), + ufsspec_read(), + ufsspec_write(), spec_strategy(), spec_ioctl(), spec_select(), - spec_close(), + ufsspec_close(), spec_badop(), spec_nullop(); @@ -119,12 +119,12 @@ struct vnodeops spec_inodeops = { spec_badop, /* create */ spec_badop, /* mknod */ spec_open, /* open */ - spec_close, /* close */ + ufsspec_close, /* close */ ufs_access, /* access */ ufs_getattr, /* getattr */ ufs_setattr, /* setattr */ - spec_read, /* read */ - spec_write, /* write */ + ufsspec_read, /* read */ + ufsspec_write, /* write */ spec_ioctl, /* ioctl */ spec_select, /* select */ spec_badop, /* mmap */ @@ -1297,6 +1297,57 @@ ufs_strategy(bp) return (0); } +/* + * Read wrapper for special devices. + */ +ufsspec_read(vp, uio, ioflag, cred) + struct vnode *vp; + struct uio *uio; + int ioflag; + struct ucred *cred; +{ + + /* + * Set access flag. + */ + VTOI(vp)->i_flag |= IACC; + return (spec_read(vp, uio, ioflag, cred)); +} + +/* + * Write wrapper for special devices. + */ +ufsspec_write(vp, uio, ioflag, cred) + struct vnode *vp; + struct uio *uio; + int ioflag; + struct ucred *cred; +{ + + /* + * Set update and change flags. + */ + VTOI(vp)->i_flag |= IUPD|ICHG; + return (spec_write(vp, uio, ioflag, cred)); +} + +/* + * Close wrapper for special devices. + * + * Update the times on the inode then do device close. + */ +ufsspec_close(vp, fflag, cred) + struct vnode *vp; + int fflag; + struct ucred *cred; +{ + register struct inode *ip = VTOI(vp); + + if (vp->v_count > 1 && !(ip->i_flag & ILOCKED)) + ITIMES(ip, &time, &time); + return (spec_close(vp, fflag, cred)); +} + /* * Make a new file. */ diff --git a/usr/src/sys/ufs/ffs/ufs_vnops.c b/usr/src/sys/ufs/ffs/ufs_vnops.c index e54052ee01..7c7b708b88 100644 --- a/usr/src/sys/ufs/ffs/ufs_vnops.c +++ b/usr/src/sys/ufs/ffs/ufs_vnops.c @@ -14,7 +14,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * @(#)ufs_vnops.c 7.23 (Berkeley) %G% + * @(#)ufs_vnops.c 7.24 (Berkeley) %G% */ #include "param.h" @@ -105,12 +105,12 @@ struct vnodeops ufs_vnodeops = { int spec_lookup(), spec_open(), - spec_read(), - spec_write(), + ufsspec_read(), + ufsspec_write(), spec_strategy(), spec_ioctl(), spec_select(), - spec_close(), + ufsspec_close(), spec_badop(), spec_nullop(); @@ -119,12 +119,12 @@ struct vnodeops spec_inodeops = { spec_badop, /* create */ spec_badop, /* mknod */ spec_open, /* open */ - spec_close, /* close */ + ufsspec_close, /* close */ ufs_access, /* access */ ufs_getattr, /* getattr */ ufs_setattr, /* setattr */ - spec_read, /* read */ - spec_write, /* write */ + ufsspec_read, /* read */ + ufsspec_write, /* write */ spec_ioctl, /* ioctl */ spec_select, /* select */ spec_badop, /* mmap */ @@ -1297,6 +1297,57 @@ ufs_strategy(bp) return (0); } +/* + * Read wrapper for special devices. + */ +ufsspec_read(vp, uio, ioflag, cred) + struct vnode *vp; + struct uio *uio; + int ioflag; + struct ucred *cred; +{ + + /* + * Set access flag. + */ + VTOI(vp)->i_flag |= IACC; + return (spec_read(vp, uio, ioflag, cred)); +} + +/* + * Write wrapper for special devices. + */ +ufsspec_write(vp, uio, ioflag, cred) + struct vnode *vp; + struct uio *uio; + int ioflag; + struct ucred *cred; +{ + + /* + * Set update and change flags. + */ + VTOI(vp)->i_flag |= IUPD|ICHG; + return (spec_write(vp, uio, ioflag, cred)); +} + +/* + * Close wrapper for special devices. + * + * Update the times on the inode then do device close. + */ +ufsspec_close(vp, fflag, cred) + struct vnode *vp; + int fflag; + struct ucred *cred; +{ + register struct inode *ip = VTOI(vp); + + if (vp->v_count > 1 && !(ip->i_flag & ILOCKED)) + ITIMES(ip, &time, &time); + return (spec_close(vp, fflag, cred)); +} + /* * Make a new file. */ diff --git a/usr/src/sys/ufs/lfs/lfs_vnops.c b/usr/src/sys/ufs/lfs/lfs_vnops.c index 2a737a4f7c..66ca36fb55 100644 --- a/usr/src/sys/ufs/lfs/lfs_vnops.c +++ b/usr/src/sys/ufs/lfs/lfs_vnops.c @@ -14,7 +14,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * @(#)lfs_vnops.c 7.23 (Berkeley) %G% + * @(#)lfs_vnops.c 7.24 (Berkeley) %G% */ #include "param.h" @@ -105,12 +105,12 @@ struct vnodeops ufs_vnodeops = { int spec_lookup(), spec_open(), - spec_read(), - spec_write(), + ufsspec_read(), + ufsspec_write(), spec_strategy(), spec_ioctl(), spec_select(), - spec_close(), + ufsspec_close(), spec_badop(), spec_nullop(); @@ -119,12 +119,12 @@ struct vnodeops spec_inodeops = { spec_badop, /* create */ spec_badop, /* mknod */ spec_open, /* open */ - spec_close, /* close */ + ufsspec_close, /* close */ ufs_access, /* access */ ufs_getattr, /* getattr */ ufs_setattr, /* setattr */ - spec_read, /* read */ - spec_write, /* write */ + ufsspec_read, /* read */ + ufsspec_write, /* write */ spec_ioctl, /* ioctl */ spec_select, /* select */ spec_badop, /* mmap */ @@ -1297,6 +1297,57 @@ ufs_strategy(bp) return (0); } +/* + * Read wrapper for special devices. + */ +ufsspec_read(vp, uio, ioflag, cred) + struct vnode *vp; + struct uio *uio; + int ioflag; + struct ucred *cred; +{ + + /* + * Set access flag. + */ + VTOI(vp)->i_flag |= IACC; + return (spec_read(vp, uio, ioflag, cred)); +} + +/* + * Write wrapper for special devices. + */ +ufsspec_write(vp, uio, ioflag, cred) + struct vnode *vp; + struct uio *uio; + int ioflag; + struct ucred *cred; +{ + + /* + * Set update and change flags. + */ + VTOI(vp)->i_flag |= IUPD|ICHG; + return (spec_write(vp, uio, ioflag, cred)); +} + +/* + * Close wrapper for special devices. + * + * Update the times on the inode then do device close. + */ +ufsspec_close(vp, fflag, cred) + struct vnode *vp; + int fflag; + struct ucred *cred; +{ + register struct inode *ip = VTOI(vp); + + if (vp->v_count > 1 && !(ip->i_flag & ILOCKED)) + ITIMES(ip, &time, &time); + return (spec_close(vp, fflag, cred)); +} + /* * Make a new file. */ diff --git a/usr/src/sys/ufs/ufs/ufs_vnops.c b/usr/src/sys/ufs/ufs/ufs_vnops.c index e54052ee01..7c7b708b88 100644 --- a/usr/src/sys/ufs/ufs/ufs_vnops.c +++ b/usr/src/sys/ufs/ufs/ufs_vnops.c @@ -14,7 +14,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * @(#)ufs_vnops.c 7.23 (Berkeley) %G% + * @(#)ufs_vnops.c 7.24 (Berkeley) %G% */ #include "param.h" @@ -105,12 +105,12 @@ struct vnodeops ufs_vnodeops = { int spec_lookup(), spec_open(), - spec_read(), - spec_write(), + ufsspec_read(), + ufsspec_write(), spec_strategy(), spec_ioctl(), spec_select(), - spec_close(), + ufsspec_close(), spec_badop(), spec_nullop(); @@ -119,12 +119,12 @@ struct vnodeops spec_inodeops = { spec_badop, /* create */ spec_badop, /* mknod */ spec_open, /* open */ - spec_close, /* close */ + ufsspec_close, /* close */ ufs_access, /* access */ ufs_getattr, /* getattr */ ufs_setattr, /* setattr */ - spec_read, /* read */ - spec_write, /* write */ + ufsspec_read, /* read */ + ufsspec_write, /* write */ spec_ioctl, /* ioctl */ spec_select, /* select */ spec_badop, /* mmap */ @@ -1297,6 +1297,57 @@ ufs_strategy(bp) return (0); } +/* + * Read wrapper for special devices. + */ +ufsspec_read(vp, uio, ioflag, cred) + struct vnode *vp; + struct uio *uio; + int ioflag; + struct ucred *cred; +{ + + /* + * Set access flag. + */ + VTOI(vp)->i_flag |= IACC; + return (spec_read(vp, uio, ioflag, cred)); +} + +/* + * Write wrapper for special devices. + */ +ufsspec_write(vp, uio, ioflag, cred) + struct vnode *vp; + struct uio *uio; + int ioflag; + struct ucred *cred; +{ + + /* + * Set update and change flags. + */ + VTOI(vp)->i_flag |= IUPD|ICHG; + return (spec_write(vp, uio, ioflag, cred)); +} + +/* + * Close wrapper for special devices. + * + * Update the times on the inode then do device close. + */ +ufsspec_close(vp, fflag, cred) + struct vnode *vp; + int fflag; + struct ucred *cred; +{ + register struct inode *ip = VTOI(vp); + + if (vp->v_count > 1 && !(ip->i_flag & ILOCKED)) + ITIMES(ip, &time, &time); + return (spec_close(vp, fflag, cred)); +} + /* * Make a new file. */ -- 2.20.1