mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
Tear down and flush the mmap region
The inode eviction should unmap the pages associated with the inode. These pages should also be flushed to disk to avoid the data loss. Therefore, use truncate_setsize() in evict_inode() to release the pagecache. The API truncate_setsize() was added in 2.6.35 kernel. To ensure compatibility with the old kernel, the patch defines its own truncate_setsize function. Signed-off-by: Prasad Joshi <pjoshi@stec-inc.com> Closes #255
This commit is contained in:
committed by
Brian Behlendorf
parent
560bcf9d14
commit
b312979252
@@ -66,6 +66,7 @@ am__aclocal_m4_deps = \
|
||||
$(top_srcdir)/config/kernel-open-bdev-exclusive.m4 \
|
||||
$(top_srcdir)/config/kernel-rq-for-each_segment.m4 \
|
||||
$(top_srcdir)/config/kernel-rq-is_sync.m4 \
|
||||
$(top_srcdir)/config/kernel-truncate-setsize.m4 \
|
||||
$(top_srcdir)/config/kernel-xattr-handler.m4 \
|
||||
$(top_srcdir)/config/kernel.m4 \
|
||||
$(top_srcdir)/config/user-arch.m4 \
|
||||
|
||||
@@ -66,6 +66,7 @@ am__aclocal_m4_deps = \
|
||||
$(top_srcdir)/config/kernel-open-bdev-exclusive.m4 \
|
||||
$(top_srcdir)/config/kernel-rq-for-each_segment.m4 \
|
||||
$(top_srcdir)/config/kernel-rq-is_sync.m4 \
|
||||
$(top_srcdir)/config/kernel-truncate-setsize.m4 \
|
||||
$(top_srcdir)/config/kernel-xattr-handler.m4 \
|
||||
$(top_srcdir)/config/kernel.m4 \
|
||||
$(top_srcdir)/config/user-arch.m4 \
|
||||
|
||||
@@ -41,4 +41,25 @@ insert_inode_locked(struct inode *ip)
|
||||
}
|
||||
#endif /* HAVE_INSERT_INODE_LOCKED */
|
||||
|
||||
/*
|
||||
* 2.6.35 API change,
|
||||
* Add truncate_setsize() if it is not exported by the Linux kernel.
|
||||
*
|
||||
* Truncate the inode and pages associated with the inode. The pages are
|
||||
* unmapped and removed from cache.
|
||||
*/
|
||||
#ifndef HAVE_TRUNCATE_SETSIZE
|
||||
static inline void
|
||||
truncate_setsize(struct inode *ip, loff_t new)
|
||||
{
|
||||
struct address_space *mapping = ip->i_mapping;
|
||||
|
||||
i_size_write(ip, new);
|
||||
|
||||
unmap_mapping_range(mapping, new + PAGE_SIZE - 1, 0, 1);
|
||||
truncate_inode_pages(mapping, new);
|
||||
unmap_mapping_range(mapping, new + PAGE_SIZE - 1, 0, 1);
|
||||
}
|
||||
#endif /* HAVE_TRUNCATE_SETSIZE */
|
||||
|
||||
#endif /* _ZFS_VFS_H */
|
||||
|
||||
@@ -66,6 +66,7 @@ am__aclocal_m4_deps = \
|
||||
$(top_srcdir)/config/kernel-open-bdev-exclusive.m4 \
|
||||
$(top_srcdir)/config/kernel-rq-for-each_segment.m4 \
|
||||
$(top_srcdir)/config/kernel-rq-is_sync.m4 \
|
||||
$(top_srcdir)/config/kernel-truncate-setsize.m4 \
|
||||
$(top_srcdir)/config/kernel-xattr-handler.m4 \
|
||||
$(top_srcdir)/config/kernel.m4 \
|
||||
$(top_srcdir)/config/user-arch.m4 \
|
||||
|
||||
@@ -66,6 +66,7 @@ am__aclocal_m4_deps = \
|
||||
$(top_srcdir)/config/kernel-open-bdev-exclusive.m4 \
|
||||
$(top_srcdir)/config/kernel-rq-for-each_segment.m4 \
|
||||
$(top_srcdir)/config/kernel-rq-is_sync.m4 \
|
||||
$(top_srcdir)/config/kernel-truncate-setsize.m4 \
|
||||
$(top_srcdir)/config/kernel-xattr-handler.m4 \
|
||||
$(top_srcdir)/config/kernel.m4 \
|
||||
$(top_srcdir)/config/user-arch.m4 \
|
||||
|
||||
@@ -66,6 +66,7 @@ am__aclocal_m4_deps = \
|
||||
$(top_srcdir)/config/kernel-open-bdev-exclusive.m4 \
|
||||
$(top_srcdir)/config/kernel-rq-for-each_segment.m4 \
|
||||
$(top_srcdir)/config/kernel-rq-is_sync.m4 \
|
||||
$(top_srcdir)/config/kernel-truncate-setsize.m4 \
|
||||
$(top_srcdir)/config/kernel-xattr-handler.m4 \
|
||||
$(top_srcdir)/config/kernel.m4 \
|
||||
$(top_srcdir)/config/user-arch.m4 \
|
||||
|
||||
@@ -66,6 +66,7 @@ am__aclocal_m4_deps = \
|
||||
$(top_srcdir)/config/kernel-open-bdev-exclusive.m4 \
|
||||
$(top_srcdir)/config/kernel-rq-for-each_segment.m4 \
|
||||
$(top_srcdir)/config/kernel-rq-is_sync.m4 \
|
||||
$(top_srcdir)/config/kernel-truncate-setsize.m4 \
|
||||
$(top_srcdir)/config/kernel-xattr-handler.m4 \
|
||||
$(top_srcdir)/config/kernel.m4 \
|
||||
$(top_srcdir)/config/user-arch.m4 \
|
||||
|
||||
Reference in New Issue
Block a user