[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <CE1E7D7EFA066443B6454A6A5063B50220D0B849@dggeml509-mbs.china.huawei.com>
Date: Thu, 11 Mar 2021 07:48:25 +0000
From: "chenjun (AM)" <chenjun102@...wei.com>
To: "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
"linux-fsdevel@...r.kernel.org" <linux-fsdevel@...r.kernel.org>
CC: Dan Williams <dan.j.williams@...el.com>, Jan Kara <jack@...e.cz>,
"Xiangrui (Euler)" <rui.xiang@...wei.com>,
"lizhe (Y)" <lizhe67@...wei.com>, yangerkun <yangerkun@...wei.com>,
"zhangyi (F)" <yi.zhang@...wei.com>
Subject: [question] Panic in dax_writeback_one
Hi
I write a driver to simulate memory as a block device (like a ramdisk).
and I hope the memory used would not be observed by kernel, becasue of
the struct page will take many memory.
When I mount ext2 with dax on my ramdisk. Panic will happen when fsync.
Call trace:
dax_writeback_one+0x330/0x3e4
dax_writeback_mapping_range+0x15c/0x318
ext2_dax_writepages+0x38/0x44
....
static int dax_writeback_one(struct xa_state *xas, struct dax_device
*dax_dev, struct address_space *mapping, void *entry)
----dax_flush(dax_dev, page_address(pfn_to_page(pfn)), count * PAGE_SIZE);
The pfn is returned by the driver. In my case, the pfn does not have
struct page. so pfn_to_page(pfn) return a wrong address.
I noticed the following changes may related to my problem:
1. Before 3fe0791c295cfd3cd735de7a32cc0780949c009f (dax: store pfns in
the radix), the radix tree stroes sectors. address which would be
flushed is got from driver by passing sector.
And the commit assume that all pfn have struct page.
2. CONFIG_FS_DAX_LIMITED (Selected by DCSSBLK [=n] && BLK_DEV [=y] &&
S390 && BLOCK [=y]) is added to avoid access struct page of pfn.
Does anyone have any idea about my problem.
--
Regards
Chen Jun
Powered by blists - more mailing lists