diff options
author | Jan Kara <jack@suse.cz> | 2017-03-08 17:48:31 +0100 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2017-03-08 10:55:17 -0700 |
commit | b6f8fec4448aa52a8c36a392aa1ca2ea99acd460 (patch) | |
tree | 659041df7070189896307ebe2bee2cf2b6d713b7 /mm/mprotect.c | |
parent | b0bfdfc2bf7fa85317824c6a389fc373dfcef5bc (diff) | |
download | linux-b6f8fec4448aa52a8c36a392aa1ca2ea99acd460.tar.bz2 |
block: Allow bdi re-registration
SCSI can call device_add_disk() several times for one request queue when
a device in unbound and bound, creating new gendisk each time. This will
lead to bdi being repeatedly registered and unregistered. This was not a
big problem until commit 165a5e22fafb "block: Move bdi_unregister() to
del_gendisk()" since bdi was only registered repeatedly (bdi_register()
handles repeated calls fine, only we ended up leaking reference to
gendisk due to overwriting bdi->owner) but unregistered only in
blk_cleanup_queue() which didn't get called repeatedly. After
165a5e22fafb we were doing correct bdi_register() - bdi_unregister()
cycles however bdi_unregister() is not prepared for it. So make sure
bdi_unregister() cleans up bdi in such a way that it is prepared for
a possible following bdi_register() call.
An easy way to provoke this behavior is to enable
CONFIG_DEBUG_TEST_DRIVER_REMOVE and use scsi_debug driver to create a
scsi disk which immediately hangs without this fix.
Fixes: 165a5e22fafb127ecb5914e12e8c32a1f0d3f820
Signed-off-by: Jan Kara <jack@suse.cz>
Tested-by: Omar Sandoval <osandov@fb.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'mm/mprotect.c')
0 files changed, 0 insertions, 0 deletions