Call fscrypt_destroy_volume_keys() under mCryptLock

Everything in FsCrypt.cpp seems to run under VolumeManager::mCryptLock,
except for fscrypt_destroy_volume_keys() which uses mLock instead.

This was sort of okay because fscrypt_destroy_volume_keys() didn't
operate on any in-memory data structures.  However, that is going to be
changed.  Therefore, rework VoldNativeService::forgetPartition() to call
fscrypt_destroy_volume_keys() under mCryptLock.

Test: see I7f11a135d8550618cd96013f834cebd54be5ef84
Change-Id: Ia27a61faf2fdd546cdbddb2a3985c7c6696f6aa6
Merged-In: Ia27a61faf2fdd546cdbddb2a3985c7c6696f6aa6
(cherry picked from commit ce86e24d233a26b68ae3655ebc3f5730322d78a4)
diff --git a/VoldNativeService.cpp b/VoldNativeService.cpp
index bcca50a..d51652b 100644
--- a/VoldNativeService.cpp
+++ b/VoldNativeService.cpp
@@ -256,9 +256,19 @@
     ENFORCE_SYSTEM_OR_ROOT;
     CHECK_ARGUMENT_HEX(partGuid);
     CHECK_ARGUMENT_HEX(fsUuid);
-    ACQUIRE_LOCK;
+    bool success = true;
 
-    return translate(VolumeManager::Instance()->forgetPartition(partGuid, fsUuid));
+    {
+        ACQUIRE_LOCK;
+        success &= VolumeManager::Instance()->forgetPartition(partGuid, fsUuid);
+    }
+
+    {
+        ACQUIRE_CRYPT_LOCK;
+        success &= fscrypt_destroy_volume_keys(fsUuid);
+    }
+
+    return translateBool(success);
 }
 
 binder::Status VoldNativeService::mount(