Re: [PATCH v6 01/27] mm: Introduce struct folio

Matthew Wilcox
2021-04-06T14:41:48Z

On Tue, Apr 06, 2021 at 03:31:50PM +0100, Christoph Hellwig wrote:
> > > As Christoph, I'm not a fan of this :/
> >
> > What would you prefer?
>
> Looking at your full folio series on git.infradead.org, there are a
> total of 12 references to non-page members of struct folio, assuming
> my crude grep that expects a folio to be named folio did not miss any.

Hmm ... I count more in the filesystems:

fs/afs/dir.c: struct afs_vnode *dvnode = AFS_FS_I(folio->page.mapping->host);
fs/afs/dir.c: _enter("{%lu},%zu,%zu", folio->page.index, offset, length);
fs/afs/file.c: _enter("{%lu},%zu,%zu", folio->page.index, offset, length);
fs/afs/write.c: folio->page.index);
fs/befs/linuxvfs.c: struct inode *inode = folio->page.mapping->host;
fs/btrfs/disk-io.c: tree = &BTRFS_I(folio->page.mapping->host)->io_tree;
fs/btrfs/disk-io.c: btrfs_warn(BTRFS_I(folio->page.mapping->host)->root->fs_info,
fs/btrfs/extent_io.c: struct btrfs_inode *inode = BTRFS_I(folios[0]->page.mapping->host);
fs/btrfs/file.c: if (folio->page.mapping != inode->i_mapping) {
fs/btrfs/free-space-cache.c: if (folio->page.mapping != inode->i_mapping) {
fs/btrfs/inode.c: if (folio->page.mapping != mapping) {
fs/btrfs/inode.c: struct btrfs_inode *inode = BTRFS_I(folio->page.mapping->host);
fs/buffer.c: spin_lock(&folio->page.mapping->private_lock);
fs/buffer.c: spin_unlock(&folio->page.mapping->private_lock);
fs/buffer.c: block_in_file = (sector_t)folio->page.index <<
fs/ceph/addr.c: mapping->host, folio, folio->page.index);
fs/ceph/addr.c: mapping->host, folio, folio->page.index,
fs/ceph/addr.c: folio->page.private = (unsigned long)snapc;
fs/ceph/addr.c: inode = folio->page.mapping->host;
fs/ceph/addr.c: inode, folio, folio->page.index, offset, length);
fs/ceph/addr.c: inode, folio, folio->page.index);
fs/cifs/file.c: struct cifsInodeInfo *cifsi = CIFS_I(folio->page.mapping->host);
fs/ext4/inode.c: struct inode *inode = folio->page.mapping->host;
fs/f2fs/data.c: struct inode *inode = folio->page.mapping->host;
fs/fuse/dir.c: int err = fuse_readlink_page(folio->page.mapping->host, &folio->page);
fs/gfs2/aops.c: struct gfs2_sbd *sdp = GFS2_SB(folio->page.mapping->host);
fs/iomap/buffered-io.c: unsigned int nr_blocks = i_blocks_per_folio(folio->page.mapping->host,
fs/iomap/buffered-io.c: struct inode *inode = folio->page.mapping->host;
fs/iomap/buffered-io.c: BUG_ON(folio->page.index);
fs/iomap/buffered-io.c: gfp_t gfp = mapping_gfp_constraint(folio->page.mapping,
fs/iomap/buffered-io.c: struct inode *inode = folio->page.mapping->host;
fs/iomap/buffered-io.c: struct inode *inode = folio->page.mapping->host;
fs/iomap/buffered-io.c: trace_iomap_releasepage(folio->page.mapping->host, folio_offset(folio),
fs/iomap/buffered-io.c: trace_iomap_invalidatepage(folio->page.mapping->host, offset, len);
fs/jffs2/file.c: struct inode *inode = folio->page.mapping->host;
fs/mpage.c: struct inode *inode = folio->page.mapping->host;
fs/mpage.c: gfp = readahead_gfp_mask(folio->page.mapping);
fs/mpage.c: gfp = mapping_gfp_constraint(folio->page.mapping, GFP_KERNEL);
fs/mpage.c: block_in_file = (sector_t)folio->page.index << (PAGE_SHIFT - blkbits);
fs/mpage.c: prefetchw(&folio->page.flags);
fs/nfs/file.c: nfs_fscache_invalidate_page(&folio->page, folio->page.mapping->host);
fs/nfs/fscache.c: nfs_i_fscache(inode), folio, folio->page.index,
fs/nfs/fscache.c: folio->page.flags, inode);
fs/reiserfs/inode.c: struct inode *inode = folio->page.mapping->host;
fs/remap_range.c: if (folio1->page.index > folio2->page.index)
fs/ubifs/file.c: struct inode *inode = folio->page.mapping->host;
fs/xfs/xfs_aops.c: struct inode *inode = folio->page.mapping->host;

(I didn't go through my whole series and do the conversion from
folio->page.x to folio->x yet)