When btrfs is running low on metadata space, it needs to force delayed allocation pages to disk. It currently does this with a suboptimal walk of a private list of inodes with delayed allocation, and it would be much better if we used the generic flusher threads. writeback_inodes_sb_if_idle would be ideal, but it waits for the flusher thread to start IO on all the dirty pages in the FS before it returns. This adds variants of writeback_inodes_sb* that allow the caller to control how many pages get sent down.
Showing the changes to include (1 of 2 files). Show all
Unified · Split
| @@ -60,7 +60,9 @@ struct writeback_control { · 59 unmodified lines | |||
| 60 | struct bdi_writeback; | 60 | struct bdi_writeback; |
| 61 | int inode_wait(void *); | 61 | int inode_wait(void *); |
| 62 | void writeback_inodes_sb(struct super_block *); | 62 | void writeback_inodes_sb(struct super_block *); |
| 63 | void writeback_inodes_sb_nr(struct super_block *, unsigned long nr); | ||
| 63 | int writeback_inodes_sb_if_idle(struct super_block *); | 64 | int writeback_inodes_sb_if_idle(struct super_block *); |
| 65 | int writeback_inodes_sb_nr_if_idle(struct super_block *, unsigned long nr); | ||
| 64 | void sync_inodes_sb(struct super_block *); | 66 | void sync_inodes_sb(struct super_block *); |
| 65 | void writeback_inodes_wb(struct bdi_writeback *wb, | 67 | void writeback_inodes_wb(struct bdi_writeback *wb, |
| 66 | struct writeback_control *wbc); | 68 | struct writeback_control *wbc); |