summaryrefslogtreecommitdiff
path: root/sys/ufs
diff options
context:
space:
mode:
authorJason A. Harmening <jah@FreeBSD.org>2019-03-17 06:05:19 +0000
committerJason A. Harmening <jah@FreeBSD.org>2019-03-17 06:05:19 +0000
commita1a0711ceb4e1574014a1726a04113b0487dc99e (patch)
treebf6de3401deb7e4370f6c8ecafef893fa6197dcb /sys/ufs
parentf892fffa3203f6a896a1b61f09eadac2af738700 (diff)
downloadsrc-test2-a1a0711ceb4e1574014a1726a04113b0487dc99e.tar.gz
src-test2-a1a0711ceb4e1574014a1726a04113b0487dc99e.zip
Notes
Diffstat (limited to 'sys/ufs')
-rw-r--r--sys/ufs/ffs/ffs_vnops.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/sys/ufs/ffs/ffs_vnops.c b/sys/ufs/ffs/ffs_vnops.c
index 6e5f17952304..8cfc25c3b4f5 100644
--- a/sys/ufs/ffs/ffs_vnops.c
+++ b/sys/ufs/ffs/ffs_vnops.c
@@ -111,6 +111,7 @@ extern int ffs_rawread(struct vnode *vp, struct uio *uio, int *workdone);
static vop_fdatasync_t ffs_fdatasync;
static vop_fsync_t ffs_fsync;
static vop_getpages_t ffs_getpages;
+static vop_getpages_async_t ffs_getpages_async;
static vop_lock1_t ffs_lock;
static vop_read_t ffs_read;
static vop_write_t ffs_write;
@@ -132,7 +133,7 @@ struct vop_vector ffs_vnodeops1 = {
.vop_fsync = ffs_fsync,
.vop_fdatasync = ffs_fdatasync,
.vop_getpages = ffs_getpages,
- .vop_getpages_async = vnode_pager_local_getpages_async,
+ .vop_getpages_async = ffs_getpages_async,
.vop_lock1 = ffs_lock,
.vop_read = ffs_read,
.vop_reallocblks = ffs_reallocblks,
@@ -154,7 +155,7 @@ struct vop_vector ffs_vnodeops2 = {
.vop_fsync = ffs_fsync,
.vop_fdatasync = ffs_fdatasync,
.vop_getpages = ffs_getpages,
- .vop_getpages_async = vnode_pager_local_getpages_async,
+ .vop_getpages_async = ffs_getpages_async,
.vop_lock1 = ffs_lock,
.vop_read = ffs_read,
.vop_reallocblks = ffs_reallocblks,
@@ -1742,3 +1743,25 @@ ffs_getpages(struct vop_getpages_args *ap)
return (vfs_bio_getpages(vp, ap->a_m, ap->a_count, ap->a_rbehind,
ap->a_rahead, ffs_gbp_getblkno, ffs_gbp_getblksz));
}
+
+static int
+ffs_getpages_async(struct vop_getpages_async_args *ap)
+{
+ struct vnode *vp;
+ struct ufsmount *um;
+ int error;
+
+ vp = ap->a_vp;
+ um = VFSTOUFS(vp->v_mount);
+
+ if (um->um_devvp->v_bufobj.bo_bsize <= PAGE_SIZE)
+ return (vnode_pager_generic_getpages(vp, ap->a_m, ap->a_count,
+ ap->a_rbehind, ap->a_rahead, ap->a_iodone, ap->a_arg));
+
+ error = vfs_bio_getpages(vp, ap->a_m, ap->a_count, ap->a_rbehind,
+ ap->a_rahead, ffs_gbp_getblkno, ffs_gbp_getblksz);
+ ap->a_iodone(ap->a_arg, ap->a_m, ap->a_count, error);
+
+ return (error);
+}
+