writeback: merge bdi_writeback_task and bdi_start_fn
Subsystems (3)
PATCH 3/3 writeback: merge bdi_writeback_task and bdi_start_fn
Move all code for the writeback thread into fs/fs-writeback.c instead of splitting it over two functions in two files.
Signed-off-by Christoph Hellwig <[email protected]>
fs/fs-writeback.c +34 -1
@@ -766,12 +766,36 @@ long wb_do_writeback(struct bdi_writebac* Handle writeback of dirty data for the device backed by this bdi. Also * wakes up periodically and does kupdated style flushing. */ -int bdi_writeback_task (struct bdi_writeback *wb) +int bdi_writeback_thread (void *data) { +struct bdi_writeback *wb = data; +struct backing_dev_info *bdi = wb->bdi;unsigned long last_active = jiffies;unsigned long wait_jiffies =-1UL ;long pages_written; +/* +* Add us to the active bdi_list +*/ +spin_lock_bh (&bdi_lock); +list_add_rcu (&bdi->bdi_list, &bdi_list); +spin_unlock_bh (&bdi_lock); + + current->flags |=PF_FLUSHER |PF_SWAPWRITE ; +set_freezable (); + +/* +* Our parent may run at a different priority, just set us to normal +*/ +set_user_nice (current,0 ); + +/* +* Clear pending bit and wakeup anybody waiting to tear us down +*/ +clear_bit (BDI_pending, &bdi->state); +smp_mb__after_clear_bit (); +wake_up_bit (&bdi->state, BDI_pending); +while (!kthread_should_stop ()) { pages_written =wb_do_writeback (wb,0 );
@@ -804,9 +828,18 @@ int bdi_writeback_task(struct bdi_writebtry_to_freeze (); } + wb->task =NULL ; + +/* +* Flush any work that raced with us exiting. No new work +* will be added, since this bdi isn't discoverable anymore. +*/ +if (!list_empty (&bdi->work_list)) +wb_do_writeback (wb,1 );return 0 ; } +/* * Start writeback of `nr_pages' pages. If `nr_pages' is zero, write back * the whole world.
include/linux/backing-dev.h +1 -1
@@ -102,7 +102,7 @@ void bdi_unregister(struct backing_dev_iint bdi_setup_and_register (struct backing_dev_info *,char *,unsigned int );void bdi_start_writeback (struct backing_dev_info *bdi,long nr_pages);void bdi_start_background_writeback (struct backing_dev_info *bdi); -int bdi_writeback_task (struct bdi_writeback *wb); +int bdi_writeback_thread (void *data);int bdi_has_dirty_io (struct backing_dev_info *bdi);void bdi_arm_supers_timer (void );
mm/backing-dev.c +1 -43
56 lines not on this page · raw message