summaryrefslogtreecommitdiffstats
path: root/sys/ufs
diff options
context:
space:
mode:
authormm <mm@FreeBSD.org>2011-08-25 08:17:39 +0000
committermm <mm@FreeBSD.org>2011-08-25 08:17:39 +0000
commite104c96f018139a8d2a85057c37ae2e5999cbd41 (patch)
treef8958cd0b60a86012d8905a34cb8bdc7e640171f /sys/ufs
parent631a8abdff140aaa997d795f570b6c5e78f34991 (diff)
downloadFreeBSD-src-e104c96f018139a8d2a85057c37ae2e5999cbd41.zip
FreeBSD-src-e104c96f018139a8d2a85057c37ae2e5999cbd41.tar.gz
Generalize ffs_pages_remove() into vn_pages_remove().
Remove mapped pages for all dataset vnodes in zfs_rezget() using new vn_pages_remove() to fix mmapped files changed by zfs rollback or zfs receive -F. PR: kern/160035, kern/156933 Reviewed by: kib, pjd Approved by: re (kib) MFC after: 1 week
Diffstat (limited to 'sys/ufs')
-rw-r--r--sys/ufs/ffs/ffs_extern.h1
-rw-r--r--sys/ufs/ffs/ffs_inode.c14
-rw-r--r--sys/ufs/ffs/ffs_softdep.c4
3 files changed, 3 insertions, 16 deletions
diff --git a/sys/ufs/ffs/ffs_extern.h b/sys/ufs/ffs/ffs_extern.h
index 70bcf1d..bfc0256 100644
--- a/sys/ufs/ffs/ffs_extern.h
+++ b/sys/ufs/ffs/ffs_extern.h
@@ -79,7 +79,6 @@ int ffs_isfreeblock(struct fs *, u_char *, ufs1_daddr_t);
void ffs_load_inode(struct buf *, struct inode *, struct fs *, ino_t);
int ffs_mountroot(void);
void ffs_oldfscompat_write(struct fs *, struct ufsmount *);
-void ffs_pages_remove(struct vnode *vp, vm_pindex_t start, vm_pindex_t end);
int ffs_reallocblks(struct vop_reallocblks_args *);
int ffs_realloccg(struct inode *, ufs2_daddr_t, ufs2_daddr_t,
ufs2_daddr_t, int, int, int, struct ucred *, struct buf **);
diff --git a/sys/ufs/ffs/ffs_inode.c b/sys/ufs/ffs/ffs_inode.c
index 0034029..101bdb4 100644
--- a/sys/ufs/ffs/ffs_inode.c
+++ b/sys/ufs/ffs/ffs_inode.c
@@ -120,18 +120,6 @@ ffs_update(vp, waitfor)
}
}
-void
-ffs_pages_remove(struct vnode *vp, vm_pindex_t start, vm_pindex_t end)
-{
- vm_object_t object;
-
- if ((object = vp->v_object) == NULL)
- return;
- VM_OBJECT_LOCK(object);
- vm_object_page_remove(object, start, end, 0);
- VM_OBJECT_UNLOCK(object);
-}
-
#define SINGLE 0 /* index of single indirect block */
#define DOUBLE 1 /* index of double indirect block */
#define TRIPLE 2 /* index of triple indirect block */
@@ -219,7 +207,7 @@ ffs_truncate(vp, length, flags, cred, td)
(void) chkdq(ip, -extblocks, NOCRED, 0);
#endif
vinvalbuf(vp, V_ALT, 0, 0);
- ffs_pages_remove(vp,
+ vn_pages_remove(vp,
OFF_TO_IDX(lblktosize(fs, -extblocks)), 0);
osize = ip->i_din2->di_extsize;
ip->i_din2->di_blocks -= extblocks;
diff --git a/sys/ufs/ffs/ffs_softdep.c b/sys/ufs/ffs/ffs_softdep.c
index 58d8ba9..6cf033a 100644
--- a/sys/ufs/ffs/ffs_softdep.c
+++ b/sys/ufs/ffs/ffs_softdep.c
@@ -6541,7 +6541,7 @@ trunc_pages(ip, length, extblocks, flags)
fs = ip->i_fs;
extend = OFF_TO_IDX(lblktosize(fs, -extblocks));
if ((flags & IO_EXT) != 0)
- ffs_pages_remove(vp, extend, 0);
+ vn_pages_remove(vp, extend, 0);
if ((flags & IO_NORMAL) == 0)
return;
BO_LOCK(&vp->v_bufobj);
@@ -6567,7 +6567,7 @@ trunc_pages(ip, length, extblocks, flags)
end = OFF_TO_IDX(lblktosize(fs, lbn));
} else
end = extend;
- ffs_pages_remove(vp, OFF_TO_IDX(OFF_MAX), end);
+ vn_pages_remove(vp, OFF_TO_IDX(OFF_MAX), end);
}
/*
OpenPOWER on IntegriCloud