Re: [PATCH v12 00/10] enable bs > ps in XFS

Pankaj Raghav (Samsung)
2024-08-18T16:51:40Z

Hi David,

On Fri, Aug 16, 2024 at 08:31:03PM +0100, David Howells wrote:
> Hi Pankaj,
>
> I applied the first five patches and set minimum folio size for afs files to
> 8K (see attached patch) and ran some tests.
>
> With simple tests, I can see in the trace log that it is definitely creating
> 8K folios where it would previously create 4K folios.
>
> However, with 'xfstests -g quick', generic/075 generic/112 generic/393 fail
> where they didn't previously. I won't be able to look into this more till
> Monday.

Thanks for trying it out!

As you might have seen the whole patchset, typically filesystems will
require some changes to support min order correctly. That is why
this patchset only enables XFS to use min order to support bs > ps.

In the case of XFS (block-based FS), we set the min order to the FS
block size as that is the smallest unit of operation in the data path,
and we know for sure there are no implicit PAGE_SIZE assumption.

I am no expert in network filesystems but are you sure there are no
PAGE_SIZE assumption when manipulating folios from the page cache in
AFS?

Similar to AFS, XFS also supported large_folios but we found some bugs
when we set min order to be the block size of the FS.
>
> If you want to try using afs for yourself, install the kafs-client package
> (available on Fedora and Debian), do 'systemctl start afs.mount' and then you
> can, say, do:
>
> ls /afs/openafs.org/www/docs.openafs.org/
>
> and browse the publicly accessible files under there.

Great. But is this enough to run FStests? I assume I also need some afs
server to run the fstests?

Are the tests just failing or are you getting some kernel panic?

>
> David
> ---
> commit d676df787baee3b710b9f0d284b21518473feb3c
> Author: David Howells <dhowells@redhat.com>
> Date: Fri Aug 16 19:54:25 2024 +0100
>
> afs: [DEBUGGING] Set min folio order
>
> diff --git a/fs/afs/inode.c b/fs/afs/inode.c
> index 3acf5e050072..c3842cba92e7 100644
> --- a/fs/afs/inode.c
> +++ b/fs/afs/inode.c
> @@ -104,6 +104,7 @@ static int afs_inode_init_from_status(struct afs_operation *op,
> inode->i_fop = &afs_file_operations;
> inode->i_mapping->a_ops = &afs_file_aops;
> mapping_set_large_folios(inode->i_mapping);
> + mapping_set_folio_min_order(inode->i_mapping, 1);
> break;
> case AFS_FTYPE_DIR:
> inode->i_mode = S_IFDIR | (status->mode & S_IALLUGO);
>