When testing fstests with ext4 over nfs 4.2, I found generic/486 failed. The root cause is that the length of its xattr value is min(st_blksize * 3 / 4, XATTR_SIZE_MAX) which is 4096 * 3 / 4 = 3072 for underlayfs ext4 rather than XATTR_SIZE_MAX = 65536 for nfs since the block size would be wsize (=131072) if bsize is not specified. Let's use pnfs_blksize first instead of using wsize directly if bsize isn't specified. And the testcase itself can pass now. Cc: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx> Cc: Anna Schumaker <anna.schumaker@xxxxxxxxxx> Cc: Joseph Qi <joseph.qi@xxxxxxxxxxxxxxxxx> Signed-off-by: Gao Xiang <hsiangkao@xxxxxxxxxxxxxxxxx> --- Considering bsize is not specified, we might use pnfs_blksize directly first rather than wsize. fs/nfs/super.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/fs/nfs/super.c b/fs/nfs/super.c index fe58525cfed4..5015edf0cd9a 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c @@ -1068,9 +1068,13 @@ static void nfs_fill_super(struct super_block *sb, struct nfs_fs_context *ctx) snprintf(sb->s_id, sizeof(sb->s_id), "%u:%u", MAJOR(sb->s_dev), MINOR(sb->s_dev)); - if (sb->s_blocksize == 0) - sb->s_blocksize = nfs_block_bits(server->wsize, + if (sb->s_blocksize == 0) { + unsigned int blksize = server->pnfs_blksize ? + server->pnfs_blksize : server->wsize; + + sb->s_blocksize = nfs_block_bits(blksize, &sb->s_blocksize_bits); + } nfs_super_set_maxbytes(sb, server->maxfilesize); server->has_sec_mnt_opts = ctx->has_sec_mnt_opts; -- 1.8.3.1