|
@@ -2798,30 +2798,6 @@ void unmap_mapping_range(struct address_space *mapping,
|
|
|
}
|
|
|
EXPORT_SYMBOL(unmap_mapping_range);
|
|
|
|
|
|
-int vmtruncate_range(struct inode *inode, loff_t offset, loff_t end)
|
|
|
-{
|
|
|
- struct address_space *mapping = inode->i_mapping;
|
|
|
-
|
|
|
- /*
|
|
|
- * If the underlying filesystem is not going to provide
|
|
|
- * a way to truncate a range of blocks (punch a hole) -
|
|
|
- * we should return failure right now.
|
|
|
- */
|
|
|
- if (!inode->i_op->truncate_range)
|
|
|
- return -ENOSYS;
|
|
|
-
|
|
|
- mutex_lock(&inode->i_mutex);
|
|
|
- down_write(&inode->i_alloc_sem);
|
|
|
- unmap_mapping_range(mapping, offset, (end - offset), 1);
|
|
|
- truncate_inode_pages_range(mapping, offset, end);
|
|
|
- unmap_mapping_range(mapping, offset, (end - offset), 1);
|
|
|
- inode->i_op->truncate_range(inode, offset, end);
|
|
|
- up_write(&inode->i_alloc_sem);
|
|
|
- mutex_unlock(&inode->i_mutex);
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* We enter with non-exclusive mmap_sem (to exclude vma changes,
|
|
|
* but allow concurrent faults), and pte mapped but not yet locked.
|