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 | 60 | struct bdi_writeback; |
| 61 | 61 | int inode_wait(void *); |
| 62 | 62 | void writeback_inodes_sb(struct super_block *); |
| 63 | +void writeback_inodes_sb_nr(struct super_block *, unsigned long nr); | |
| 63 | 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 | 66 | void sync_inodes_sb(struct super_block *); |
| 65 | 67 | void writeback_inodes_wb(struct bdi_writeback *wb, |
| 66 | 68 | struct writeback_control *wbc); |