diff --git a/[refs] b/[refs] index 5e8965b6b56f..558767697379 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d0985394e7fee6b25a7cc8335d45bc1c1a8ab2d3 +refs/heads/master: 7a401a972df8e184b3d1a3fc958c0a4ddee8d312 diff --git a/trunk/mm/backing-dev.c b/trunk/mm/backing-dev.c index a0860640378d..71034f41a2ba 100644 --- a/trunk/mm/backing-dev.c +++ b/trunk/mm/backing-dev.c @@ -724,6 +724,14 @@ void bdi_destroy(struct backing_dev_info *bdi) bdi_unregister(bdi); + /* + * If bdi_unregister() had already been called earlier, the + * wakeup_timer could still be armed because bdi_prune_sb() + * can race with the bdi_wakeup_thread_delayed() calls from + * __mark_inode_dirty(). + */ + del_timer_sync(&bdi->wb.wakeup_timer); + for (i = 0; i < NR_BDI_STAT_ITEMS; i++) percpu_counter_destroy(&bdi->bdi_stat[i]);