mirror of https://gitee.com/openkylin/linux.git
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: Christoph Hellwig <hch@lst.de> Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
parent
6b2f3d1f76
commit
94004ed726
|
@ -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,
|
||||||
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,
|
||||||
|
|
||||||
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,
|
||||||
}
|
}
|
||||||
|
|
||||||
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,
|
||||||
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,
|
||||||
|
|
49
mm/filemap.c
49
mm/filemap.c
|
@ -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,
|
||||||
|
|
||||||
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)
|
||||||
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,
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue