Message ID | 20130925151811.GA32800@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Applied this to the ceph-client.git master branch. I'll send this upstream shortly after it gets some testing and/or any other fixes pile up. Thanks! sage On Wed, 25 Sep 2013, Milosz Tanski wrote: > In some cases I'm on my ceph client cluster I'm seeing hunk kernel tasks in > the invalidate page code path. This is due to the fact that we don't check if > the page is marked as cache before calling fscache_wait_on_page_write(). > > This is the log from the hang > > INFO: task XXXXXX:12034 blocked for more than 120 seconds. > "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. > ... > Call Trace: > [<ffffffff81568d09>] schedule+0x29/0x70 > [<ffffffffa01d4cbd>] __fscache_wait_on_page_write+0x6d/0xb0 [fscache] > [<ffffffff81083520>] ? add_wait_queue+0x60/0x60 > [<ffffffffa029a3e9>] ceph_invalidate_fscache_page+0x29/0x50 [ceph] > [<ffffffffa027df00>] ceph_invalidatepage+0x70/0x190 [ceph] > [<ffffffff8112656f>] ? delete_from_page_cache+0x5f/0x70 > [<ffffffff81133cab>] truncate_inode_page+0x8b/0x90 > [<ffffffff81133ded>] truncate_inode_pages_range.part.12+0x13d/0x620 > [<ffffffff8113431d>] truncate_inode_pages_range+0x4d/0x60 > [<ffffffff811343b5>] truncate_inode_pages+0x15/0x20 > [<ffffffff8119bbf6>] evict+0x1a6/0x1b0 > [<ffffffff8119c3f3>] iput+0x103/0x190 > ... > > Signed-off-by: Milosz Tanski <milosz@adfin.com> > --- > fs/ceph/cache.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/fs/ceph/cache.c b/fs/ceph/cache.c > index 6bfe65e..360b622 100644 > --- a/fs/ceph/cache.c > +++ b/fs/ceph/cache.c > @@ -324,6 +324,9 @@ void ceph_invalidate_fscache_page(struct inode* inode, struct page *page) > { > struct ceph_inode_info *ci = ceph_inode(inode); > > + if (!PageFsCache(page)) > + return; > + > fscache_wait_on_page_write(ci->fscache, page); > fscache_uncache_page(ci->fscache, page); > } > -- > 1.7.9.5 > > -- > To unsubscribe from this list: send the line "unsubscribe ceph-devel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > > -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/fs/ceph/cache.c b/fs/ceph/cache.c index 6bfe65e..360b622 100644 --- a/fs/ceph/cache.c +++ b/fs/ceph/cache.c @@ -324,6 +324,9 @@ void ceph_invalidate_fscache_page(struct inode* inode, struct page *page) { struct ceph_inode_info *ci = ceph_inode(inode); + if (!PageFsCache(page)) + return; + fscache_wait_on_page_write(ci->fscache, page); fscache_uncache_page(ci->fscache, page); }
In some cases I'm on my ceph client cluster I'm seeing hunk kernel tasks in the invalidate page code path. This is due to the fact that we don't check if the page is marked as cache before calling fscache_wait_on_page_write(). This is the log from the hang INFO: task XXXXXX:12034 blocked for more than 120 seconds. "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. ... Call Trace: [<ffffffff81568d09>] schedule+0x29/0x70 [<ffffffffa01d4cbd>] __fscache_wait_on_page_write+0x6d/0xb0 [fscache] [<ffffffff81083520>] ? add_wait_queue+0x60/0x60 [<ffffffffa029a3e9>] ceph_invalidate_fscache_page+0x29/0x50 [ceph] [<ffffffffa027df00>] ceph_invalidatepage+0x70/0x190 [ceph] [<ffffffff8112656f>] ? delete_from_page_cache+0x5f/0x70 [<ffffffff81133cab>] truncate_inode_page+0x8b/0x90 [<ffffffff81133ded>] truncate_inode_pages_range.part.12+0x13d/0x620 [<ffffffff8113431d>] truncate_inode_pages_range+0x4d/0x60 [<ffffffff811343b5>] truncate_inode_pages+0x15/0x20 [<ffffffff8119bbf6>] evict+0x1a6/0x1b0 [<ffffffff8119c3f3>] iput+0x103/0x190 ... Signed-off-by: Milosz Tanski <milosz@adfin.com> --- fs/ceph/cache.c | 3 +++ 1 file changed, 3 insertions(+)