MountService: Fix some mountset bugs and tighten up some return values

Signed-off-by: San Mehat <san@google.com>
diff --git a/api/current.xml b/api/current.xml
index bc5a4be..ab5a114 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -118127,7 +118127,18 @@
  visibility="public"
 >
 </field>
-<field name="OperationFailedVolumeNotMounted"
+<field name="OperationFailedStorageMounted"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="-6"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="OperationFailedStorageNotMounted"
  type="int"
  transient="false"
  volatile="false"
diff --git a/core/java/android/os/storage/StorageResultCode.java b/core/java/android/os/storage/StorageResultCode.java
index 584f160..249bacf 100644
--- a/core/java/android/os/storage/StorageResultCode.java
+++ b/core/java/android/os/storage/StorageResultCode.java
@@ -53,8 +53,15 @@
     public static final int OperationFailedMediaCorrupt      = -4;
 
     /**
-     * Operation failed: Media not mounted.
+     * Operation failed: Storage not mounted.
      * @see android.os.storage.StorageManager
      */
-    public static final int OperationFailedVolumeNotMounted  = -5;
+    public static final int OperationFailedStorageNotMounted  = -5;
+
+    /**
+     * Operation failed: Storage is mounted.
+     * @see android.os.storage.StorageManager
+     */
+    public static final int OperationFailedStorageMounted     = -6;
+
 }
diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java
index 456244a..e764bbb 100644
--- a/services/java/com/android/server/MountService.java
+++ b/services/java/com/android/server/MountService.java
@@ -543,7 +543,7 @@
             // call back will handle the status changes any way.
             int code = e.getCode();
             if (code == VoldResponseCode.OpFailedVolNotMounted) {
-                return StorageResultCode.OperationFailedVolumeNotMounted;
+                return StorageResultCode.OperationFailedStorageNotMounted;
             } else {
                 return StorageResultCode.OperationFailedInternalError;
             }
@@ -826,6 +826,12 @@
         } catch (NativeDaemonConnectorException e) {
             rc = StorageResultCode.OperationFailedInternalError;
         }
+
+        if (rc == StorageResultCode.OperationSucceeded) {
+            synchronized (mAsecMountSet) {
+                mAsecMountSet.add(id);
+            }
+        }
         return rc;
     }
 
@@ -836,6 +842,10 @@
         int rc = StorageResultCode.OperationSucceeded;
         try {
             mConnector.doCommand(String.format("asec finalize %s", id));
+            /*
+             * Finalization does a remount, so no need
+             * to update mAsecMountSet
+             */
         } catch (NativeDaemonConnectorException e) {
             rc = StorageResultCode.OperationFailedInternalError;
         }
@@ -853,6 +863,15 @@
         } catch (NativeDaemonConnectorException e) {
             rc = StorageResultCode.OperationFailedInternalError;
         }
+
+        if (rc == StorageResultCode.OperationSucceeded) {
+            synchronized (mAsecMountSet) {
+                if (mAsecMountSet.contains(id)) {
+                    mAsecMountSet.remove(id);
+                }
+            }
+        }
+
         return rc;
     }
    
@@ -861,6 +880,12 @@
         waitForReady();
         warnOnNotMounted();
 
+        synchronized (mAsecMountSet) {
+            if (mAsecMountSet.contains(id)) {
+                return StorageResultCode.OperationFailedStorageMounted;
+            }
+        }
+
         int rc = StorageResultCode.OperationSucceeded;
         String cmd = String.format("asec mount %s %s %d", id, key, ownerUid);
         try {
@@ -884,7 +909,7 @@
 
         synchronized (mAsecMountSet) {
             if (!mAsecMountSet.contains(id)) {
-                return StorageResultCode.OperationFailedVolumeNotMounted;
+                return StorageResultCode.OperationFailedStorageNotMounted;
             }
          }
 
@@ -919,6 +944,12 @@
         waitForReady();
         warnOnNotMounted();
 
+        synchronized (mAsecMountSet) {
+            if (mAsecMountSet.contains(oldId)) {
+                return StorageResultCode.OperationFailedStorageMounted;
+            }
+        }
+
         int rc = StorageResultCode.OperationSucceeded;
         String cmd = String.format("asec rename %s %s", oldId, newId);
         try {
@@ -926,6 +957,7 @@
         } catch (NativeDaemonConnectorException e) {
             rc = StorageResultCode.OperationFailedInternalError;
         }
+
         return rc;
     }