From 59d42685addb582bc78952d52ca12844a8f18009 Mon Sep 17 00:00:00 2001 From: Poul-Henning Kamp Date: Tue, 14 Dec 2004 21:30:45 +0000 Subject: [PATCH] Implement simpler panics for VOP_{read,write} on fifos. --- sys/gnu/ext2fs/ext2_vnops.c | 57 +--------------------------- sys/gnu/fs/ext2fs/ext2_vnops.c | 57 +--------------------------- sys/ufs/ufs/ufs_vnops.c | 69 ++++------------------------------ 3 files changed, 12 insertions(+), 171 deletions(-) diff --git a/sys/gnu/ext2fs/ext2_vnops.c b/sys/gnu/ext2fs/ext2_vnops.c index ebc39d063850..f156f8ba387c 100644 --- a/sys/gnu/ext2fs/ext2_vnops.c +++ b/sys/gnu/ext2fs/ext2_vnops.c @@ -108,8 +108,6 @@ static vop_symlink_t ext2_symlink; static vop_write_t ext2_write; static vop_close_t ext2fifo_close; static vop_kqfilter_t ext2fifo_kqfilter; -static vop_read_t ext2fifo_read; -static vop_write_t ext2fifo_write; static int filt_ext2read(struct knote *kn, long hint); static int filt_ext2write(struct knote *kn, long hint); static int filt_ext2vnode(struct knote *kn, long hint); @@ -159,10 +157,10 @@ struct vop_vector ext2_fifoops = { .vop_inactive = ext2_inactive, .vop_kqfilter = ext2fifo_kqfilter, .vop_print = ext2_print, - .vop_read = ext2fifo_read, + .vop_read = VOP_PANIC, .vop_reclaim = ext2_reclaim, .vop_setattr = ext2_setattr, - .vop_write = ext2fifo_write, + .vop_write = VOP_PANIC, }; #include @@ -1458,57 +1456,6 @@ ext2_print(ap) return (0); } -/* - * Read wrapper for fifos. - */ -static int -ext2fifo_read(ap) - struct vop_read_args /* { - struct vnode *a_vp; - struct uio *a_uio; - int a_ioflag; - struct ucred *a_cred; - } */ *ap; -{ - int error, resid; - struct inode *ip; - struct uio *uio; - - uio = ap->a_uio; - resid = uio->uio_resid; - error = fifo_specops.vop_read(ap); - ip = VTOI(ap->a_vp); - if ((ap->a_vp->v_mount->mnt_flag & MNT_NOATIME) == 0 && ip != NULL && - (uio->uio_resid != resid || (error == 0 && resid != 0))) - VTOI(ap->a_vp)->i_flag |= IN_ACCESS; - return (error); -} - -/* - * Write wrapper for fifos. - */ -static int -ext2fifo_write(ap) - struct vop_write_args /* { - struct vnode *a_vp; - struct uio *a_uio; - int a_ioflag; - struct ucred *a_cred; - } */ *ap; -{ - int error, resid; - struct inode *ip; - struct uio *uio; - - uio = ap->a_uio; - resid = uio->uio_resid; - error = fifo_specops.vop_write(ap); - ip = VTOI(ap->a_vp); - if (ip != NULL && (uio->uio_resid != resid || (error == 0 && resid != 0))) - VTOI(ap->a_vp)->i_flag |= IN_CHANGE | IN_UPDATE; - return (error); -} - /* * Close wrapper for fifos. * diff --git a/sys/gnu/fs/ext2fs/ext2_vnops.c b/sys/gnu/fs/ext2fs/ext2_vnops.c index ebc39d063850..f156f8ba387c 100644 --- a/sys/gnu/fs/ext2fs/ext2_vnops.c +++ b/sys/gnu/fs/ext2fs/ext2_vnops.c @@ -108,8 +108,6 @@ static vop_symlink_t ext2_symlink; static vop_write_t ext2_write; static vop_close_t ext2fifo_close; static vop_kqfilter_t ext2fifo_kqfilter; -static vop_read_t ext2fifo_read; -static vop_write_t ext2fifo_write; static int filt_ext2read(struct knote *kn, long hint); static int filt_ext2write(struct knote *kn, long hint); static int filt_ext2vnode(struct knote *kn, long hint); @@ -159,10 +157,10 @@ struct vop_vector ext2_fifoops = { .vop_inactive = ext2_inactive, .vop_kqfilter = ext2fifo_kqfilter, .vop_print = ext2_print, - .vop_read = ext2fifo_read, + .vop_read = VOP_PANIC, .vop_reclaim = ext2_reclaim, .vop_setattr = ext2_setattr, - .vop_write = ext2fifo_write, + .vop_write = VOP_PANIC, }; #include @@ -1458,57 +1456,6 @@ ext2_print(ap) return (0); } -/* - * Read wrapper for fifos. - */ -static int -ext2fifo_read(ap) - struct vop_read_args /* { - struct vnode *a_vp; - struct uio *a_uio; - int a_ioflag; - struct ucred *a_cred; - } */ *ap; -{ - int error, resid; - struct inode *ip; - struct uio *uio; - - uio = ap->a_uio; - resid = uio->uio_resid; - error = fifo_specops.vop_read(ap); - ip = VTOI(ap->a_vp); - if ((ap->a_vp->v_mount->mnt_flag & MNT_NOATIME) == 0 && ip != NULL && - (uio->uio_resid != resid || (error == 0 && resid != 0))) - VTOI(ap->a_vp)->i_flag |= IN_ACCESS; - return (error); -} - -/* - * Write wrapper for fifos. - */ -static int -ext2fifo_write(ap) - struct vop_write_args /* { - struct vnode *a_vp; - struct uio *a_uio; - int a_ioflag; - struct ucred *a_cred; - } */ *ap; -{ - int error, resid; - struct inode *ip; - struct uio *uio; - - uio = ap->a_uio; - resid = uio->uio_resid; - error = fifo_specops.vop_write(ap); - ip = VTOI(ap->a_vp); - if (ip != NULL && (uio->uio_resid != resid || (error == 0 && resid != 0))) - VTOI(ap->a_vp)->i_flag |= IN_CHANGE | IN_UPDATE; - return (error); -} - /* * Close wrapper for fifos. * diff --git a/sys/ufs/ufs/ufs_vnops.c b/sys/ufs/ufs/ufs_vnops.c index ede11e33a9e2..29f7af9a024a 100644 --- a/sys/ufs/ufs/ufs_vnops.c +++ b/sys/ufs/ufs/ufs_vnops.c @@ -109,8 +109,6 @@ static vop_symlink_t ufs_symlink; static vop_whiteout_t ufs_whiteout; static vop_close_t ufsfifo_close; static vop_kqfilter_t ufsfifo_kqfilter; -static vop_read_t ufsfifo_read; -static vop_write_t ufsfifo_write; static int filt_ufsread(struct knote *kn, long hint); static int filt_ufswrite(struct knote *kn, long hint); static int filt_ufsvnode(struct knote *kn, long hint); @@ -2002,57 +2000,6 @@ ufs_print(ap) return (0); } -/* - * Read wrapper for fifos. - */ -static int -ufsfifo_read(ap) - struct vop_read_args /* { - struct vnode *a_vp; - struct uio *a_uio; - int a_ioflag; - struct ucred *a_cred; - } */ *ap; -{ - int error, resid; - struct inode *ip; - struct uio *uio; - - uio = ap->a_uio; - resid = uio->uio_resid; - error = fifo_specops.vop_read(ap); - ip = VTOI(ap->a_vp); - if ((ap->a_vp->v_mount->mnt_flag & MNT_NOATIME) == 0 && ip != NULL && - (uio->uio_resid != resid || (error == 0 && resid != 0))) - ip->i_flag |= IN_ACCESS; - return (error); -} - -/* - * Write wrapper for fifos. - */ -static int -ufsfifo_write(ap) - struct vop_write_args /* { - struct vnode *a_vp; - struct uio *a_uio; - int a_ioflag; - struct ucred *a_cred; - } */ *ap; -{ - int error, resid; - struct inode *ip; - struct uio *uio; - - uio = ap->a_uio; - resid = uio->uio_resid; - error = fifo_specops.vop_write(ap); - ip = VTOI(ap->a_vp); - if (ip != NULL && (uio->uio_resid != resid || (error == 0 && resid != 0))) - ip->i_flag |= IN_CHANGE | IN_UPDATE; - return (error); -} - /* * Close wrapper for fifos. * @@ -2612,9 +2559,9 @@ struct vop_vector ufs_vnodeops = { .vop_symlink = ufs_symlink, .vop_whiteout = ufs_whiteout, #ifdef UFS_EXTATTR - .vop_getextattr = ufs_getextattr, - .vop_deleteextattr = ufs_deleteextattr, - .vop_setextattr = ufs_setextattr, + .vop_getextattr = ufs_getextattr, + .vop_deleteextattr = ufs_deleteextattr, + .vop_setextattr = ufs_setextattr, #endif #ifdef UFS_ACL .vop_getacl = ufs_getacl, @@ -2632,17 +2579,17 @@ struct vop_vector ufs_fifoops = { .vop_inactive = ufs_inactive, .vop_kqfilter = ufsfifo_kqfilter, .vop_print = ufs_print, - .vop_read = ufsfifo_read, + .vop_read = VOP_PANIC, .vop_reclaim = ufs_reclaim, .vop_setattr = ufs_setattr, #ifdef MAC .vop_setlabel = vop_stdsetlabel_ea, #endif - .vop_write = ufsfifo_write, + .vop_write = VOP_PANIC, #ifdef UFS_EXTATTR - .vop_getextattr = ufs_getextattr, - .vop_deleteextattr = ufs_deleteextattr, - .vop_setextattr = ufs_setextattr, + .vop_getextattr = ufs_getextattr, + .vop_deleteextattr = ufs_deleteextattr, + .vop_setextattr = ufs_setextattr, #endif #ifdef UFS_ACL .vop_getacl = ufs_getacl,