forked from Minki/linux
drbd: bm_page_async_io: properly initialize page->private
If bm_page_async_io is advised to use a new page for I/O (BM_AIO_COPY_PAGES is set), it will get it from a mempool. Once the mempool has to dip into its reserves the page is not reinitialized, i.e. page->private contains garbage, which will lead to various problems once the I/O completes (dereferences of NULL pointers, the submitting thread getting stuck in D-state, ...). Signed-off-by: Arne Redlich <arne.redlich@googlemail.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
This commit is contained in:
parent
a220d29180
commit
f66ee69746
@ -200,7 +200,7 @@ void drbd_bm_unlock(struct drbd_conf *mdev)
|
|||||||
static void bm_store_page_idx(struct page *page, unsigned long idx)
|
static void bm_store_page_idx(struct page *page, unsigned long idx)
|
||||||
{
|
{
|
||||||
BUG_ON(0 != (idx & ~BM_PAGE_IDX_MASK));
|
BUG_ON(0 != (idx & ~BM_PAGE_IDX_MASK));
|
||||||
page_private(page) |= idx;
|
set_page_private(page, idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned long bm_page_to_idx(struct page *page)
|
static unsigned long bm_page_to_idx(struct page *page)
|
||||||
|
Loading…
Reference in New Issue
Block a user