diff options
Diffstat (limited to 'mm/backing-dev.c')
-rw-r--r-- | mm/backing-dev.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/mm/backing-dev.c b/mm/backing-dev.c index 6d861d090e9f..6ac932210f56 100644 --- a/mm/backing-dev.c +++ b/mm/backing-dev.c | |||
@@ -710,6 +710,11 @@ static void cgwb_bdi_destroy(struct backing_dev_info *bdi) | |||
710 | */ | 710 | */ |
711 | atomic_dec(&bdi->usage_cnt); | 711 | atomic_dec(&bdi->usage_cnt); |
712 | wait_event(cgwb_release_wait, !atomic_read(&bdi->usage_cnt)); | 712 | wait_event(cgwb_release_wait, !atomic_read(&bdi->usage_cnt)); |
713 | /* | ||
714 | * Grab back our reference so that we hold it when @bdi gets | ||
715 | * re-registered. | ||
716 | */ | ||
717 | atomic_inc(&bdi->usage_cnt); | ||
713 | } | 718 | } |
714 | 719 | ||
715 | /** | 720 | /** |
@@ -857,6 +862,8 @@ int bdi_register_owner(struct backing_dev_info *bdi, struct device *owner) | |||
857 | MINOR(owner->devt)); | 862 | MINOR(owner->devt)); |
858 | if (rc) | 863 | if (rc) |
859 | return rc; | 864 | return rc; |
865 | /* Leaking owner reference... */ | ||
866 | WARN_ON(bdi->owner); | ||
860 | bdi->owner = owner; | 867 | bdi->owner = owner; |
861 | get_device(owner); | 868 | get_device(owner); |
862 | return 0; | 869 | return 0; |