[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <148375097100.37020.495735345355345658.stgit@dwillia2-desk3.amr.corp.intel.com>
Date: Fri, 06 Jan 2017 17:02:51 -0800
From: Dan Williams <dan.j.williams@...el.com>
To: linux-block@...r.kernel.org
Cc: Andi Kleen <ak@...ux.intel.com>, Jan Kara <jack@...e.cz>,
Rabin Vincent <rabinv@...s.com>, linux-nvdimm@...ts.01.org,
linux-kernel@...r.kernel.org, Jens Axboe <axboe@...com>,
Jeff Moyer <jmoyer@...hat.com>, Wei Fang <fangwei1@...wei.com>,
linux-fsdevel@...r.kernel.org, Christoph Hellwig <hch@....de>
Subject: [RFC PATCH v2 0/2] block: fix backing_dev_info lifetime
v1 of these changes [1] was a one line change to bdev_get_queue() to
prevent a shutdown crash when del_gendisk() races the final
__blkdev_put().
While it is known at del_gendisk() time that the queue is still alive,
Jan Kara points to other paths [2] that are racing __blkdev_put() where
the assumption that ->bd_queue, or inode->i_wb is valid does not hold.
Fix that broken assumption, make it the case that if you have a live
block_device, or block_device-inode that the corresponding queue and
inode-write-back data is still valid.
These changes survive a run of the libnvdimm unit test suite which puts
some stress on the block_device shutdown path.
---
Changes since v1 [1]:
* Introduce "block: fix lifetime of request_queue / backing_dev_info
relative to bdev" to keep the queue allocated and the inode attached
for writeback until ->destroy_inode() time.
* Rework the comments in "block: fix blk_get_backing_dev_info() crash,
use bdev->bd_queue" to reflect the assumptions about the liveness of
->bd_queue.
[1]: http://marc.info/?l=linux-block&m=148366637105761&w=2
[2]: http://www.spinics.net/lists/linux-fsdevel/msg105153.html
---
Dan Williams (2):
block: fix lifetime of request_queue / backing_dev_info relative to bdev
block: fix blk_get_backing_dev_info() crash, use bdev->bd_queue
block/blk-core.c | 7 ++++---
fs/block_dev.c | 25 +++++++++++++++----------
include/linux/blkdev.h | 6 +++++-
include/linux/fs.h | 1 +
4 files changed, 25 insertions(+), 14 deletions(-)
Powered by blists - more mailing lists