提交 94004ed7 编写于 作者: C Christoph Hellwig 提交者: Jan Kara

kill wait_on_page_writeback_range

All callers really want the more logical filemap_fdatawait_range interface,
so convert them to use it and merge wait_on_page_writeback_range into
filemap_fdatawait_range.
Signed-off-by: NChristoph Hellwig <hch@lst.de>
Signed-off-by: NJan Kara <jack@suse.cz>
上级 6b2f3d1f
...@@ -472,7 +472,7 @@ __sync_single_inode) to check if ->writepages has been successful in ...@@ -472,7 +472,7 @@ __sync_single_inode) to check if ->writepages has been successful in
writing out the whole address_space. writing out the whole address_space.
The Writeback tag is used by filemap*wait* and sync_page* functions, The Writeback tag is used by filemap*wait* and sync_page* functions,
via wait_on_page_writeback_range, to wait for all writeback to via filemap_fdatawait_range, to wait for all writeback to
complete. While waiting ->sync_page (if defined) will be called on complete. While waiting ->sync_page (if defined) will be called on
each page that is found to require writeback. each page that is found to require writeback.
......
...@@ -286,7 +286,7 @@ static int journal_finish_inode_data_buffers(journal_t *journal, ...@@ -286,7 +286,7 @@ static int journal_finish_inode_data_buffers(journal_t *journal,
if (err) { if (err) {
/* /*
* Because AS_EIO is cleared by * Because AS_EIO is cleared by
* wait_on_page_writeback_range(), set it again so * filemap_fdatawait_range(), set it again so
* that user process can get -EIO from fsync(). * that user process can get -EIO from fsync().
*/ */
set_bit(AS_EIO, set_bit(AS_EIO,
......
...@@ -453,9 +453,7 @@ int do_sync_mapping_range(struct address_space *mapping, loff_t offset, ...@@ -453,9 +453,7 @@ int do_sync_mapping_range(struct address_space *mapping, loff_t offset,
ret = 0; ret = 0;
if (flags & SYNC_FILE_RANGE_WAIT_BEFORE) { if (flags & SYNC_FILE_RANGE_WAIT_BEFORE) {
ret = wait_on_page_writeback_range(mapping, ret = filemap_fdatawait_range(mapping, offset, endbyte);
offset >> PAGE_CACHE_SHIFT,
endbyte >> PAGE_CACHE_SHIFT);
if (ret < 0) if (ret < 0)
goto out; goto out;
} }
...@@ -468,9 +466,7 @@ int do_sync_mapping_range(struct address_space *mapping, loff_t offset, ...@@ -468,9 +466,7 @@ int do_sync_mapping_range(struct address_space *mapping, loff_t offset,
} }
if (flags & SYNC_FILE_RANGE_WAIT_AFTER) { if (flags & SYNC_FILE_RANGE_WAIT_AFTER) {
ret = wait_on_page_writeback_range(mapping, ret = filemap_fdatawait_range(mapping, offset, endbyte);
offset >> PAGE_CACHE_SHIFT,
endbyte >> PAGE_CACHE_SHIFT);
} }
out: out:
return ret; return ret;
......
...@@ -2091,8 +2091,6 @@ extern int filemap_fdatawait_range(struct address_space *, loff_t lstart, ...@@ -2091,8 +2091,6 @@ extern int filemap_fdatawait_range(struct address_space *, loff_t lstart,
extern int filemap_write_and_wait(struct address_space *mapping); extern int filemap_write_and_wait(struct address_space *mapping);
extern int filemap_write_and_wait_range(struct address_space *mapping, extern int filemap_write_and_wait_range(struct address_space *mapping,
loff_t lstart, loff_t lend); loff_t lstart, loff_t lend);
extern int wait_on_page_writeback_range(struct address_space *mapping,
pgoff_t start, pgoff_t end);
extern int __filemap_fdatawrite_range(struct address_space *mapping, extern int __filemap_fdatawrite_range(struct address_space *mapping,
loff_t start, loff_t end, int sync_mode); loff_t start, loff_t end, int sync_mode);
extern int filemap_fdatawrite_range(struct address_space *mapping, extern int filemap_fdatawrite_range(struct address_space *mapping,
......
...@@ -260,27 +260,27 @@ int filemap_flush(struct address_space *mapping) ...@@ -260,27 +260,27 @@ int filemap_flush(struct address_space *mapping)
EXPORT_SYMBOL(filemap_flush); EXPORT_SYMBOL(filemap_flush);
/** /**
* wait_on_page_writeback_range - wait for writeback to complete * filemap_fdatawait_range - wait for writeback to complete
* @mapping: target address_space * @mapping: address space structure to wait for
* @start: beginning page index * @start_byte: offset in bytes where the range starts
* @end: ending page index * @end_byte: offset in bytes where the range ends (inclusive)
* *
* Wait for writeback to complete against pages indexed by start->end * Walk the list of under-writeback pages of the given address space
* inclusive * in the given range and wait for all of them.
*/ */
int wait_on_page_writeback_range(struct address_space *mapping, int filemap_fdatawait_range(struct address_space *mapping, loff_t start_byte,
pgoff_t start, pgoff_t end) loff_t end_byte)
{ {
pgoff_t index = start_byte >> PAGE_CACHE_SHIFT;
pgoff_t end = end_byte >> PAGE_CACHE_SHIFT;
struct pagevec pvec; struct pagevec pvec;
int nr_pages; int nr_pages;
int ret = 0; int ret = 0;
pgoff_t index;
if (end < start) if (end_byte < start_byte)
return 0; return 0;
pagevec_init(&pvec, 0); pagevec_init(&pvec, 0);
index = start;
while ((index <= end) && while ((index <= end) &&
(nr_pages = pagevec_lookup_tag(&pvec, mapping, &index, (nr_pages = pagevec_lookup_tag(&pvec, mapping, &index,
PAGECACHE_TAG_WRITEBACK, PAGECACHE_TAG_WRITEBACK,
...@@ -310,25 +310,6 @@ int wait_on_page_writeback_range(struct address_space *mapping, ...@@ -310,25 +310,6 @@ int wait_on_page_writeback_range(struct address_space *mapping,
return ret; return ret;
} }
/**
* filemap_fdatawait_range - wait for all under-writeback pages to complete in a given range
* @mapping: address space structure to wait for
* @start: offset in bytes where the range starts
* @end: offset in bytes where the range ends (inclusive)
*
* Walk the list of under-writeback pages of the given address space
* in the given range and wait for all of them.
*
* This is just a simple wrapper so that callers don't have to convert offsets
* to page indexes themselves
*/
int filemap_fdatawait_range(struct address_space *mapping, loff_t start,
loff_t end)
{
return wait_on_page_writeback_range(mapping, start >> PAGE_CACHE_SHIFT,
end >> PAGE_CACHE_SHIFT);
}
EXPORT_SYMBOL(filemap_fdatawait_range); EXPORT_SYMBOL(filemap_fdatawait_range);
/** /**
...@@ -345,8 +326,7 @@ int filemap_fdatawait(struct address_space *mapping) ...@@ -345,8 +326,7 @@ int filemap_fdatawait(struct address_space *mapping)
if (i_size == 0) if (i_size == 0)
return 0; return 0;
return wait_on_page_writeback_range(mapping, 0, return filemap_fdatawait_range(mapping, 0, i_size - 1);
(i_size - 1) >> PAGE_CACHE_SHIFT);
} }
EXPORT_SYMBOL(filemap_fdatawait); EXPORT_SYMBOL(filemap_fdatawait);
...@@ -393,9 +373,8 @@ int filemap_write_and_wait_range(struct address_space *mapping, ...@@ -393,9 +373,8 @@ int filemap_write_and_wait_range(struct address_space *mapping,
WB_SYNC_ALL); WB_SYNC_ALL);
/* See comment of filemap_write_and_wait() */ /* See comment of filemap_write_and_wait() */
if (err != -EIO) { if (err != -EIO) {
int err2 = wait_on_page_writeback_range(mapping, int err2 = filemap_fdatawait_range(mapping,
lstart >> PAGE_CACHE_SHIFT, lstart, lend);
lend >> PAGE_CACHE_SHIFT);
if (!err) if (!err)
err = err2; err = err2;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册