Add vop_stdgetpages() and vop_stdputpages() and replace those filesystem
authorMatthew Dillon <dillon@dragonflybsd.org>
Tue, 28 Aug 2007 01:04:33 +0000 (01:04 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Tue, 28 Aug 2007 01:04:33 +0000 (01:04 +0000)
getpages and putpages routines which were doing the same thing.

sys/kern/vfs_default.c
sys/sys/vnode.h
sys/vfs/gnu/ext2fs/ext2_vnops.c
sys/vfs/hpfs/hpfs_vnops.c
sys/vfs/isofs/cd9660/cd9660_vnops.c
sys/vfs/msdosfs/msdosfs_vnops.c
sys/vfs/ntfs/ntfs_vnops.c
sys/vfs/smbfs/smbfs_io.c
sys/vfs/ufs/ffs_vnops.c

index e276049..e7f2bfa 100644 (file)
@@ -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 <sys/param.h>
@@ -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.
index b5bce98..3f3ad95 100644 (file)
@@ -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);
index 1cc3637..70e919e 100644 (file)
@@ -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 = {
index 84b6b78..61ac50d 100644 (file)
@@ -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 <sys/param.h>
@@ -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,
index 7df3c29..0fe160b 100644 (file)
@@ -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 <sys/param.h>
@@ -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
 };
 
 /*
index ce77d82..e666f3b 100644 (file)
@@ -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
 };
index f0e4ce1..3c7a4f3 100644 (file)
@@ -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
index 8905517..a8c3d57 100644 (file)
@@ -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 <sys/param.h>
@@ -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
index de2638b..166b5d0 100644 (file)
@@ -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 <sys/param.h>
@@ -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,