@@ -340,6 +340,32 @@ xfs_buftarg_is_dax(
340
340
bdev_nr_sectors (bt -> bt_bdev ));
341
341
}
342
342
343
+ static int
344
+ xfs_setup_dax_always (
345
+ struct xfs_mount * mp )
346
+ {
347
+ struct super_block * sb = mp -> m_super ;
348
+
349
+ if (!xfs_buftarg_is_dax (sb , mp -> m_ddev_targp ) &&
350
+ (!mp -> m_rtdev_targp || !xfs_buftarg_is_dax (sb , mp -> m_rtdev_targp ))) {
351
+ xfs_alert (mp ,
352
+ "DAX unsupported by block device. Turning off DAX." );
353
+ goto disable_dax ;
354
+ }
355
+
356
+ if (xfs_has_reflink (mp )) {
357
+ xfs_alert (mp , "DAX and reflink cannot be used together!" );
358
+ return - EINVAL ;
359
+ }
360
+
361
+ xfs_warn (mp , "DAX enabled. Warning: EXPERIMENTAL, use at your own risk" );
362
+ return 0 ;
363
+
364
+ disable_dax :
365
+ xfs_mount_set_dax_mode (mp , XFS_DAX_NEVER );
366
+ return 0 ;
367
+ }
368
+
343
369
STATIC int
344
370
xfs_blkdev_get (
345
371
xfs_mount_t * mp ,
@@ -1593,26 +1619,9 @@ xfs_fs_fill_super(
1593
1619
sb -> s_flags |= SB_I_VERSION ;
1594
1620
1595
1621
if (xfs_has_dax_always (mp )) {
1596
- bool rtdev_is_dax = false, datadev_is_dax ;
1597
-
1598
- xfs_warn (mp ,
1599
- "DAX enabled. Warning: EXPERIMENTAL, use at your own risk" );
1600
-
1601
- datadev_is_dax = xfs_buftarg_is_dax (sb , mp -> m_ddev_targp );
1602
- if (mp -> m_rtdev_targp )
1603
- rtdev_is_dax = xfs_buftarg_is_dax (sb ,
1604
- mp -> m_rtdev_targp );
1605
- if (!rtdev_is_dax && !datadev_is_dax ) {
1606
- xfs_alert (mp ,
1607
- "DAX unsupported by block device. Turning off DAX." );
1608
- xfs_mount_set_dax_mode (mp , XFS_DAX_NEVER );
1609
- }
1610
- if (xfs_has_reflink (mp )) {
1611
- xfs_alert (mp ,
1612
- "DAX and reflink cannot be used together!" );
1613
- error = - EINVAL ;
1622
+ error = xfs_setup_dax_always (mp );
1623
+ if (error )
1614
1624
goto out_filestream_unmount ;
1615
- }
1616
1625
}
1617
1626
1618
1627
if (xfs_has_discard (mp )) {
0 commit comments