Skip to content

Commit

Permalink
mm: hide laptop_mode_wb_timer entirely behind the BDI API
Browse files Browse the repository at this point in the history
Don't leak the detaіls of the timer into the block layer, instead
initialize the timer in bdi_alloc and delete it in bdi_unregister.
Note that this means the timer is initialized (but not armed) for
non-block queues as well now.

Signed-off-by: Christoph Hellwig <[email protected]>
Reviewed-by: Jan Kara <[email protected]>
Reviewed-by: Johannes Thumshirn <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Jens Axboe <[email protected]>
  • Loading branch information
Christoph Hellwig authored and axboe committed Aug 9, 2021
1 parent d1254a8 commit 5ed964f
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 7 deletions.
5 changes: 0 additions & 5 deletions block/blk-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -394,10 +394,7 @@ void blk_cleanup_queue(struct request_queue *q)
/* for synchronous bio-based driver finish in-flight integrity i/o */
blk_flush_integrity();

/* @q won't process any more request, flush async actions */
del_timer_sync(&q->backing_dev_info->laptop_mode_wb_timer);
blk_sync_queue(q);

if (queue_is_mq(q))
blk_mq_exit_queue(q);

Expand Down Expand Up @@ -546,8 +543,6 @@ struct request_queue *blk_alloc_queue(int node_id)

atomic_set(&q->nr_active_requests_shared_sbitmap, 0);

timer_setup(&q->backing_dev_info->laptop_mode_wb_timer,
laptop_mode_timer_fn, 0);
timer_setup(&q->timeout, blk_rq_timed_out_timer, 0);
INIT_WORK(&q->timeout_work, blk_timeout_work);
INIT_LIST_HEAD(&q->icq_list);
Expand Down
3 changes: 3 additions & 0 deletions mm/backing-dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -807,6 +807,7 @@ struct backing_dev_info *bdi_alloc(int node_id)
bdi->capabilities = BDI_CAP_WRITEBACK | BDI_CAP_WRITEBACK_ACCT;
bdi->ra_pages = VM_READAHEAD_PAGES;
bdi->io_pages = VM_READAHEAD_PAGES;
timer_setup(&bdi->laptop_mode_wb_timer, laptop_mode_timer_fn, 0);
return bdi;
}
EXPORT_SYMBOL(bdi_alloc);
Expand Down Expand Up @@ -928,6 +929,8 @@ static void bdi_remove_from_list(struct backing_dev_info *bdi)

void bdi_unregister(struct backing_dev_info *bdi)
{
del_timer_sync(&bdi->laptop_mode_wb_timer);

/* make sure nobody finds us on the bdi_list anymore */
bdi_remove_from_list(bdi);
wb_shutdown(&bdi->wb);
Expand Down
2 changes: 0 additions & 2 deletions mm/page-writeback.c
Original file line number Diff line number Diff line change
Expand Up @@ -2010,7 +2010,6 @@ int dirty_writeback_centisecs_handler(struct ctl_table *table, int write,
return ret;
}

#ifdef CONFIG_BLOCK
void laptop_mode_timer_fn(struct timer_list *t)
{
struct backing_dev_info *backing_dev_info =
Expand Down Expand Up @@ -2045,7 +2044,6 @@ void laptop_sync_completion(void)

rcu_read_unlock();
}
#endif

/*
* If ratelimit_pages is too high then we can get into dirty-data overload
Expand Down

0 comments on commit 5ed964f

Please sign in to comment.