print information about opened files when failed unmount

Change-Id: I88ae719cdae490433390d624f75612a9f4f96677

Cryptfs : Enabling support for allow_discards in dmcrypt.
Cryptfs : Password matches
Cryptfs : test_mount_encrypted_fs(): Master key saved
TrustyKeymaster: Creating device
TrustyKeymaster: Device address: 0x7f8f416100
Cryptfs : keymaster version is 3
Cryptfs : Just asked init to shut down class main
ServiceManager: service 'drm.drmManager' died
ServiceManager: service 'media.audio_flinger' died
ServiceManager: service 'media.player' died
ServiceManager: service 'media.camera' died
ServiceManager: service 'android.security.keystore' died
Cryptfs : unmounting /data failed

Bug: 17576594
diff --git a/Process.cpp b/Process.cpp
index ea5fbc7..08be28e 100644
--- a/Process.cpp
+++ b/Process.cpp
@@ -170,6 +170,10 @@
     return result;
 }
 
+extern "C" void vold_killProcessesWithOpenFiles(const char *path, int action) {
+	Process::killProcessesWithOpenFiles(path, action);
+}
+
 /*
  * Hunt down processes that have files open at the given mount point.
  * action = 0 to just warn,
diff --git a/Process.h b/Process.h
index fc0c0b7..e745ca4 100644
--- a/Process.h
+++ b/Process.h
@@ -17,6 +17,8 @@
 #ifndef _PROCESS_H
 #define _PROCESS_H
 
+#ifdef __cplusplus
+
 class Process {
 public:
     static void killProcessesWithOpenFiles(const char *path, int action);
@@ -32,4 +34,11 @@
     static int pathMatchesMountPoint(const char *path, const char *mountPoint);
 };
 
+extern "C" {
+#endif /* __cplusplus */
+	void vold_killProcessesWithOpenFiles(const char *path, int action);
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/cryptfs.c b/cryptfs.c
index 020fc7e..cc1a52a 100644
--- a/cryptfs.c
+++ b/cryptfs.c
@@ -53,6 +53,7 @@
 #include "ext4_utils.h"
 #include "f2fs_sparseblock.h"
 #include "CheckBattery.h"
+#include "Process.h"
 
 #include <hardware/keymaster.h>
 
@@ -1450,6 +1451,7 @@
       SLOGD("unmounting %s succeeded\n", mountpoint);
       rc = 0;
     } else {
+      vold_killProcessesWithOpenFiles(mountpoint, 0);
       SLOGE("unmounting %s failed\n", mountpoint);
       rc = -1;
     }