提交 8a549bea 编写于 作者: H Hugh Dickins 提交者: Linus Torvalds

mm: tidy vmtruncate_range and related functions

Use consistent variable names in truncate_pagecache(), truncate_setsize(),
vmtruncate() and vmtruncate_range().

unmap_mapping_range() and vmtruncate_range() have mismatched interfaces:
don't change either, but make the vmtruncates more precise about what they
expect unmap_mapping_range() to do.

vmtruncate_range() is currently called only with page-aligned start and
end+1: can handle unaligned start, but unaligned end+1 would hit BUG_ON in
truncate_inode_pages_range() (lacks partial clearing of the end page).
Signed-off-by: NHugh Dickins <hughd@google.com>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 85821aab
master alk-4.19.24 alk-4.19.30 alk-4.19.34 alk-4.19.36 alk-4.19.43 alk-4.19.48 alk-4.19.57 ck-4.19.67 ck-4.19.81 ck-4.19.91 github/fork/deepanshu1422/fix-typo-in-comment github/fork/haosdent/fix-typo linux-next v4.19.91 v4.19.90 v4.19.89 v4.19.88 v4.19.87 v4.19.86 v4.19.85 v4.19.84 v4.19.83 v4.19.82 v4.19.81 v4.19.80 v4.19.79 v4.19.78 v4.19.77 v4.19.76 v4.19.75 v4.19.74 v4.19.73 v4.19.72 v4.19.71 v4.19.70 v4.19.69 v4.19.68 v4.19.67 v4.19.66 v4.19.65 v4.19.64 v4.19.63 v4.19.62 v4.19.61 v4.19.60 v4.19.59 v4.19.58 v4.19.57 v4.19.56 v4.19.55 v4.19.54 v4.19.53 v4.19.52 v4.19.51 v4.19.50 v4.19.49 v4.19.48 v4.19.47 v4.19.46 v4.19.45 v4.19.44 v4.19.43 v4.19.42 v4.19.41 v4.19.40 v4.19.39 v4.19.38 v4.19.37 v4.19.36 v4.19.35 v4.19.34 v4.19.33 v4.19.32 v4.19.31 v4.19.30 v4.19.29 v4.19.28 v4.19.27 v4.19.26 v4.19.25 v4.19.24 v4.19.23 v4.19.22 v4.19.21 v4.19.20 v4.19.19 v4.19.18 v4.19.17 v4.19.16 v4.19.15 v4.19.14 v4.19.13 v4.19.12 v4.19.11 v4.19.10 v4.19.9 v4.19.8 v4.19.7 v4.19.6 v4.19.5 v4.19.4 v4.19.3 v4.19.2 v4.19.1 v4.19 v4.19-rc8 v4.19-rc7 v4.19-rc6 v4.19-rc5 v4.19-rc4 v4.19-rc3 v4.19-rc2 v4.19-rc1 ck-release-21 ck-release-20 ck-release-19.2 ck-release-19.1 ck-release-19 ck-release-18 ck-release-17.2 ck-release-17.1 ck-release-17 ck-release-16 ck-release-15.1 ck-release-15 ck-release-14 ck-release-13.2 ck-release-13 ck-release-12 ck-release-11 ck-release-10 ck-release-9 ck-release-7 alk-release-15 alk-release-14 alk-release-13.2 alk-release-13 alk-release-12 alk-release-11 alk-release-10 alk-release-9 alk-release-7
无相关合并请求
...@@ -531,8 +531,8 @@ EXPORT_SYMBOL_GPL(invalidate_inode_pages2); ...@@ -531,8 +531,8 @@ EXPORT_SYMBOL_GPL(invalidate_inode_pages2);
/** /**
* truncate_pagecache - unmap and remove pagecache that has been truncated * truncate_pagecache - unmap and remove pagecache that has been truncated
* @inode: inode * @inode: inode
* @old: old file offset * @oldsize: old file size
* @new: new file offset * @newsize: new file size
* *
* inode's new i_size must already be written before truncate_pagecache * inode's new i_size must already be written before truncate_pagecache
* is called. * is called.
...@@ -544,9 +544,10 @@ EXPORT_SYMBOL_GPL(invalidate_inode_pages2); ...@@ -544,9 +544,10 @@ EXPORT_SYMBOL_GPL(invalidate_inode_pages2);
* situations such as writepage being called for a page that has already * situations such as writepage being called for a page that has already
* had its underlying blocks deallocated. * had its underlying blocks deallocated.
*/ */
void truncate_pagecache(struct inode *inode, loff_t old, loff_t new) void truncate_pagecache(struct inode *inode, loff_t oldsize, loff_t newsize)
{ {
struct address_space *mapping = inode->i_mapping; struct address_space *mapping = inode->i_mapping;
loff_t holebegin = round_up(newsize, PAGE_SIZE);
/* /*
* unmap_mapping_range is called twice, first simply for * unmap_mapping_range is called twice, first simply for
...@@ -557,9 +558,9 @@ void truncate_pagecache(struct inode *inode, loff_t old, loff_t new) ...@@ -557,9 +558,9 @@ void truncate_pagecache(struct inode *inode, loff_t old, loff_t new)
* truncate_inode_pages finishes, hence the second * truncate_inode_pages finishes, hence the second
* unmap_mapping_range call must be made for correctness. * unmap_mapping_range call must be made for correctness.
*/ */
unmap_mapping_range(mapping, new + PAGE_SIZE - 1, 0, 1); unmap_mapping_range(mapping, holebegin, 0, 1);
truncate_inode_pages(mapping, new); truncate_inode_pages(mapping, newsize);
unmap_mapping_range(mapping, new + PAGE_SIZE - 1, 0, 1); unmap_mapping_range(mapping, holebegin, 0, 1);
} }
EXPORT_SYMBOL(truncate_pagecache); EXPORT_SYMBOL(truncate_pagecache);
...@@ -589,29 +590,31 @@ EXPORT_SYMBOL(truncate_setsize); ...@@ -589,29 +590,31 @@ EXPORT_SYMBOL(truncate_setsize);
/** /**
* vmtruncate - unmap mappings "freed" by truncate() syscall * vmtruncate - unmap mappings "freed" by truncate() syscall
* @inode: inode of the file used * @inode: inode of the file used
* @offset: file offset to start truncating * @newsize: file offset to start truncating
* *
* This function is deprecated and truncate_setsize or truncate_pagecache * This function is deprecated and truncate_setsize or truncate_pagecache
* should be used instead, together with filesystem specific block truncation. * should be used instead, together with filesystem specific block truncation.
*/ */
int vmtruncate(struct inode *inode, loff_t offset) int vmtruncate(struct inode *inode, loff_t newsize)
{ {
int error; int error;
error = inode_newsize_ok(inode, offset); error = inode_newsize_ok(inode, newsize);
if (error) if (error)
return error; return error;
truncate_setsize(inode, offset); truncate_setsize(inode, newsize);
if (inode->i_op->truncate) if (inode->i_op->truncate)
inode->i_op->truncate(inode); inode->i_op->truncate(inode);
return 0; return 0;
} }
EXPORT_SYMBOL(vmtruncate); EXPORT_SYMBOL(vmtruncate);
int vmtruncate_range(struct inode *inode, loff_t offset, loff_t end) int vmtruncate_range(struct inode *inode, loff_t lstart, loff_t lend)
{ {
struct address_space *mapping = inode->i_mapping; struct address_space *mapping = inode->i_mapping;
loff_t holebegin = round_up(lstart, PAGE_SIZE);
loff_t holelen = 1 + lend - holebegin;
/* /*
* If the underlying filesystem is not going to provide * If the underlying filesystem is not going to provide
...@@ -623,10 +626,10 @@ int vmtruncate_range(struct inode *inode, loff_t offset, loff_t end) ...@@ -623,10 +626,10 @@ int vmtruncate_range(struct inode *inode, loff_t offset, loff_t end)
mutex_lock(&inode->i_mutex); mutex_lock(&inode->i_mutex);
inode_dio_wait(inode); inode_dio_wait(inode);
unmap_mapping_range(mapping, offset, (end - offset), 1); unmap_mapping_range(mapping, holebegin, holelen, 1);
inode->i_op->truncate_range(inode, offset, end); inode->i_op->truncate_range(inode, lstart, lend);
/* unmap again to remove racily COWed private pages */ /* unmap again to remove racily COWed private pages */
unmap_mapping_range(mapping, offset, (end - offset), 1); unmap_mapping_range(mapping, holebegin, holelen, 1);
mutex_unlock(&inode->i_mutex); mutex_unlock(&inode->i_mutex);
return 0; return 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册
反馈
建议
客服 返回
顶部