RE: A blocksize problem about dax and ext4

Elliott, Robert (Persistent Memory)
2015-12-23T21:19:08Z

> -----Original Message-----
> From: Linux-nvdimm [mailto:linux-nvdimm-bounces@lists.01.org] On Behalf Of
> Dan Williams
> Sent: Wednesday, December 23, 2015 11:16 AM
> To: Cholerae Hu <choleraehyq@gmail.com>
> Cc: linux-nvdimm@lists.01.org
> Subject: Re: A blocksize problem about dax and ext4
>
> On Wed, Dec 23, 2015 at 4:03 AM, Cholerae Hu <choleraehyq@gmail.com>
> wrote:
...
> > [root@localhost cholerae]# mount -o dax /dev/pmem0 /mnt/mem
> > mount: wrong fs type, bad option, bad superblock on /dev/pmem0,
> > missing codepage or helper program, or other error
> >
> > In some cases useful info is found in syslog - try
> > dmesg | tail or so.
> > [root@localhost cholerae]# dmesg | tail
...
> > [ 81.779582] EXT4-fs (pmem0): error: unsupported blocksize for dax
...

> What's the fs block size? For example:
> # dumpe2fs -h /dev/pmem0 | grep "Block size"
> dumpe2fs 1.42.9 (28-Dec-2013)
> Block size: 4096
> Depending on the size of /dev/pmem0 it may have automatically set it
> to a block size less than 4 KiB which is incompatible with "-o dax".

I noticed a few things while trying that out on both ext4 and xfs.

$ sudo mkfs.ext4 -F -b 1024 /dev/pmem0
$ sudo mount -o dax /dev/pmem0 /mnt/ext4-pmem0
$ sudo mkfs.xfs -f -b size=1024 /dev/pmem0
$ sudo mount -o dax /dev/pmem0 /mnt/xfs-pmem0

[ 199.679195] EXT4-fs (pmem0): DAX enabled. Warning: EXPERIMENTAL, use at your own risk
[ 199.724931] EXT4-fs (pmem0): error: unsupported block size 1024 for dax
[ 859.077766] XFS (pmem0): DAX enabled. Warning: EXPERIMENTAL, use at your own risk
[ 859.118106] XFS (pmem0): Filesystem block size invalid for DAX Turning DAX off.
[ 859.156950] XFS (pmem0): Mounting V4 Filesystem
[ 859.183626] XFS (pmem0): Ending clean mount

1. ext4 fails to mount the filesystem, while xfs just disables DAX.
It seems like they should they be the same.

2. if CONFIG_FS_DAX is not supported, ext4 fails to mount, but prints
the message at the KERN_INFO level. All the rest of its mount errors
use KERN_ERR.

Completely unknown mount options are reported like this at the
KERN_ERR level:
[ 2188.194775] EXT4-fs (pmem0): Unrecognized mount option "xyzzy" or missing value

In contrast, if CONFIG_FS_DAX is not supported, then xfs lumps it in
with the rest of the unknown mount options, which are reported with
xfs_warn():
[ 2347.654182] XFS (pmem0): unknown mount option [xyzzy].

3. It might be worth printing the problematic filesystem block size
(here and in a few other similar messages).

I like how xfs' wording of "Filesystem block size" helps distinguish
the value from the block device's logical block size.

Code excerpts
=============
fs/xfs/xfs_super.c:
#ifdef CONFIG_FS_DAX
} else if (!strcmp(this_char, MNTOPT_DAX)) {
mp->m_flags |= XFS_MOUNT_DAX;
#endif
...
if (mp->m_flags & XFS_MOUNT_DAX) {
xfs_warn(mp,
"DAX enabled. Warning: EXPERIMENTAL, use at your own risk");
if (sb->s_blocksize != PAGE_SIZE) {
xfs_alert(mp,
"Filesystem block size invalid for DAX Turning DAX off.");
mp->m_flags &= ~XFS_MOUNT_DAX;
} else if (!sb->s_bdev->bd_disk->fops->direct_access) {
xfs_alert(mp,
"Block device does not support DAX Turning DAX off.");
mp->m_flags &= ~XFS_MOUNT_DAX;
}
}

fs/ext4/super.c:
} else if (token == Opt_dax) {
#ifdef CONFIG_FS_DAX
ext4_msg(sb, KERN_WARNING,
"DAX enabled. Warning: EXPERIMENTAL, use at your own risk");
sbi->s_mount_opt |= m->mount_opt;
#else
ext4_msg(sb, KERN_INFO, "dax option not supported");
return -1;
#endif

---
Robert Elliott, HPE Persistent Memory