mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
writeback: pass in super_block to bdi_start_writeback()
Sometimes we only want to write pages from a specific super_block,
so allow that to be passed in.
This fixes a problem with commit 56a131dcf7
causing writeback on all super_blocks on a bdi, where we only really
want to sync a specific sb from writeback_inodes_sb().
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
parent
6d7f18f6ea
commit
a72bfd4dea
3 changed files with 7 additions and 4 deletions
|
@ -250,9 +250,11 @@ static void bdi_sync_writeback(struct backing_dev_info *bdi,
|
||||||
* completion. Caller need not hold sb s_umount semaphore.
|
* completion. Caller need not hold sb s_umount semaphore.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void bdi_start_writeback(struct backing_dev_info *bdi, long nr_pages)
|
void bdi_start_writeback(struct backing_dev_info *bdi, struct super_block *sb,
|
||||||
|
long nr_pages)
|
||||||
{
|
{
|
||||||
struct wb_writeback_args args = {
|
struct wb_writeback_args args = {
|
||||||
|
.sb = sb,
|
||||||
.sync_mode = WB_SYNC_NONE,
|
.sync_mode = WB_SYNC_NONE,
|
||||||
.nr_pages = nr_pages,
|
.nr_pages = nr_pages,
|
||||||
.range_cyclic = 1,
|
.range_cyclic = 1,
|
||||||
|
@ -1206,7 +1208,7 @@ void writeback_inodes_sb(struct super_block *sb)
|
||||||
nr_to_write = nr_dirty + nr_unstable +
|
nr_to_write = nr_dirty + nr_unstable +
|
||||||
(inodes_stat.nr_inodes - inodes_stat.nr_unused);
|
(inodes_stat.nr_inodes - inodes_stat.nr_unused);
|
||||||
|
|
||||||
bdi_start_writeback(sb->s_bdi, nr_to_write);
|
bdi_start_writeback(sb->s_bdi, sb, nr_to_write);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(writeback_inodes_sb);
|
EXPORT_SYMBOL(writeback_inodes_sb);
|
||||||
|
|
||||||
|
|
|
@ -101,7 +101,8 @@ int bdi_register(struct backing_dev_info *bdi, struct device *parent,
|
||||||
const char *fmt, ...);
|
const char *fmt, ...);
|
||||||
int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev);
|
int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev);
|
||||||
void bdi_unregister(struct backing_dev_info *bdi);
|
void bdi_unregister(struct backing_dev_info *bdi);
|
||||||
void bdi_start_writeback(struct backing_dev_info *bdi, long nr_pages);
|
void bdi_start_writeback(struct backing_dev_info *bdi, struct super_block *sb,
|
||||||
|
long nr_pages);
|
||||||
int bdi_writeback_task(struct bdi_writeback *wb);
|
int bdi_writeback_task(struct bdi_writeback *wb);
|
||||||
int bdi_has_dirty_io(struct backing_dev_info *bdi);
|
int bdi_has_dirty_io(struct backing_dev_info *bdi);
|
||||||
|
|
||||||
|
|
|
@ -596,7 +596,7 @@ static void balance_dirty_pages(struct address_space *mapping,
|
||||||
(!laptop_mode && ((global_page_state(NR_FILE_DIRTY)
|
(!laptop_mode && ((global_page_state(NR_FILE_DIRTY)
|
||||||
+ global_page_state(NR_UNSTABLE_NFS))
|
+ global_page_state(NR_UNSTABLE_NFS))
|
||||||
> background_thresh)))
|
> background_thresh)))
|
||||||
bdi_start_writeback(bdi, 0);
|
bdi_start_writeback(bdi, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_page_dirty_balance(struct page *page, int page_mkwrite)
|
void set_page_dirty_balance(struct page *page, int page_mkwrite)
|
||||||
|
|
Loading…
Reference in a new issue