struct inode *inode;
struct erofs_sb_info *sbi;
struct erofs_fs_context *ctx = fc->fs_private;
++ struct dax_device *dax_dev = fs_dax_get_by_bdev(sb->s_bdev);
int err;
sb->s_magic = EROFS_SUPER_MAGIC;
return -ENOMEM;
sb->s_fs_info = sbi;
- sbi->dax_dev = fs_dax_get_by_bdev(sb->s_bdev);
++ sbi->dax_dev = dax_dev;
err = erofs_read_superblock(sb);
if (err)
return err;
- !bdev_dax_supported(sb->s_bdev, EROFS_BLKSIZ)) {
+ if (test_opt(ctx, DAX_ALWAYS) &&
++ !dax_supported(dax_dev, sb->s_bdev, EROFS_BLKSIZ, 0,
++ bdev_nr_sectors(sb->s_bdev))) {
+ errorfc(fc, "DAX unsupported by block device. Turning off DAX.");
+ clear_opt(ctx, DAX_ALWAYS);
+ }
sb->s_flags |= SB_RDONLY | SB_NOATIME;
sb->s_maxbytes = MAX_LFS_FILESIZE;
sb->s_time_gran = 1;
xfs_perag_put(pag);
}
- return (mp->m_flags & XFS_MOUNT_32BITINODES) ? maxagi : agcount;
+ return xfs_is_inode32(mp) ? maxagi : agcount;
}
+ static bool
+ xfs_buftarg_is_dax(
+ struct super_block *sb,
+ struct xfs_buftarg *bt)
+ {
+ return dax_supported(bt->bt_daxdev, bt->bt_bdev, sb->s_blocksize, 0,
+ bdev_nr_sectors(bt->bt_bdev));
+ }
+
STATIC int
xfs_blkdev_get(
xfs_mount_t *mp,