Index: /trunk/Config.kmk
===================================================================
--- /trunk/Config.kmk	(revision 43714)
+++ /trunk/Config.kmk	(revision 43715)
@@ -458,4 +458,8 @@
 # Enable performance API.
 VBOX_WITH_RESOURCE_USAGE_API = 1
+# Use VBoxVolInfo for getting FS dependecies.
+if1of ($(KBUILD_TARGET), linux)
+ VBOX_WITH_DEVMAPPER = 1
+endif
 # Enable BusLogic SCSI host adapter
 VBOX_WITH_BUSLOGIC = 1
Index: /trunk/configure
===================================================================
--- /trunk/configure	(revision 43714)
+++ /trunk/configure	(revision 43715)
@@ -87,4 +87,5 @@
 WITH_PULSE=1
 WITH_DBUS=1
+WITH_DEVMAPPER=1
 WITH_KMODS=1
 WITH_OPENGL=1
@@ -128,4 +129,6 @@
 INCVNCSERVER=""
 LIBVNCSERVER="-lvncserver"
+INCDEVMAPPER=""
+LIBDEVMAPPER="-ldevmapper"
 CXX_FLAGS=""
 if [ "$OS" = "freebsd" ]; then
@@ -748,4 +751,56 @@
 
 #
+# Check for libdevmapper, needed by the VBoxVolInfo
+#
+check_libdevmapper()
+{
+  test_header libdevmapper
+  cat > $ODIR.tmp_src.cc << EOF
+#include <cstdio>
+extern "C" {
+#define private
+#include <libdevmapper.h>
+int main()
+{
+  char version[80];
+
+  if (!dm_get_library_version(version, sizeof(version)))
+  {
+    printf("dm_get_library_version() failed.\n");
+    return 1;
+  }
+
+  const char* v=version;
+  unsigned int major = 0, minor = 0, micro = 0;
+
+  for (; *v !='.' && *v != '\0'; v++) major = major*10 + *v-'0';
+  if (*v == '.') v++;
+  for (; *v !='.' && *v != '\0'; v++) minor = minor*10 + *v-'0';
+  if (*v == '.') v++;
+  for (; *v !='.' && *v != '\0'; v++) micro = micro*10 + *v-'0';
+
+  printf("found version %s", version);
+  if (major*10000 + minor*100 + micro >= 10200)
+  {
+    printf(", OK.\n");
+    return 0;
+  }
+  else
+  {
+    printf(", expected version 1.02 or higher\n");
+    return 1;
+  }
+}
+}
+EOF
+  if test_compile "$LIBDEVMAPPER $INCDEVMAPPER" libdevmapper libdevmapper; then
+    if test_execute; then
+      cnf_append "VBOX_WITH_DEVMAPPER" "1"
+    fi
+  fi
+}
+
+
+#
 # Check for openssl, needed for RDP and S3
 #
@@ -2130,4 +2185,5 @@
 cat << EOF
   --disable-udptunnel      disable UDP tunnel networking
+  --disable-devmapper      disable device mapper library access
   --disable-hardening      don't be strict about /dev/vboxdrv access
   --build-libxml2          build libxml2 from sources
@@ -2334,4 +2390,7 @@
       WITH_VDE=1
       ;;
+    --disable-devmapper)
+      WITH_DEVMAPPER=0
+      ;;
     --build-debug|-d)
       BUILD_TYPE=debug
@@ -2569,4 +2628,9 @@
   if [ $WITH_DBUS -eq 0 ]; then
     cnf_append "VBOX_WITH_DBUS" ""
+  fi
+  if [ $WITH_DEVMAPPER -eq 1 ]; then
+    check_libdevmapper
+  else
+    cnf_append "VBOX_WITH_DEVMAPPER" ""
   fi
   check_libcap
Index: /trunk/debian/postinst.in
===================================================================
--- /trunk/debian/postinst.in	(revision 43714)
+++ /trunk/debian/postinst.in	(revision 43715)
@@ -69,4 +69,7 @@
   if ! dpkg-statoverride --list /usr/lib/virtualbox/VBoxNetAdpCtl > /dev/null 2>&1; then
     chmod 4511 /usr/lib/virtualbox/VBoxNetAdpCtl
+  fi
+  if ! dpkg-statoverride --list /usr/lib/virtualbox/VBoxVolInfo > /dev/null 2>&1; then
+    chmod 4511 /usr/lib/virtualbox/VBoxVolInfo
   fi
 
Index: /trunk/debian/rules
===================================================================
--- /trunk/debian/rules	(revision 43714)
+++ /trunk/debian/rules	(revision 43715)
@@ -222,4 +222,5 @@
 	mv $(archdir)/VBoxNetDHCP $(prefix)/usr/lib/$(package)
 	mv $(archdir)/VBoxNetAdpCtl $(prefix)/usr/lib/$(package)
+	mv $(archdir)/VBoxVolInfo $(prefix)/usr/lib/$(package)
 	mv $(archdir)/VBoxXPCOMIPCD $(prefix)/usr/lib/$(package)
 	mv $(archdir)/components $(prefix)/usr/lib/$(package)/components
Index: /trunk/src/VBox/Installer/linux/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Installer/linux/Makefile.kmk	(revision 43714)
+++ /trunk/src/VBox/Installer/linux/Makefile.kmk	(revision 43715)
@@ -150,4 +150,5 @@
 		VBoxNetDHCP $(if $(VBOX_WITH_HARDENING),VBoxNetDHCP.so,) \
 		VBoxNetAdpCtl \
+		VBoxVolInfo \
 		VBoxSVC \
 		VBoxXPCOM.so \
Index: /trunk/src/VBox/Installer/linux/debian/postinst.in
===================================================================
--- /trunk/src/VBox/Installer/linux/debian/postinst.in	(revision 43714)
+++ /trunk/src/VBox/Installer/linux/debian/postinst.in	(revision 43715)
@@ -69,4 +69,7 @@
   if ! dpkg-statoverride --list /usr/lib/virtualbox/VBoxNetAdpCtl > /dev/null 2>&1; then
     chmod 4511 /usr/lib/virtualbox/VBoxNetAdpCtl
+  fi
+  if ! dpkg-statoverride --list /usr/lib/virtualbox/VBoxVolInfo > /dev/null 2>&1; then
+    chmod 4511 /usr/lib/virtualbox/VBoxVolInfo
   fi
 
Index: /trunk/src/VBox/Installer/linux/debian/rules
===================================================================
--- /trunk/src/VBox/Installer/linux/debian/rules	(revision 43714)
+++ /trunk/src/VBox/Installer/linux/debian/rules	(revision 43715)
@@ -246,4 +246,5 @@
 	mv $(archdir)/VBoxNetDHCP $(prefix)/usr/lib/$(package)
 	mv $(archdir)/VBoxNetAdpCtl $(prefix)/usr/lib/$(package)
+	mv $(archdir)/VBoxVolInfo $(prefix)/usr/lib/$(package)
 	mv $(archdir)/VBoxXPCOMIPCD $(prefix)/usr/lib/$(package)
 	mv $(archdir)/components $(prefix)/usr/lib/$(package)/components
Index: /trunk/src/VBox/Installer/linux/install.sh
===================================================================
--- /trunk/src/VBox/Installer/linux/install.sh	(revision 43714)
+++ /trunk/src/VBox/Installer/linux/install.sh	(revision 43715)
@@ -370,6 +370,7 @@
     fi
 
-    # This binary needs to be suid root in any case, even if not hardened
+    # This binaries need to be suid root in any case, even if not hardened
     test -e $INSTALLATION_DIR/VBoxNetAdpCtl && chmod 4511 $INSTALLATION_DIR/VBoxNetAdpCtl
+    test -e $INSTALLATION_DIR/VBoxVolInfo && chmod 4511 $INSTALLATION_DIR/VBoxVolInfo
 
     # Install runlevel scripts
Index: /trunk/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec
===================================================================
--- /trunk/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec	(revision 43714)
+++ /trunk/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec	(revision 43715)
@@ -81,4 +81,5 @@
 mv VBoxNetDHCP $RPM_BUILD_ROOT/usr/lib/virtualbox
 mv VBoxNetAdpCtl $RPM_BUILD_ROOT/usr/lib/virtualbox
+mv VBoxVolInfo $RPM_BUILD_ROOT/usr/lib/virtualbox
 mv VBoxXPCOMIPCD $RPM_BUILD_ROOT/usr/lib/virtualbox
 mv components $RPM_BUILD_ROOT/usr/lib/virtualbox/components
@@ -117,5 +118,5 @@
     mv $i $RPM_BUILD_ROOT/usr/lib/virtualbox; done
 fi
-for i in VBoxSDL VirtualBox VBoxHeadless VBoxNetDHCP VBoxNetAdpCtl; do
+for i in VBoxSDL VirtualBox VBoxHeadless VBoxNetDHCP VBoxNetAdpCtl VBoxVolInfo; do
   chmod 4511 $RPM_BUILD_ROOT/usr/lib/virtualbox/$i; done
 if [ -d ExtensionPacks/VNC ]; then
Index: /trunk/src/VBox/Main/src-server/linux/PerformanceLinux.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/linux/PerformanceLinux.cpp	(revision 43714)
+++ /trunk/src/VBox/Main/src-server/linux/PerformanceLinux.cpp	(revision 43715)
@@ -28,4 +28,5 @@
 #include <iprt/err.h>
 #include <iprt/param.h>
+#include <iprt/path.h>
 #include <iprt/string.h>
 #include <iprt/mp.h>
@@ -36,4 +37,6 @@
 #include "Logging.h"
 #include "Performance.h"
+
+#define VBOXVOLINFO_NAME "VBoxVolInfo"
 
 namespace pm {
@@ -365,4 +368,29 @@
 }
 
+static void addVolumeDependencies(const char *pcszVolume, DiskList& listDisks)
+{
+    char szVolInfo[RTPATH_MAX];
+    int rc = RTPathExecDir(szVolInfo, sizeof(szVolInfo) - sizeof("/" VBOXVOLINFO_NAME " ") - strlen(pcszVolume));
+    if (RT_FAILURE(rc))
+    {
+        LogRel(("VolInfo: Failed to get program path, rc=%Rrc\n", rc));
+        return VERR_INVALID_PARAMETER;
+    }
+    strcat(szVolInfo, "/" VBOXVOLINFO_NAME " ");
+    strcat(szVolInfo, pcszVolume);
+
+    FILE *fp = popen(szVolInfo, "r");
+    if (fp)
+    {
+        char szBuf[128];
+
+        while (fgets(szBuf, sizeof(szBuf), fp))
+            listDisks.push_back(RTCString(szBuf));
+
+        pclose(fp);
+    }
+    else
+        listDisks.push_back(RTCString(pcszVolume));
+}
 
 int getDiskListByFs(const char *pszPath, DiskList& listDisks)
@@ -376,6 +404,10 @@
             if (strcmp(pszPath, mntent->mnt_dir) == 0)
             {
-                char szDevName[32];
-                listDisks.push_back(RTCString(getDiskName(szDevName, sizeof(szDevName), mntent->mnt_fsname)));
+                char szDevName[128];
+                getDiskName(szDevName, sizeof(szDevName), mntent->mnt_fsname);
+                if (strncmp(mntent->mnt_fsname, "/dev/mapper", 11))
+                    listDisks.push_back(RTCString(szDevName));
+                else
+                    addVolumeDependencies(szDevName, listDisks);
                 break;
             }
Index: /trunk/src/apps/Makefile.kmk
===================================================================
--- /trunk/src/apps/Makefile.kmk	(revision 43714)
+++ /trunk/src/apps/Makefile.kmk	(revision 43715)
@@ -34,4 +34,9 @@
  endif
 endif
+ifdef VBOX_WITH_DEVMAPPER
+ ifneq ($(wildcard $(PATH_SUB_CURRENT)/volinfo),)
+  include $(PATH_SUB_CURRENT)/volinfo/Makefile.kmk
+ endif
+endif
 
 include $(FILE_KBUILD_SUB_FOOTER)
