From 1787385d89ee6d0792a7676ab4345c19bbddd8df Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Tue, 28 Aug 2007 01:04:33 +0000 Subject: [PATCH] Add vop_stdgetpages() and vop_stdputpages() and replace those filesystem getpages and putpages routines which were doing the same thing. --- sys/kern/vfs_default.c | 38 ++++++++++++++++++++++++++++- sys/sys/vnode.h | 4 ++- sys/vfs/gnu/ext2fs/ext2_vnops.c | 18 ++------------ sys/vfs/hpfs/hpfs_vnops.c | 21 +++------------- sys/vfs/isofs/cd9660/cd9660_vnops.c | 34 +++----------------------- sys/vfs/msdosfs/msdosfs_vnops.c | 34 +++----------------------- sys/vfs/ntfs/ntfs_vnops.c | 24 +++--------------- sys/vfs/smbfs/smbfs_io.c | 8 +++--- sys/vfs/ufs/ffs_vnops.c | 5 ++-- 9 files changed, 59 insertions(+), 127 deletions(-) diff --git a/sys/kern/vfs_default.c b/sys/kern/vfs_default.c index e2760490eb..e7f2bfa3bf 100644 --- a/sys/kern/vfs_default.c +++ b/sys/kern/vfs_default.c @@ -37,7 +37,7 @@ * * * $FreeBSD: src/sys/kern/vfs_default.c,v 1.28.2.7 2003/01/10 18:23:26 bde Exp $ - * $DragonFly: src/sys/kern/vfs_default.c,v 1.50 2007/08/13 17:43:55 dillon Exp $ + * $DragonFly: src/sys/kern/vfs_default.c,v 1.51 2007/08/28 01:04:32 dillon Exp $ */ #include @@ -1231,6 +1231,42 @@ vop_stdpoll(struct vop_poll_args *ap) return (ap->a_events & (POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM)); } +/* + * Implement standard getpages and putpages. All filesystems must use + * the buffer cache to back regular files. + */ +int +vop_stdgetpages(struct vop_getpages_args *ap) +{ + struct mount *mp; + int error; + + if ((mp = ap->a_vp->v_mount) != NULL) { + error = vnode_pager_generic_getpages( + ap->a_vp, ap->a_m, ap->a_count, + ap->a_reqpage); + } else { + error = VM_PAGER_BAD; + } + return (error); +} + +int +vop_stdputpages(struct vop_putpages_args *ap) +{ + struct mount *mp; + int error; + + if ((mp = ap->a_vp->v_mount) != NULL) { + error = vnode_pager_generic_putpages( + ap->a_vp, ap->a_m, ap->a_count, + ap->a_sync, ap->a_rtvals); + } else { + error = VM_PAGER_BAD; + } + return (error); +} + /* * vfs default ops * used to fill the vfs fucntion table to get reasonable default return values. diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h index b5bce982b0..3f3ad959cf 100644 --- a/sys/sys/vnode.h +++ b/sys/sys/vnode.h @@ -32,7 +32,7 @@ * * @(#)vnode.h 8.7 (Berkeley) 2/4/94 * $FreeBSD: src/sys/sys/vnode.h,v 1.111.2.19 2002/12/29 18:19:53 dillon Exp $ - * $DragonFly: src/sys/sys/vnode.h,v 1.76 2007/07/30 08:02:40 dillon Exp $ + * $DragonFly: src/sys/sys/vnode.h,v 1.77 2007/08/28 01:04:31 dillon Exp $ */ #ifndef _SYS_VNODE_H_ @@ -518,6 +518,8 @@ int vn_writechk (struct vnode *vp, struct nchandle *nch); int ncp_writechk(struct nchandle *nch); int vop_stdopen (struct vop_open_args *ap); int vop_stdclose (struct vop_close_args *ap); +int vop_stdgetpages(struct vop_getpages_args *ap); +int vop_stdputpages(struct vop_putpages_args *ap); int vop_nopoll (struct vop_poll_args *ap); int vop_stdpathconf (struct vop_pathconf_args *ap); int vop_stdpoll (struct vop_poll_args *ap); diff --git a/sys/vfs/gnu/ext2fs/ext2_vnops.c b/sys/vfs/gnu/ext2fs/ext2_vnops.c index 1cc3637ad7..70e919ed2a 100644 --- a/sys/vfs/gnu/ext2fs/ext2_vnops.c +++ b/sys/vfs/gnu/ext2fs/ext2_vnops.c @@ -44,7 +44,7 @@ * @(#)ufs_vnops.c 8.27 (Berkeley) 5/27/95 * @(#)ext2_vnops.c 8.7 (Berkeley) 2/3/94 * $FreeBSD: src/sys/gnu/ext2fs/ext2_vnops.c,v 1.51.2.2 2003/01/02 17:26:18 bde Exp $ - * $DragonFly: src/sys/vfs/gnu/ext2fs/ext2_vnops.c,v 1.41 2007/08/13 17:31:56 dillon Exp $ + * $DragonFly: src/sys/vfs/gnu/ext2fs/ext2_vnops.c,v 1.42 2007/08/28 01:04:32 dillon Exp $ */ #include "opt_quota.h" @@ -131,7 +131,6 @@ static int ext2_create (struct vop_old_create_args *); static int ext2_mknod (struct vop_old_mknod_args *); static int ext2_symlink (struct vop_old_symlink_args *); static int ext2_getpages (struct vop_getpages_args *); -static int ext2_putpages (struct vop_putpages_args *); #include "ext2_readwrite.c" @@ -1253,19 +1252,6 @@ ext2_getpages(struct vop_getpages_args *ap) ap->a_reqpage)); } -/* - * put page routine - * - * XXX By default, wimp out... note that a_offset is ignored (and always - * XXX has been). - */ -static int -ext2_putpages(struct vop_putpages_args *ap) -{ - return (vnode_pager_generic_putpages(ap->a_vp, ap->a_m, ap->a_count, - ap->a_sync, ap->a_rtvals)); -} - void ext2_itimes(struct vnode *vp) { @@ -2213,7 +2199,7 @@ struct vop_ops ext2_vnode_vops = { .vop_old_symlink = ext2_symlink, .vop_old_whiteout = ext2_whiteout, .vop_getpages = ext2_getpages, - .vop_putpages = ext2_putpages + .vop_putpages = vop_stdputpages }; struct vop_ops ext2_spec_vops = { diff --git a/sys/vfs/hpfs/hpfs_vnops.c b/sys/vfs/hpfs/hpfs_vnops.c index 84b6b7869c..61ac50d9b9 100644 --- a/sys/vfs/hpfs/hpfs_vnops.c +++ b/sys/vfs/hpfs/hpfs_vnops.c @@ -24,7 +24,7 @@ * SUCH DAMAGE. * * $FreeBSD: src/sys/fs/hpfs/hpfs_vnops.c,v 1.2.2.2 2002/01/15 18:35:09 semenu Exp $ - * $DragonFly: src/sys/vfs/hpfs/hpfs_vnops.c,v 1.44 2007/08/21 17:26:48 dillon Exp $ + * $DragonFly: src/sys/vfs/hpfs/hpfs_vnops.c,v 1.45 2007/08/28 01:04:33 dillon Exp $ */ #include @@ -88,26 +88,11 @@ static int hpfs_create (struct vop_old_create_args *); static int hpfs_remove (struct vop_old_remove_args *); static int hpfs_bmap (struct vop_bmap_args *ap); #if defined(__DragonFly__) -static int hpfs_getpages (struct vop_getpages_args *ap); -static int hpfs_putpages (struct vop_putpages_args *); static int hpfs_fsync (struct vop_fsync_args *ap); #endif static int hpfs_pathconf (struct vop_pathconf_args *ap); #if defined(__DragonFly__) -int -hpfs_getpages(struct vop_getpages_args *ap) -{ - return vnode_pager_generic_getpages(ap->a_vp, ap->a_m, ap->a_count, - ap->a_reqpage); -} - -int -hpfs_putpages(struct vop_putpages_args *ap) -{ - return vnode_pager_generic_putpages(ap->a_vp, ap->a_m, ap->a_count, - ap->a_sync, ap->a_rtvals); -} /* * hpfs_fsync(struct vnode *a_vp, int a_waitfor) @@ -1241,8 +1226,8 @@ struct vop_ops hpfs_vnode_vops = { .vop_readdir = hpfs_readdir, .vop_fsync = hpfs_fsync, .vop_bmap = hpfs_bmap, - .vop_getpages = hpfs_getpages, - .vop_putpages = hpfs_putpages, + .vop_getpages = vop_stdgetpages, + .vop_putpages = vop_stdputpages, .vop_strategy = hpfs_strategy, .vop_read = hpfs_read, .vop_write = hpfs_write, diff --git a/sys/vfs/isofs/cd9660/cd9660_vnops.c b/sys/vfs/isofs/cd9660/cd9660_vnops.c index 7df3c2955f..0fe160b02f 100644 --- a/sys/vfs/isofs/cd9660/cd9660_vnops.c +++ b/sys/vfs/isofs/cd9660/cd9660_vnops.c @@ -37,7 +37,7 @@ * * @(#)cd9660_vnops.c 8.19 (Berkeley) 5/27/95 * $FreeBSD: src/sys/isofs/cd9660/cd9660_vnops.c,v 1.62 1999/12/15 23:01:51 eivind Exp $ - * $DragonFly: src/sys/vfs/isofs/cd9660/cd9660_vnops.c,v 1.36 2007/08/13 17:31:56 dillon Exp $ + * $DragonFly: src/sys/vfs/isofs/cd9660/cd9660_vnops.c,v 1.37 2007/08/28 01:04:33 dillon Exp $ */ #include @@ -80,8 +80,6 @@ static int cd9660_readdir (struct vop_readdir_args *); static int cd9660_readlink (struct vop_readlink_args *ap); static int cd9660_strategy (struct vop_strategy_args *); static int cd9660_print (struct vop_print_args *); -static int cd9660_getpages (struct vop_getpages_args *); -static int cd9660_putpages (struct vop_putpages_args *); /* * Setattr call. Only allowed for block and character special devices. @@ -833,32 +831,6 @@ cd9660_pathconf(struct vop_pathconf_args *ap) /* NOTREACHED */ } -/* - * get page routine - * - * XXX By default, wimp out... note that a_offset is ignored (and always - * XXX has been). - */ -int -cd9660_getpages(struct vop_getpages_args *ap) -{ - return vnode_pager_generic_getpages(ap->a_vp, ap->a_m, ap->a_count, - ap->a_reqpage); -} - -/* - * put page routine - * - * XXX By default, wimp out... note that a_offset is ignored (and always - * XXX has been). - */ -int -cd9660_putpages(struct vop_putpages_args *ap) -{ - return vnode_pager_generic_putpages(ap->a_vp, ap->a_m, ap->a_count, - ap->a_sync, ap->a_rtvals); -} - /* * Advisory lock support */ @@ -891,8 +863,8 @@ struct vop_ops cd9660_vnode_vops = { .vop_reclaim = cd9660_reclaim, .vop_setattr = cd9660_setattr, .vop_strategy = cd9660_strategy, - .vop_getpages = cd9660_getpages, - .vop_putpages = cd9660_putpages + .vop_getpages = vop_stdgetpages, + .vop_putpages = vop_stdputpages }; /* diff --git a/sys/vfs/msdosfs/msdosfs_vnops.c b/sys/vfs/msdosfs/msdosfs_vnops.c index ce77d82ca8..e666f3b879 100644 --- a/sys/vfs/msdosfs/msdosfs_vnops.c +++ b/sys/vfs/msdosfs/msdosfs_vnops.c @@ -1,5 +1,5 @@ /* $FreeBSD: src/sys/msdosfs/msdosfs_vnops.c,v 1.95.2.4 2003/06/13 15:05:47 trhodes Exp $ */ -/* $DragonFly: src/sys/vfs/msdosfs/msdosfs_vnops.c,v 1.51 2007/08/21 17:26:48 dillon Exp $ */ +/* $DragonFly: src/sys/vfs/msdosfs/msdosfs_vnops.c,v 1.52 2007/08/28 01:04:33 dillon Exp $ */ /* $NetBSD: msdosfs_vnops.c,v 1.68 1998/02/10 14:10:04 mrg Exp $ */ /*- @@ -103,8 +103,6 @@ static int msdosfs_bmap (struct vop_bmap_args *); static int msdosfs_strategy (struct vop_strategy_args *); static int msdosfs_print (struct vop_print_args *); static int msdosfs_pathconf (struct vop_pathconf_args *ap); -static int msdosfs_getpages (struct vop_getpages_args *); -static int msdosfs_putpages (struct vop_putpages_args *); /* * Some general notes: @@ -1956,32 +1954,6 @@ msdosfs_pathconf(struct vop_pathconf_args *ap) /* NOTREACHED */ } -/* - * get page routine - * - * XXX By default, wimp out... note that a_offset is ignored (and always - * XXX has been). - */ -int -msdosfs_getpages(struct vop_getpages_args *ap) -{ - return vnode_pager_generic_getpages(ap->a_vp, ap->a_m, ap->a_count, - ap->a_reqpage); -} - -/* - * put page routine - * - * XXX By default, wimp out... note that a_offset is ignored (and always - * XXX has been). - */ -int -msdosfs_putpages(struct vop_putpages_args *ap) -{ - return vnode_pager_generic_putpages(ap->a_vp, ap->a_m, ap->a_count, - ap->a_sync, ap->a_rtvals); -} - /* Global vfs data structures for msdosfs */ struct vop_ops msdosfs_vnode_vops = { .vop_default = vop_defaultop, @@ -2009,6 +1981,6 @@ struct vop_ops msdosfs_vnode_vops = { .vop_strategy = msdosfs_strategy, .vop_old_symlink = msdosfs_symlink, .vop_write = msdosfs_write, - .vop_getpages = msdosfs_getpages, - .vop_putpages = msdosfs_putpages + .vop_getpages = vop_stdgetpages, + .vop_putpages = vop_stdputpages }; diff --git a/sys/vfs/ntfs/ntfs_vnops.c b/sys/vfs/ntfs/ntfs_vnops.c index f0e4ce1299..3c7a4f317f 100644 --- a/sys/vfs/ntfs/ntfs_vnops.c +++ b/sys/vfs/ntfs/ntfs_vnops.c @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * $FreeBSD: src/sys/ntfs/ntfs_vnops.c,v 1.9.2.4 2002/08/06 19:35:18 semenu Exp $ - * $DragonFly: src/sys/vfs/ntfs/ntfs_vnops.c,v 1.42 2007/08/13 17:31:56 dillon Exp $ + * $DragonFly: src/sys/vfs/ntfs/ntfs_vnops.c,v 1.43 2007/08/28 01:04:33 dillon Exp $ * */ @@ -95,8 +95,6 @@ static int ntfs_readdir (struct vop_readdir_args *ap); static int ntfs_lookup (struct vop_old_lookup_args *ap); static int ntfs_bmap (struct vop_bmap_args *ap); #if defined(__DragonFly__) -static int ntfs_getpages (struct vop_getpages_args *ap); -static int ntfs_putpages (struct vop_putpages_args *); static int ntfs_fsync (struct vop_fsync_args *ap); #else static int ntfs_bypass (struct vop_generic_args *); @@ -105,22 +103,6 @@ static int ntfs_pathconf (struct vop_pathconf_args *); int ntfs_prtactive = 1; /* 1 => print out reclaim of active vnodes */ -#if defined(__DragonFly__) -int -ntfs_getpages(struct vop_getpages_args *ap) -{ - return vnode_pager_generic_getpages(ap->a_vp, ap->a_m, ap->a_count, - ap->a_reqpage); -} - -int -ntfs_putpages(struct vop_putpages_args *ap) -{ - return vnode_pager_generic_putpages(ap->a_vp, ap->a_m, ap->a_count, - ap->a_sync, ap->a_rtvals); -} -#endif - /* * This is a noop, simply returning what one has been given. * @@ -845,8 +827,8 @@ struct vop_ops ntfs_vnode_vops = { .vop_readdir = ntfs_readdir, .vop_fsync = ntfs_fsync, .vop_bmap = ntfs_bmap, - .vop_getpages = ntfs_getpages, - .vop_putpages = ntfs_putpages, + .vop_getpages = vop_stdgetpages, + .vop_putpages = vop_stdputpages, .vop_strategy = ntfs_strategy, .vop_read = ntfs_read, .vop_write = ntfs_write diff --git a/sys/vfs/smbfs/smbfs_io.c b/sys/vfs/smbfs/smbfs_io.c index 8905517138..a8c3d573be 100644 --- a/sys/vfs/smbfs/smbfs_io.c +++ b/sys/vfs/smbfs/smbfs_io.c @@ -30,7 +30,7 @@ * SUCH DAMAGE. * * $FreeBSD: src/sys/fs/smbfs/smbfs_io.c,v 1.3.2.3 2003/01/17 08:20:26 tjr Exp $ - * $DragonFly: src/sys/vfs/smbfs/smbfs_io.c,v 1.28 2007/02/22 15:50:50 corecode Exp $ + * $DragonFly: src/sys/vfs/smbfs/smbfs_io.c,v 1.29 2007/08/28 01:04:33 dillon Exp $ * */ #include @@ -407,8 +407,7 @@ int smbfs_getpages(struct vop_getpages_args *ap) { #ifdef SMBFS_RWGENERIC - return vnode_pager_generic_getpages(ap->a_vp, ap->a_m, ap->a_count, - ap->a_reqpage); + return vop_stdgetpages(ap); #else int i, error, nextoff, size, toff, npages, count; int doclose; @@ -550,8 +549,7 @@ smbfs_putpages(struct vop_putpages_args *ap) KKASSERT(td->td_proc); cred = td->td_proc->p_ucred; VOP_OPEN(vp, FWRITE, cred, NULL); - error = vnode_pager_generic_putpages(ap->a_vp, ap->a_m, ap->a_count, - ap->a_sync, ap->a_rtvals); + error = vop_stdputpages(ap); VOP_CLOSE(vp, FWRITE, cred); return error; #else diff --git a/sys/vfs/ufs/ffs_vnops.c b/sys/vfs/ufs/ffs_vnops.c index de2638bc93..166b5d066b 100644 --- a/sys/vfs/ufs/ffs_vnops.c +++ b/sys/vfs/ufs/ffs_vnops.c @@ -32,7 +32,7 @@ * * @(#)ffs_vnops.c 8.15 (Berkeley) 5/14/95 * $FreeBSD: src/sys/ufs/ffs/ffs_vnops.c,v 1.64 2000/01/10 12:04:25 phk Exp $ - * $DragonFly: src/sys/vfs/ufs/ffs_vnops.c,v 1.17 2006/07/18 22:22:16 dillon Exp $ + * $DragonFly: src/sys/vfs/ufs/ffs_vnops.c,v 1.18 2007/08/28 01:04:32 dillon Exp $ */ #include @@ -66,7 +66,6 @@ static int ffs_fsync (struct vop_fsync_args *); static int ffs_getpages (struct vop_getpages_args *); -static int ffs_putpages (struct vop_putpages_args *); static int ffs_read (struct vop_read_args *); static int ffs_write (struct vop_write_args *); @@ -75,7 +74,7 @@ struct vop_ops ffs_vnode_vops = { .vop_default = ufs_vnoperate, .vop_fsync = ffs_fsync, .vop_getpages = ffs_getpages, - .vop_putpages = ffs_putpages, + .vop_putpages = vop_stdputpages, .vop_read = ffs_read, .vop_balloc = ffs_balloc, .vop_reallocblks = ffs_reallocblks, -- 2.41.0