diff options
-rw-r--r-- | cmds/sm/src/com/android/commands/sm/Sm.java | 20 | ||||
-rw-r--r-- | core/java/android/os/storage/StorageManager.java | 14 | ||||
-rw-r--r-- | services/core/java/com/android/server/StorageManagerService.java | 42 |
3 files changed, 49 insertions, 27 deletions
diff --git a/cmds/sm/src/com/android/commands/sm/Sm.java b/cmds/sm/src/com/android/commands/sm/Sm.java index 2bb7edcc7467..09343f174587 100644 --- a/cmds/sm/src/com/android/commands/sm/Sm.java +++ b/cmds/sm/src/com/android/commands/sm/Sm.java @@ -147,9 +147,21 @@ public final class Sm { } public void runSetForceAdoptable() throws RemoteException { - final boolean forceAdoptable = Boolean.parseBoolean(nextArg()); - mSm.setDebugFlags(forceAdoptable ? StorageManager.DEBUG_FORCE_ADOPTABLE : 0, - StorageManager.DEBUG_FORCE_ADOPTABLE); + final int mask = StorageManager.DEBUG_ADOPTABLE_FORCE_ON + | StorageManager.DEBUG_ADOPTABLE_FORCE_OFF; + switch (nextArg()) { + case "on": + case "true": + mSm.setDebugFlags(StorageManager.DEBUG_ADOPTABLE_FORCE_ON, mask); + break; + case "off": + mSm.setDebugFlags(StorageManager.DEBUG_ADOPTABLE_FORCE_OFF, mask); + break; + case "default": + case "false": + mSm.setDebugFlags(0, mask); + break; + } } public void runSetSdcardfs() throws RemoteException { @@ -289,7 +301,7 @@ public final class Sm { System.err.println(" sm list-volumes [public|private|emulated|all]"); System.err.println(" sm has-adoptable"); System.err.println(" sm get-primary-storage-uuid"); - System.err.println(" sm set-force-adoptable [true|false]"); + System.err.println(" sm set-force-adoptable [on|off|default]"); System.err.println(" sm set-virtual-disk [true|false]"); System.err.println(""); System.err.println(" sm partition DISK [public|private|mixed] [ratio]"); diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java index 8905ad1e6abc..2d1bb2f25d88 100644 --- a/core/java/android/os/storage/StorageManager.java +++ b/core/java/android/os/storage/StorageManager.java @@ -115,7 +115,7 @@ public class StorageManager { /** {@hide} */ public static final String PROP_HAS_RESERVED = "vold.has_reserved"; /** {@hide} */ - public static final String PROP_FORCE_ADOPTABLE = "persist.fw.force_adoptable"; + public static final String PROP_ADOPTABLE = "persist.sys.adoptable"; /** {@hide} */ public static final String PROP_EMULATE_FBE = "persist.sys.emulate_fbe"; /** {@hide} */ @@ -197,15 +197,17 @@ public class StorageManager { public static final String EXTRA_REQUESTED_BYTES = "android.os.storage.extra.REQUESTED_BYTES"; /** {@hide} */ - public static final int DEBUG_FORCE_ADOPTABLE = 1 << 0; + public static final int DEBUG_ADOPTABLE_FORCE_ON = 1 << 0; /** {@hide} */ - public static final int DEBUG_EMULATE_FBE = 1 << 1; + public static final int DEBUG_ADOPTABLE_FORCE_OFF = 1 << 1; /** {@hide} */ - public static final int DEBUG_SDCARDFS_FORCE_ON = 1 << 2; + public static final int DEBUG_EMULATE_FBE = 1 << 2; /** {@hide} */ - public static final int DEBUG_SDCARDFS_FORCE_OFF = 1 << 3; + public static final int DEBUG_SDCARDFS_FORCE_ON = 1 << 3; /** {@hide} */ - public static final int DEBUG_VIRTUAL_DISK = 1 << 4; + public static final int DEBUG_SDCARDFS_FORCE_OFF = 1 << 4; + /** {@hide} */ + public static final int DEBUG_VIRTUAL_DISK = 1 << 5; // NOTE: keep in sync with installd /** {@hide} */ diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index 99e0459d5d23..6c35bdae5a3e 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -25,11 +25,9 @@ import static android.os.storage.OnObbStateChangeListener.ERROR_PERMISSION_DENIE import static android.os.storage.OnObbStateChangeListener.MOUNTED; import static android.os.storage.OnObbStateChangeListener.UNMOUNTED; -import static com.android.internal.util.XmlUtils.readBooleanAttribute; import static com.android.internal.util.XmlUtils.readIntAttribute; import static com.android.internal.util.XmlUtils.readLongAttribute; import static com.android.internal.util.XmlUtils.readStringAttribute; -import static com.android.internal.util.XmlUtils.writeBooleanAttribute; import static com.android.internal.util.XmlUtils.writeIntAttribute; import static com.android.internal.util.XmlUtils.writeLongAttribute; import static com.android.internal.util.XmlUtils.writeStringAttribute; @@ -249,7 +247,6 @@ class StorageManagerService extends IStorageManager.Stub private static final String TAG_VOLUMES = "volumes"; private static final String ATTR_VERSION = "version"; private static final String ATTR_PRIMARY_STORAGE_UUID = "primaryStorageUuid"; - private static final String ATTR_FORCE_ADOPTABLE = "forceAdoptable"; private static final String TAG_VOLUME = "volume"; private static final String ATTR_TYPE = "type"; private static final String ATTR_FS_UUID = "fsUuid"; @@ -287,8 +284,6 @@ class StorageManagerService extends IStorageManager.Stub private ArrayMap<String, VolumeRecord> mRecords = new ArrayMap<>(); @GuardedBy("mLock") private String mPrimaryStorageUuid; - @GuardedBy("mLock") - private boolean mForceAdoptable; /** Map from disk ID to latches */ @GuardedBy("mLock") @@ -1011,9 +1006,14 @@ class StorageManagerService extends IStorageManager.Stub @Override public void onDiskCreated(String diskId, int flags) { synchronized (mLock) { - if (SystemProperties.getBoolean(StorageManager.PROP_FORCE_ADOPTABLE, false) - || mForceAdoptable) { - flags |= DiskInfo.FLAG_ADOPTABLE; + final String value = SystemProperties.get(StorageManager.PROP_ADOPTABLE); + switch (value) { + case "force_on": + flags |= DiskInfo.FLAG_ADOPTABLE; + break; + case "force_off": + flags &= ~DiskInfo.FLAG_ADOPTABLE; + break; } mDisks.put(diskId, new DiskInfo(diskId, flags)); } @@ -1530,7 +1530,6 @@ class StorageManagerService extends IStorageManager.Stub private void readSettingsLocked() { mRecords.clear(); mPrimaryStorageUuid = getDefaultPrimaryStorageUuid(); - mForceAdoptable = false; FileInputStream fis = null; try { @@ -1552,7 +1551,6 @@ class StorageManagerService extends IStorageManager.Stub mPrimaryStorageUuid = readStringAttribute(in, ATTR_PRIMARY_STORAGE_UUID); } - mForceAdoptable = readBooleanAttribute(in, ATTR_FORCE_ADOPTABLE, false); } else if (TAG_VOLUME.equals(tag)) { final VolumeRecord rec = readVolumeRecord(in); @@ -1583,7 +1581,6 @@ class StorageManagerService extends IStorageManager.Stub out.startTag(null, TAG_VOLUMES); writeIntAttribute(out, ATTR_VERSION, VERSION_FIX_PRIMARY); writeStringAttribute(out, ATTR_PRIMARY_STORAGE_UUID, mPrimaryStorageUuid); - writeBooleanAttribute(out, ATTR_FORCE_ADOPTABLE, mForceAdoptable); final int size = mRecords.size(); for (int i = 0; i < size; i++) { final VolumeRecord rec = mRecords.valueAt(i); @@ -1980,12 +1977,25 @@ class StorageManagerService extends IStorageManager.Stub } } - if ((mask & StorageManager.DEBUG_FORCE_ADOPTABLE) != 0) { - synchronized (mLock) { - mForceAdoptable = (flags & StorageManager.DEBUG_FORCE_ADOPTABLE) != 0; + if ((mask & (StorageManager.DEBUG_ADOPTABLE_FORCE_ON + | StorageManager.DEBUG_ADOPTABLE_FORCE_OFF)) != 0) { + final String value; + if ((flags & StorageManager.DEBUG_ADOPTABLE_FORCE_ON) != 0) { + value = "force_on"; + } else if ((flags & StorageManager.DEBUG_ADOPTABLE_FORCE_OFF) != 0) { + value = "force_off"; + } else { + value = ""; + } - writeSettingsLocked(); + final long token = Binder.clearCallingIdentity(); + try { + SystemProperties.set(StorageManager.PROP_ADOPTABLE, value); + + // Reset storage to kick new setting into place mHandler.obtainMessage(H_RESET).sendToTarget(); + } finally { + Binder.restoreCallingIdentity(token); } } @@ -3564,8 +3574,6 @@ class StorageManagerService extends IStorageManager.Stub pw.print(DataUnit.MEBIBYTES.toBytes(pair.second)); pw.println(" MiB)"); } - pw.println("Force adoptable: " + mForceAdoptable); - pw.println(); pw.println("Local unlocked users: " + Arrays.toString(mLocalUnlockedUsers)); pw.println("System unlocked users: " + Arrays.toString(mSystemUnlockedUsers)); } |