To fix this bug it's necessary to fix several issues with lifetime of structures in the block subsystem, as well as a number of related race conditions. A number of patches need to be backported to fix these problems:
The "BDI lifetime fix" v3 series?, which was already merged into Linus' tree:
f44f1ab5a2dc block: Unhash block device inodes on gendisk destruction
dc3b17cc8bf2 block: Use pointer to backing_dev_info from request_queue
d03f6cdc1fc4 block: Dynamically allocate and refcount backing_dev_info
b1d2dc5659b4 block: Make blk_get_backing_dev_info() safe without open bdev
efa7c9f97e3e block: Get rid of blk_get_backing_dev_info()
A couple of follow up fixes were merged for commits dc3b17cc8bf and b1d2dc5659b4:
e17354961bb5 zram_drv: update for backing dev info changes
a5a79d00017c block: Initialize bd_bdi on inode initialization
The first 4 patches from the "block: Fix block device shutdown related races" v2 series? were also merged:
4b8c861a7c79 block: Move bdev_unhash_inode() after invalidate_partition()
d06e05c026ab block: Unhash also block device inode for the whole device
cccd9fb9ec96 block: Revalidate i_bdev reference in bd_aquire()
165a5e22fafb block: Move bdi_unregister() to del_gendisk()
A couple of follow up fixes were also merged for commit 165a5e22fafb:
I have a branch with the patches that were already merged upstream backported on top of tag Ubuntu-4.4.0-65.86. Most of the commits didn't have any conflicts, and the ones that did were simple to resolve.
I will attach the backported patches to this bug report when all of the patches that we need are accepted upstream.
------- Comment From <email address hidden> 2017-03-13 14:27 EDT-------
Hello Canonical,
Let me provide a status update:
To fix this bug it's necessary to fix several issues with lifetime of structures in the block subsystem, as well as a number of related race conditions. A number of patches need to be backported to fix these problems:
The "BDI lifetime fix" v3 series?, which was already merged into Linus' tree:
f44f1ab5a2dc block: Unhash block device inodes on gendisk destruction backing_ dev_info( ) safe without open bdev backing_ dev_info( )
dc3b17cc8bf2 block: Use pointer to backing_dev_info from request_queue
d03f6cdc1fc4 block: Dynamically allocate and refcount backing_dev_info
b1d2dc5659b4 block: Make blk_get_
efa7c9f97e3e block: Get rid of blk_get_
A couple of follow up fixes were merged for commits dc3b17cc8bf and b1d2dc5659b4:
e17354961bb5 zram_drv: update for backing dev info changes
a5a79d00017c block: Initialize bd_bdi on inode initialization
The first 4 patches from the "block: Fix block device shutdown related races" v2 series? were also merged:
4b8c861a7c79 block: Move bdev_unhash_inode() after invalidate_ partition( )
d06e05c026ab block: Unhash also block device inode for the whole device
cccd9fb9ec96 block: Revalidate i_bdev reference in bd_aquire()
165a5e22fafb block: Move bdi_unregister() to del_gendisk()
A couple of follow up fixes were also merged for commit 165a5e22fafb:
b6f8fec4448a block: Allow bdi re-registration
df23de55615f bdi: Fix use-after-free in wb_congested_put()
Commit df23de55615f depends on the following commit:
5f478e4ea5c5 block: fix double-free in the failure path of cgwb_bdi_init()
In addition to the commits mentioned above, we will also need the patches from v4 of the same series, which was posted today:
https:/ /marc.info/ ?l=linux- block&m= 148941806220331 &w=2
I have a branch with the patches that were already merged upstream backported on top of tag Ubuntu-4.4.0-65.86. Most of the commits didn't have any conflicts, and the ones that did were simple to resolve.
I will attach the backported patches to this bug report when all of the patches that we need are accepted upstream.
-- /marc.info/ ?l=linux- block&m= 148604743126356 &w=2 /marc.info/ ?l=linux- block&m= 148769705431982 &w=2
? https:/
? https:/