Index: /trunk/src/VBox/Main/ConsoleImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/ConsoleImpl.cpp	(revision 30323)
+++ /trunk/src/VBox/Main/ConsoleImpl.cpp	(revision 30324)
@@ -475,5 +475,6 @@
     , mVMPoweredOff(false)
     , mVMIsAlreadyPoweringOff(false)
-    , mfSnapshotFolderWarningShown(false)
+    , mfSnapshotFolderSizeWarningShown(false)
+    , mfSnapshotFolderExt4WarningShown(false)
     , mVMMDev(NULL)
     , mAudioSniffer(NULL)
Index: /trunk/src/VBox/Main/ConsoleImpl2.cpp
===================================================================
--- /trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 30323)
+++ /trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 30324)
@@ -2488,5 +2488,5 @@
                 if (   typeSnap == RTFS_FS_TYPE_FAT
                     && u64Size >= _4G
-                    && !mfSnapshotFolderWarningShown)
+                    && !mfSnapshotFolderSizeWarningShown)
                 {
                     const char *pszUnit;
@@ -2511,5 +2511,5 @@
                             strSnap.raw(), strFile.raw(), u64Print, pszUnit);
                     /* Show this particular warning only once */
-                    mfSnapshotFolderWarningShown = true;
+                    mfSnapshotFolderSizeWarningShown = true;
                 }
 
@@ -2518,15 +2518,16 @@
                  * Ext4 bug: Check if the host I/O cache is disabled and the disk image is located
                  *           on an ext4 partition. Later we have to check the Linux kernel version!
+                 * This bug apparently applies to the XFS file system as well.
                  */
                 if (   (uCaps & MediumFormatCapabilities_Asynchronous)
                     && !fUseHostIOCache
                     && (   typeFile == RTFS_FS_TYPE_EXT4
-                        || typeSnap == RTFS_FS_TYPE_EXT4))
+                        || typeFile == RTFS_FS_TYPE_XFS))
                 {
                     setVMRuntimeErrorCallbackF(pVM, this, 0,
                             "Ext4PartitionDetected",
                             N_("The host I/O cache for at least one controller is disabled "
-                               "but the medium '%ls' or the snapshot folder for this VM "
-                               "is located on an ext4 partition. There is a known Linux "
+                               "and the medium '%ls' for this VM "
+                               "is located on an %s partition. There is a known Linux "
                                "kernel bug which can lead to the corruption of the virtual "
                                "disk image under these conditions.\n"
@@ -2535,6 +2536,27 @@
                                "onto a different file system.\n"
                                "The host I/O cache will now be enabled for this medium"),
-                            strFile.raw());
+                            strFile.raw(), typeFile == RTFS_FS_TYPE_EXT4 ? "ext4" : "xfs");
                     fUseHostIOCache = true;
+                }
+                else if (   (uCaps & MediumFormatCapabilities_Asynchronous)
+                         && !fUseHostIOCache
+                         && (   typeSnap == RTFS_FS_TYPE_EXT4
+                             || typeSnap == RTFS_FS_TYPE_XFS)
+                         && !mfSnapshotFolderExt4WarningShown)
+                {
+                    setVMRuntimeErrorCallbackF(pVM, this, 0,
+                            "Ext4PartitionDetected",
+                            N_("The host I/O cache for at least one controller is disabled "
+                               "and the snapshot folder for this VM "
+                               "is located on an %s partition. There is a known Linux "
+                               "kernel bug which can lead to the corruption of the virtual "
+                               "disk image under these conditions.\n"
+                               "Either enable the host I/O cache permanently in the VM "
+                               "settings or put the disk image and the snapshot folder "
+                               "onto a different file system.\n"
+                               "The host I/O cache will now be enabled for this medium"),
+                            typeSnap == RTFS_FS_TYPE_EXT4 ? "ext4" : "xfs");
+                    fUseHostIOCache = true;
+                    mfSnapshotFolderExt4WarningShown = true;
                 }
 #endif
Index: /trunk/src/VBox/Main/include/ConsoleImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/ConsoleImpl.h	(revision 30323)
+++ /trunk/src/VBox/Main/include/ConsoleImpl.h	(revision 30324)
@@ -630,6 +630,8 @@
     /** true when vmstateChangeCallback shouldn't initiate a power down.  */
     bool mVMIsAlreadyPoweringOff : 1;
-    /** true if we already showed the snapshot folder warning. */
-    bool mfSnapshotFolderWarningShown : 1;
+    /** true if we already showed the snapshot folder size warning. */
+    bool mfSnapshotFolderSizeWarningShown : 1;
+    /** true if we already showed the snapshot folder ext4/xfs bug warning. */
+    bool mfSnapshotFolderExt4WarningShown : 1;
 
     /** The current network attachment type in the VM.
Index: /trunk/src/VBox/Runtime/r3/posix/fs-posix.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r3/posix/fs-posix.cpp	(revision 30323)
+++ /trunk/src/VBox/Runtime/r3/posix/fs-posix.cpp	(revision 30324)
@@ -212,4 +212,6 @@
                             else if (!strcmp("ext2", mntEnt.mnt_type))
                                 *pu32Type = RTFS_FS_TYPE_EXT2;
+                            else if (!strcmp("xfs", mntEnt.mnt_type))
+                                *pu32Type = RTFS_FS_TYPE_XFS;
                             else if (   !strcmp("vfat", mntEnt.mnt_type)
                                      || !strcmp("msdos", mntEnt.mnt_type))
