[Cluster-devel] [PATCH v11 16/25] fs: Convert mpage_readpages to mpage_readahead

Andreas Gruenbacher agruenba at redhat.com
Wed Jun 17 08:36:13 AEST 2020


Am Mi., 15. Apr. 2020 um 23:39 Uhr schrieb Matthew Wilcox <willy at infradead.org>:
> From: "Matthew Wilcox (Oracle)" <willy at infradead.org>
>
> Implement the new readahead aop and convert all callers (block_dev,
> exfat, ext2, fat, gfs2, hpfs, isofs, jfs, nilfs2, ocfs2, omfs, qnx6,
> reiserfs & udf).  The callers are all trivial except for GFS2 & OCFS2.

This patch leads to an ABBA deadlock in xfstest generic/095 on gfs2.

Our lock hierarchy is such that the inode cluster lock ("inode glock")
for an inode needs to be taken before any page locks in that inode's
address space. However, the readahead address space operation is
called with the pages already locked. When we try to grab the inode
glock inside gfs2_readahead, we'll deadlock with processes that are
holding that inode glock and trying to lock one of those same pages.

One possible solution is to use a trylock on the glock in
gfs2_readahead, and to give up the readahead in case of a locking
conflict. I have no idea how this is going to affect performance.

Any other ideas?

Thanks,
Andreas



More information about the Linux-erofs mailing list