On Fri 22-05-15 17:13:44, Tejun Heo wrote: > In several places, bdi_congested() and its wrappers are used to > determine whether more IOs should be issued. With cgroup writeback > support, this question can't be answered solely based on the bdi > (backing_dev_info). It's dependent on whether the filesystem and bdi > support cgroup writeback and the blkcg the inode is associated with. > > This patch implements inode_congested() and its wrappers which take > @inode and determines the congestion state considering cgroup > writeback. The new functions replace bdi_*congested() calls in places > where the query is about specific inode and task. > > There are several filesystem users which also fit this criteria but > they should be updated when each filesystem implements cgroup > writeback support. > > v2: Now that a given inode is associated with only one wb, congestion > state can be determined independent from the asking task. Drop > @task. Spotted by Vivek. Also, converted to take @inode instead > of @mapping and renamed to inode_congested(). > > Signed-off-by: Tejun Heo <tj@xxxxxxxxxx> > Cc: Jens Axboe <axboe@xxxxxxxxx> > Cc: Jan Kara <jack@xxxxxxx> > Cc: Vivek Goyal <vgoyal@xxxxxxxxxx> > --- > fs/fs-writeback.c | 29 +++++++++++++++++++++++++++++ > include/linux/backing-dev.h | 22 ++++++++++++++++++++++ > mm/fadvise.c | 2 +- > mm/readahead.c | 2 +- > mm/vmscan.c | 11 +++++------ > 5 files changed, 58 insertions(+), 8 deletions(-) > > diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c > index 99a2440..7ec491b 100644 > --- a/fs/fs-writeback.c > +++ b/fs/fs-writeback.c > @@ -142,6 +142,35 @@ static void __wb_start_writeback(struct bdi_writeback *wb, long nr_pages, > wb_queue_work(wb, work); > } > > +#ifdef CONFIG_CGROUP_WRITEBACK > + > +/** > + * inode_congested - test whether an inode is congested > + * @inode: inode to test for congestion > + * @cong_bits: mask of WB_[a]sync_congested bits to test > + * > + * Tests whether @inode is congested. @cong_bits is the mask of congestion > + * bits to test and the return value is the mask of set bits. > + * > + * If cgroup writeback is enabled for @inode, the congestion state is > + * determined by whether the cgwb (cgroup bdi_writeback) for the blkcg > + * associated with @inode is congested; otherwise, the root wb's congestion > + * state is used. > + */ > +int inode_congested(struct inode *inode, int cong_bits) > +{ > + if (inode) { Hum, is there any point in supporting NULL inode with inode_congested()? That would look more like a programming bug than anything... Otherwise the patch looks good to me so you can add: Reviewed-by: Jan Kara <jack@xxxxxxxx> Honza -- Jan Kara <jack@xxxxxxx> SUSE Labs, CR -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>