)]}'
{
  "log": [
    {
      "commit": "c6433a299df633c45d714a20fe3672b9b86d9312",
      "tree": "44222958dd24f47012cb06e3eb903ef3fa09388a",
      "parents": [
        "ff19b05e8ecf5349aa2fb0939446c1de760d8c87"
      ],
      "author": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Tue Oct 24 14:54:43 2017 -0700"
      },
      "committer": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Thu Oct 26 12:19:03 2017 -0700"
      },
      "message": "Forget keys when we forget the volume.\n\nBug: 25861755\nTest: create a volume, forget it, check logs and filesystem.\nChange-Id: I0ab662969c51703cb046d57b72330e0f14447ef3\n"
    },
    {
      "commit": "3ce18256a1e2edf830830f066e5ddb4c8203111b",
      "tree": "4015d01f68255d4f03589bb88987c15cdf1234c9",
      "parents": [
        "ac46172c79bae9fe52f15fc0f0867c2e904cb10e"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Oct 24 11:08:45 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Oct 24 12:19:47 2017 -0600"
      },
      "message": "Pass both partition GUID and filesystem UUID.\n\nFDE keys are indexed using the partition GUID, while FBE keys will be\nindexed using the filesystem UUID, so pass both of those identifiers\nalong when forgetting a volume.\n\nTest: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.AdoptableHostTest\nBug: 25861755\nChange-Id: I6e239d5ba67a01c9a848d705f6167da00f975924\n"
    },
    {
      "commit": "9fd7559813898f2c0da713add24a08dfab6f864d",
      "tree": "91e7d8e3506a9bb8860e7d2d829111a3f80ce7f2",
      "parents": [
        "947a57e76dfa5b46bef11254d9eb84d9cf7b1586",
        "5889083d719432f466ebf0f271b21d8141b67a14"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Oct 24 16:04:22 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Oct 24 16:04:22 2017 +0000"
      },
      "message": "Merge \"Check that dir name is a pid before attempting to read\""
    },
    {
      "commit": "5889083d719432f466ebf0f271b21d8141b67a14",
      "tree": "45bf6f777650c3d7cf87135df2ae7a999d93a811",
      "parents": [
        "8646da062aef442945d2130b87819ecd36bc63c0"
      ],
      "author": {
        "name": "Jeff Vander Stoep",
        "email": "jeffv@google.com",
        "time": "Mon Oct 23 17:12:31 2017 -0700"
      },
      "committer": {
        "name": "Jeff Vander Stoep",
        "email": "jeffv@google.com",
        "time": "Tue Oct 24 07:03:01 2017 -0700"
      },
      "message": "Check that dir name is a pid before attempting to read\n\nPrevents selinux denials for folders in /proc that do not have the\ndefault /proc label.\n\nBug: 68146208\nTest: no selinux denials for vold attempting to read proc_asound dir.\nChange-Id: I7cdd3bbe8e687e078372012773e9a34a5c76e0f8\n"
    },
    {
      "commit": "56292ef1198fbeb6a12c27c7b4f42e89c933e049",
      "tree": "2d1ecccc68f474dea3c1b0a33ebac63b0a523c63",
      "parents": [
        "4ddf576ca8e6f2cea26f09b995db41c923f40c0f"
      ],
      "author": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Fri Oct 20 08:07:53 2017 -0700"
      },
      "committer": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Fri Oct 20 10:05:36 2017 -0700"
      },
      "message": "Undo Utils dependency on VolumeManager\n\nI want to use Utils in another executable, so breaking this link.\n\nBug: 25861755\nTest: compiles (and boots, though that doesn\u0027t exercise changed code)\nChange-Id: I6bb447453bb370fefb7f2f3aceb459428bdee6a7\n"
    },
    {
      "commit": "3472e52fc259b6a549acece21d4901d99d6a421f",
      "tree": "12decd0c39011b3469bda1e3490d677d3721b44a",
      "parents": [
        "3b71fc51005ac566fd8120f01b784d5f251ad886"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Oct 06 18:02:53 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Oct 17 12:40:51 2017 -0600"
      },
      "message": "Move to modern utility methods from android::base.\n\nMoves away from crufty char* operations to std::string utility\nmethods, including android::base methods for splitting/parsing.\n\nRewrite of how Process handles scanning procfs for filesystem\nreferences; now uses fts(3) for more sane traversal.\n\nReplace sscanf() with new FindValue() method, also has unit tests.\n\nRemove some unused methods.  Switch almost everyone over to using\nmodern logging library.\n\nTest: cts-tradefed run commandAndExit cts-dev -m CtsOsTestCases -t android.os.storage.cts.StorageManagerTest\nTest: cts-tradefed run commandAndExit cts-dev --abi armeabi-v7a -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.AdoptableHostTest\nBug: 67041047\nChange-Id: I70dc512f21459d1e25b187f24289002b2c7bc7af\n"
    },
    {
      "commit": "b21add1d79bc5b50cd303d94a24f420f67b23ac8",
      "tree": "25410669a05a2a1d79bad67e15b1b1e2ffd51f40",
      "parents": [
        "5b644aae30d3a477c4863d25ce245974da1f09ff",
        "67b8c4953051cb14d0333856a057e5acba273d0e"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@google.com",
        "time": "Fri Sep 22 01:10:49 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Sep 22 01:10:49 2017 +0000"
      },
      "message": "Merge \"Make Loop::destroyAll() smarter.\""
    },
    {
      "commit": "67b8c4953051cb14d0333856a057e5acba273d0e",
      "tree": "72788b409965f2ec1254436956d1dc5808c5e6f2",
      "parents": [
        "49672b9351eb7e7f2bc655320aabd2fb6bd4c9d7"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 21 17:08:43 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 21 17:11:07 2017 -0600"
      },
      "message": "Make Loop::destroyAll() smarter.\n\nInstead of blindly looping across 4096 possible devices, use\nreaddir() to only look at valid devices.  This speeds up destroyAll()\nfrom 40ms to 0.7ms.\n\nAdd tracing information in several places.\n\nTest: external/chromium-trace/systrace.py -b 128768 sched freq am pm ss core_services binder_driver -a system_server,installd,vold\nBug: 65634729, 65737446\nChange-Id: If581de47fb55850c0fcd6e25bf33ed246e1b079d\n"
    },
    {
      "commit": "95440ebd97ef6a0d24920803af62dd3eefa0f7b7",
      "tree": "025ac2dd8e2331263a0abfc1a1dacbeb8f1f9fdd",
      "parents": [
        "49672b9351eb7e7f2bc655320aabd2fb6bd4c9d7"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 18 18:19:28 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Sep 20 13:29:48 2017 -0600"
      },
      "message": "Enable \"cert-err34-c\" tidy checks.\n\nNow that we\u0027ve moved to Binder, we only have a few lingering atoi()\nusages that are cleaned up in this CL.\n\nRewrite match_multi_entry() entirely, with tests to verify both old\nand new implementations.\n\nTest: adb shell /data/nativetest/vold_tests/vold_tests\nBug: 36655947\nChange-Id: Ib79dc1ddc2366db4d5b4e1a1e2ed9456a06a983e\n"
    },
    {
      "commit": "cbe69fc060d021be972af44904dd76ed1aa2a5a2",
      "tree": "ab55d88f6a2f4ad7986fb3250440ec2860e94b47",
      "parents": [
        "5820b51c22249faaeba4a97bebac278153fdb499"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Sep 15 16:50:28 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 18 16:00:14 2017 -0600"
      },
      "message": "Destroy vold socket interface completely.\n\nLong live Binder.\n\nTest: yes\nBug: 13758960\nChange-Id: If6be379b5a873f1b0c66dd1522b87413ad10fc46\n"
    },
    {
      "commit": "52f7a9193479a48c3377fa597191d4dac71f4416",
      "tree": "5e03c129a8b7c7153fef071ae143fb7f6748582a",
      "parents": [
        "0990b69d6bf9288c90e45f933294d6db7e81256c"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Sep 15 12:57:44 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Sep 15 14:18:00 2017 -0600"
      },
      "message": "Move long-running calls to async with listeners.\n\nNow that we\u0027re using Binder, we can have callers provide explicit\nlisteners for every request instead of trying to squeeze them all\ninto unsolicited socket events.\n\nMove benchmarking to be async to avoid blocking other commands for\nup to several minutes.  Remove post-trim benchmarking flag, since\nbenchmarking now requires a separate callback.  Will bring back in\na future CL.\n\nTest: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.AdoptableHostTest\nTest: adb shell sm fstrim\nBug: 62201209, 13758960\nChange-Id: I0f2ebf1ac3b4252ecd6b44303f2887adfdb58e86\n"
    },
    {
      "commit": "11c2d380a786d9e304416be98881b90b74ff666d",
      "tree": "9d751c5daa6f601465c320977aaa6d79d81bfee1",
      "parents": [
        "a94fc7cdcd853923c84b903e89257b80a53b6410"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 11 10:32:01 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 11 18:44:17 2017 -0600"
      },
      "message": "Move even more vold commands over to Binder.\n\nThis moves fstrim, obb and appfuse commands over to the new Binder\ninterface.  This change also separates creating/destroying and\nmounting/unmounting of OBB volumes, which means they finally flow\nnicely into the modern VolumeInfo/VolumeBase design.\n\nWe now generate unique identifiers for all OBB volumes, instead of\nusing a shady MD5 hash.\n\nChange all \"loop\" and \"dm\" devices to tag the kernel resources with\na vold-specific prefix so that we can clean them up if vold crashes;\nthere are new destroyAll() methods that handle this cleanup.\n\nMove appfuse mounting/unmounting into VolumeManager so it can be\nshared.  Move various model objects into a separate directory to\ntidy things up.\n\nTest: cts-tradefed run commandAndExit cts-dev -m CtsOsTestCases -t android.os.storage.cts.StorageManagerTest\nBug: 13758960\nChange-Id: I7294e32b3fb6efe07cb3b77bd20166e70b66958f\n"
    },
    {
      "commit": "9462bdd5125bb5e410292a03aa041895af8f3486",
      "tree": "02b0948f3cae96033cd1f1c955a864cb34c28ad4",
      "parents": [
        "068c6be6227949fbf34389b2d4c023c2031b005f"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 07 15:27:28 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 07 15:27:30 2017 -0600"
      },
      "message": "Move \"volume\" commands over to Binder.\n\nKeep the old socket-based commands intact for awhile so we can\nrapidly disable this change using the ENABLE_BINDER feature flag.\n\nDefine constants in AIDL to keep Java and C++ in sync.\n\nTest: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.ExternalStorageHostTest\nTest: cts-tradefed run commandAndExit cts-dev --abi armeabi-v7a -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.AdoptableHostTest\nBug: 13758960\nChange-Id: I0d6f82cbebe67f671b60949fd727409aeb1fdc0d\n"
    },
    {
      "commit": "23b87ecf415fa983e4ba24826e2b60bff1edb1d0",
      "tree": "bb4c288df25dbd75bbcbddc4b63f0fc9401a582f",
      "parents": [
        "4460d0e554a6694d47e9b3c8cd4ea61c17c135b8",
        "1b6d8237f21225855cb91b9ae869c59563a8293b"
      ],
      "author": {
        "name": "Keun-young Park",
        "email": "keunyoung@google.com",
        "time": "Thu Aug 17 22:21:40 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Aug 17 22:21:40 2017 +0000"
      },
      "message": "Merge \"mInternalEmulated could be used after shutdown() called\" am: 9b4a443bd6 am: 92052aa582\nam: 1b6d8237f2\n\nChange-Id: I71b1ec275e2850c1a8273ac5eebc7373a0729552\n"
    },
    {
      "commit": "92052aa5827f29bfbaa5837b23cb44b641f14035",
      "tree": "b86875b5dcdc93d0507614e92d8e0748d1a8b56a",
      "parents": [
        "b60d874f24b8ecf65c45d86708e2db144807e8d8",
        "9b4a443bd6a28152f49f3dc3a7f368f62c81e246"
      ],
      "author": {
        "name": "Keun-young Park",
        "email": "keunyoung@google.com",
        "time": "Thu Aug 17 22:13:40 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Aug 17 22:13:40 2017 +0000"
      },
      "message": "Merge \"mInternalEmulated could be used after shutdown() called\"\nam: 9b4a443bd6\n\nChange-Id: Ia1007988297c39f391b35ad51645556ceeaf0cc6\n"
    },
    {
      "commit": "d263da88076f5299e6202f8b388eab79f6fdd495",
      "tree": "6f565813b580ee7a0f452284c58be4fc29de9454",
      "parents": [
        "1647759651c50bbcee74c3a43860c8d68e0a05d3"
      ],
      "author": {
        "name": "Gao Xiang",
        "email": "gaoxiang25@huawei.com",
        "time": "Mon Aug 14 11:32:13 2017 +0800"
      },
      "committer": {
        "name": "g00380047",
        "email": "gaoxiang25@huawei.com",
        "time": "Mon Aug 14 14:26:56 2017 +0800"
      },
      "message": "mInternalEmulated could be used after shutdown() called\n\nIt fixes the findvolume() / reset() use-after-free issue after\nshutdown called to avoid vold crash.\n\nFixes: a5bbb5e3c13d (\"make shutdown safe for double calls.\")\nChange-Id: I50f216141b20da08549080291091dc5690c00ffe\nSigned-off-by: Gao Xiang \u003cgaoxiang25@huawei.com\u003e\n"
    },
    {
      "commit": "375ac25773d0ea48b4ae63378cca4891c926627d",
      "tree": "2e526d23a38c14ea14a97d121e2d216774f2d480",
      "parents": [
        "85f412b4eef816c5aab57dfa8b4e71e27b1a4fcf"
      ],
      "author": {
        "name": "Keun-young Park",
        "email": "keunyoung@google.com",
        "time": "Wed Aug 02 17:45:48 2017 -0700"
      },
      "committer": {
        "name": "Keun-young Park",
        "email": "keunyoung@google.com",
        "time": "Wed Aug 02 17:45:48 2017 -0700"
      },
      "message": "do not sleep if it is shutting down\n\n- Various sleep(5) for vold shutdown can increase shutdown time a lot.\n- If it is shutting down, do not sleep at all. init will take care of\n  active partitions if not unmounted.\n\nbug: 64143519\nTest: reboot and check logs from vold, check if \"ShutdownThread: Shutdown wait timed out\" happens.\nChange-Id: I7cb91427ad2205fe23a054d255caf7ffdfd9f6c3\n"
    },
    {
      "commit": "e4775fdbcad2ab4a69ba689c084c15aced7c995d",
      "tree": "b2eb69d4259d59b0b6271a35a28e9466845cc4ac",
      "parents": [
        "2cd0b938cba24531f94b4440ffbff587160ea902",
        "048422d46ed27f1544450ab243e97af0c4e84755"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 19 19:01:20 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri May 19 19:01:20 2017 +0000"
      },
      "message": "Merge \"vold should #include \u003csys/sysmacros.h\u003e\" am: 398c0e8274 am: 208b464f72 am: fb3e85cf99\nam: 048422d46e\n\nChange-Id: I33406265fcf0c77a6289cb429aa6a2cc5e8f7146\n"
    },
    {
      "commit": "048422d46ed27f1544450ab243e97af0c4e84755",
      "tree": "2e1f1f2686d4e7083cdcecb4734b3f03879e9a87",
      "parents": [
        "f572398ae604a18d5bbaef1bf6c68ea9a48b9da4",
        "fb3e85cf99e5970ecdc7d1e648d385348265efb3"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 19 18:38:38 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri May 19 18:38:38 2017 +0000"
      },
      "message": "Merge \"vold should #include \u003csys/sysmacros.h\u003e\" am: 398c0e8274 am: 208b464f72\nam: fb3e85cf99\n\nChange-Id: I32ed2a66bb60ba1042737b4bbb0a2195a3fe8e6f\n"
    },
    {
      "commit": "0e08e84df0d0b555cf20e3bbe68bb4da7c287012",
      "tree": "b29a85a81377844b71fe2b7c2ceec57d2754dbb5",
      "parents": [
        "612eea6b4f9ed1ec5fb1b14758ebd36bfd3adc53"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 18 09:08:24 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 18 09:08:24 2017 -0700"
      },
      "message": "vold should #include \u003csys/sysmacros.h\u003e\n\nBug: https://github.com/android-ndk/ndk/issues/398\nTest: builds\nChange-Id: I7a1ca1701099886fb493cc5288d6ee867d5f520a\n"
    },
    {
      "commit": "32ebb739cb6c27a122d98b1bdfe1c1a5814b2ed3",
      "tree": "600a15d218e212c5dda6aaa71e7adf8fc860743d",
      "parents": [
        "fd3dc3c076f30e19e7ac902ba0531c6bcfe2e042"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Mar 27 16:18:50 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Mar 27 17:14:52 2017 -0600"
      },
      "message": "Enable clang-tidy for security sensitive domain.\n\nStart with clang-analyzer-security* and cert-*, but disable two\nspecific errors:\n\n-- cert-err34-c, which checks for atoi(); heavily triggered by\nCommandListener, but will disappear when we move to Binder.\n-- cert-err58-cpp, which checks for exceptions before main(); it\u0027s\na \"Low\" severity issue, and filed 36656327 to track cleanup.\n\nFix all other triggered errors along the way.\n\nTest: builds, boots\nBug: 36655947\nChange-Id: I1391693fb521ed39700e25ab6b16bc741293bb79\n"
    },
    {
      "commit": "fd3dc3c076f30e19e7ac902ba0531c6bcfe2e042",
      "tree": "6257382f0252b80254be28f9e09b85168c31919b",
      "parents": [
        "9f912b8cc402f02091dd4f40f61b4e6a138f37eb"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Mar 27 10:49:21 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Mar 27 11:13:36 2017 -0600"
      },
      "message": "Spread around some O_CLOEXEC love.\n\nAlso remove some unnecessary SELinux logic when creating image files\nfor loop devices.\n\nTest: builds, boots, common operations work\nBug: 34903607\nChange-Id: I68dfa022ecc39f56c175e786694e0de35b954ca0\n"
    },
    {
      "commit": "fa1c677c1ac6fae00653d41cf85ff9951d57f7b1",
      "tree": "9957a8b824defc4d94581ba7a815ff4c475d5019",
      "parents": [
        "3918ae6c76a03db8eb6060914c7cff86649fdc26"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Mar 25 22:49:13 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Mar 25 23:25:14 2017 -0600"
      },
      "message": "Add a new \"virtual disk\" feature.\n\nIt\u0027s extremely difficult to test storage related logic on devices\nthat don\u0027t have physical SD card slots.  So to support better\ndebugging and testing, add a new \"virtual disk\" feature which mounts\na 512MB file through loop device.\n\nIt relies on the kernel having the \"loop.max_part\" value set to\nsomething other than 0 via the boot command line, since that allows\nall the existing partition logic to fall into place.\n\nBug: 34903607\nTest: builds, boots, virtual disk works\nChange-Id: I04c5b33e37319d867542985a56b7999a9b7cf35d\n"
    },
    {
      "commit": "3918ae6c76a03db8eb6060914c7cff86649fdc26",
      "tree": "1a72193aa718a93f6b95b82fdfb6ffd799adb2a9",
      "parents": [
        "3b0a884381c1576f64dfbdda22227a1850331a6c",
        "2a8605b9d16d822972b37b267fa11e3e9b9d5636"
      ],
      "author": {
        "name": "Keun-young Park",
        "email": "keunyoung@google.com",
        "time": "Wed Mar 15 02:56:40 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Mar 15 02:56:40 2017 +0000"
      },
      "message": "Merge \"make shutdown safe for double calls.\" am: 71fa1068de am: 2f93c657f4\nam: 2a8605b9d1\n\nChange-Id: Id1cd83d307e7791359bc6dfd96368f1138ff21d2\n"
    },
    {
      "commit": "a5bbb5e3c13db677a30d26f2a2c3487dfe28f66a",
      "tree": "10f1ce0f4e044bb8645f006151db2bea69e60436",
      "parents": [
        "92f21f5294d5b146e9694dc0a5a62775bf0fab8f"
      ],
      "author": {
        "name": "Keun-young Park",
        "email": "keunyoung@google.com",
        "time": "Mon Mar 13 18:02:50 2017 -0700"
      },
      "committer": {
        "name": "Keun-young Park",
        "email": "keunyoung@google.com",
        "time": "Tue Mar 14 17:27:02 2017 -0700"
      },
      "message": "make shutdown safe for double calls.\n\n- In new shutdown sequence, volume shutdown is requested in two places:\n  system_server and init.\n- Make VolumeManager.shutdown safe for double calls.\n  It crashed before this change.\n\nbug: 36004738\nTest: reboot and check last_kmsg for crash / vdc timeout\nChange-Id: I296913959b2647b65d66553073f2032545beba57\n"
    },
    {
      "commit": "b7336860a639b0f38ae2f3ab6e20c5c2a38cc3f4",
      "tree": "46827474fd27d8f8c8e57ac7e137eebe0e443c63",
      "parents": [
        "8be61daff76790439092ffe0f061a1339765df1b",
        "787930f5b6c70e92f88d712a2d8ad64bd7f5fa5a"
      ],
      "author": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Wed Jan 25 19:52:55 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Jan 25 19:52:55 2017 +0000"
      },
      "message": "Merge \"Remove coldboot from vold\" am: cc29c526d4 am: 9a2e29fe32 am: 78bf4cbb12\nam: 787930f5b6\n\nChange-Id: Id9b356819d22c23d79a576851580a1016f799ecb\n"
    },
    {
      "commit": "6b455c29be7a0e130d953d5afd79201ff987e294",
      "tree": "b8f546fa26db7caf8913e171682ae7adc938739c",
      "parents": [
        "d65506217d96d0fe3dd5e2c0f73b09248ea32553"
      ],
      "author": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Fri Jan 20 11:52:33 2017 -0800"
      },
      "committer": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Wed Jan 25 18:15:38 2017 +0000"
      },
      "message": "Remove coldboot from vold\n\ncoldboot is now taken care by ueventd, so removing the duplicate\nlogic to save boottime.\nThis CL also fixes a missing lock.\n\n\nBug: 33786699\nTest: manual\nChange-Id: I71270252f3153abc815d142b5da7a9cb85b94dac\n"
    },
    {
      "commit": "0955770f88200effb1e4d4be0a00730552449865",
      "tree": "4ae5601f98a150826cee533acc5b72a2238d8866",
      "parents": [
        "a345c88826c352a4ef78a1c51445fc171821af57",
        "73a3576ef90b67d90d40a04e89be0b9217d0dacd"
      ],
      "author": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Jul 28 00:50:26 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jul 28 00:50:26 2016 +0000"
      },
      "message": "Merge \\\\\\\\\"Fix clang-tidy performance warnings in system/vold.\\\\\\\\\" am: e24d4eef9b am: aa668f3d13 am: ed1c4cf456\nam: 73a3576ef9\n\nChange-Id: I7aa15c236ba857833b392e2eb5646f468761749a\n"
    },
    {
      "commit": "aa668f3d132f773dc0c11734d10c8f74d7f8c46d",
      "tree": "f6b5618a309ade6bea2cb26b7b824dc159113fcf",
      "parents": [
        "f5e9bc9517a5024dafd588a9528bef9205700789",
        "e24d4eef9b5fc3b93117af9471c9349cc7ebaa56"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Jul 27 23:17:57 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Jul 27 23:17:57 2016 +0000"
      },
      "message": "Merge \\\"Fix clang-tidy performance warnings in system/vold.\\\"\nam: e24d4eef9b\n\nChange-Id: I8e882391fb343a5dd8b5cd32b2e7c087219334dc\n"
    },
    {
      "commit": "11a2ce8da33e0ec4be250fd85c47f706d6c91a10",
      "tree": "8dcac528bfb17372727e475d8cfb20a7038463ea",
      "parents": [
        "786c536e84ef29b9c885f15bf8cf9b92653962ec"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Jul 27 14:11:02 2016 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Jul 27 14:11:02 2016 -0700"
      },
      "message": "Fix clang-tidy performance warnings in system/vold.\n\n* Use const reference type for for-loop index variables\n  to avoid unnecessary copy.\n\nBug: 30413223\nChange-Id: Id4d980ae8afec1374fc3be0b23f1c6a39bff86e0\nTest: build with WITH_TIDY\u003d1\n"
    },
    {
      "commit": "629a360ace7b3b52fa7f988934cf73e5796bb770",
      "tree": "1835dbc15439db01704bc7cadb434d87560d74f2",
      "parents": [
        "b67768a9ece02a569b43db327f5b3b1ee6c3cbf7",
        "6e8ebe8f763bfcea9b7420e9efa62e61e2260f58"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu May 12 00:55:30 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu May 12 00:55:30 2016 +0000"
      },
      "message": "Merge \"Fix misc-macro-parentheses warnings.\" am: 0c0f9228cf am: 4ff367a593 am: 5dc0aa6e41\nam: 6e8ebe8f76\n\n* commit \u00276e8ebe8f763bfcea9b7420e9efa62e61e2260f58\u0027:\n  Fix misc-macro-parentheses warnings.\n\nChange-Id: I518c580eda89fbc9f987e8ac36001b57c29f7f01\n"
    },
    {
      "commit": "5dc0aa6e41fbd961ecefaa3fc6fe4ac720e53bc3",
      "tree": "7286bc4c856d6be4a230813ec2bf2cda2f7bc31e",
      "parents": [
        "269bdbcab18aa8c24a637937d885c045f408a12e",
        "4ff367a5934a906ba2008e530efca220deb96af7"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed May 11 23:03:58 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed May 11 23:03:58 2016 +0000"
      },
      "message": "Merge \"Fix misc-macro-parentheses warnings.\" am: 0c0f9228cf\nam: 4ff367a593\n\n* commit \u00274ff367a5934a906ba2008e530efca220deb96af7\u0027:\n  Fix misc-macro-parentheses warnings.\n\nChange-Id: I67d525e6f78b1d4e5854d40c30ad0bb96a3490dc\n"
    },
    {
      "commit": "cc5d58085850e6643c82b9124477e19bd092b9a9",
      "tree": "9e95b70163d155a795e03b11edfca5e8badaca00",
      "parents": [
        "af458c478a9f333fa39bdddb9a7aa097a2196b64"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed May 11 15:05:05 2016 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed May 11 15:05:05 2016 -0700"
      },
      "message": "Fix misc-macro-parentheses warnings.\n\nAdd parentheses around macro arguments used beside binary operators.\n\nBug: 28705665\nChange-Id: I0731cb8b22b3a9bdadac6414473d90e8398a8e89\n"
    },
    {
      "commit": "e4c291a1ee7a0fe7660173e93777686900b2cc40",
      "tree": "14865159d4b41564e847c60b293ed38da18679f5",
      "parents": [
        "e8167afe55d4e33e93d7270701403708d9a03e7e"
      ],
      "author": {
        "name": "Daniel Rosenberg",
        "email": "drosen@google.com",
        "time": "Wed Apr 20 14:07:32 2016 -0700"
      },
      "committer": {
        "name": "Daniel Rosenberg",
        "email": "drosen@google.com",
        "time": "Wed Apr 20 14:16:19 2016 -0700"
      },
      "message": "Fix resizeAsec to determine correct size\n\nThis fixes an eror where resizeAsec would attempt\nto read from the superblock struct before initializing\nit.\n\nBug: 28292918\nChange-Id: Ic6804e97e7c83bcedfb682a187b8d5e0e1bc51f9\n"
    },
    {
      "commit": "e6bd7850ff65f76fc550df3e74ecaae1a85c13ac",
      "tree": "c3507c3cd2f18fa4819069cc74d0020aec771cf1",
      "parents": [
        "58ec71b9d41d3b7d9195b07e6368d3753aacf7be",
        "674bed18bd253b1a0f927ffb0ab95221fec3e53b"
      ],
      "author": {
        "name": "Hidehiko Abe",
        "email": "hidehiko@google.com",
        "time": "Fri Mar 11 04:34:31 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 11 04:34:31 2016 +0000"
      },
      "message": "Merge \"Split slave-bind mount into two.\""
    },
    {
      "commit": "674bed18bd253b1a0f927ffb0ab95221fec3e53b",
      "tree": "f25d7b837cba0d5f8a69fc6189220ac3c345cc81",
      "parents": [
        "972c545f7e4ad7baad0ea2bae4d142d62913c1fc"
      ],
      "author": {
        "name": "Hidehiko Abe",
        "email": "hidehiko@google.com",
        "time": "Wed Mar 09 16:42:10 2016 +0900"
      },
      "committer": {
        "name": "Hidehiko Abe",
        "email": "hidehiko@google.com",
        "time": "Wed Mar 09 16:42:10 2016 +0900"
      },
      "message": "Split slave-bind mount into two.\n\nmount(2) does not work with MS_BIND | MS_SLAVE at a time.\nInstead, this CL calls mount twice.\n\nChange-Id: I072fd5377e35fff5ed3fa2798eea084d86fe2977\n"
    },
    {
      "commit": "942d4e830b2057177fd2d47c51b788edd6e94398",
      "tree": "33654832bdc3d291b0766a2c4e4fa4c141a24fe9",
      "parents": [
        "ad8e26297b07f26376bd3125b11ae280304c22e8"
      ],
      "author": {
        "name": "Yu Ning",
        "email": "yu.ning@intel.com",
        "time": "Fri Jan 08 17:36:47 2016 +0800"
      },
      "committer": {
        "name": "Prathmesh Prabhu",
        "email": "pprabhu@google.com",
        "time": "Tue Mar 08 12:19:41 2016 -0800"
      },
      "message": "Support emulator\u0027s virtio-blk based SD card\n\nCurrently, vold only supports MMC (for SD cards) and SCSI (for USB\ndrives) devices. It does not recognize any device whose major number is\nnot one of those used by MMC and SCSI. Unfortunately, virtio-blk is one\nsuch device. It is used by the new Android emulator (a.k.a. qemu2,\nfeaturing the \"ranchu\" virtual board) for SD card emulation.\n\nIn order to make this virtio-blk based SD card device appear in Android\nand appear as an SD card (rather than a USB drive), changes have to be\nmade to both vold (wherever the device major number is checked) and\nranchu\u0027s storage configuration. This CL implements former.\n\nThis is a stop-gap solution for emulator in nyc.\nA longer term solution in-tune with upstream kernel is in the pipes.\n\nUpdated from aosp/master version.\n\nBUG:27431753\n\nChange-Id: I5014edec73be7c5b565d91542464c82cbe58992c\nSigned-off-by: Yu Ning \u003cyu.ning@intel.com\u003e\n(cherry picked from commit 5b1d1c7dfa13b4dca75213581dc8351b841b76c8)\n"
    },
    {
      "commit": "10d34887b3e00e603604e0301487f9b8222c66f4",
      "tree": "2f2349ae28f6bc728753bf6f5e3601f9b9519d11",
      "parents": [
        "ea62e26ad3cc3e6a522cb4a711f34848ba65385a"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Fri Jan 29 14:33:51 2016 +0900"
      },
      "committer": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Tue Feb 02 18:56:19 2016 +0900"
      },
      "message": "Mount appfuse in process namespace.\n\nBUG\u003d26148108\n\nChange-Id: I2297fd227a4c607054e0403e73bd9c857f580a1c\n"
    },
    {
      "commit": "6bf0547ccce72233bd465178b919fa7f15e48b45",
      "tree": "ddf19293b96d3be7929a1be9343fbf393788b009",
      "parents": [
        "51c6b9876a0fa4f0570364b8dc3c4c0351dcd797",
        "b7d5a47cec7e97b5d73945804e8a41d52a36596b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 04 17:55:33 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 04 17:55:33 2015 -0800"
      },
      "message": "resolve merge conflicts of b7d5a47cec to master.\n\nChange-Id: I0c5211a00d92d0ee796bb9c77d2e13675a2a3e8d\n"
    },
    {
      "commit": "90cca664e1382761a6e81b0cc41bbaeac09d4487",
      "tree": "32b57e126b193b96ce99ce7f1737a1deae205781",
      "parents": [
        "20826a1574cd38ca6a31bd71368808154ea19a9f",
        "9e807ea6db2c3ea7203844cefb31b1afa06619c3"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Dec 05 00:54:27 2015 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Sat Dec 05 00:54:27 2015 +0000"
      },
      "message": "Merge \"Make sure path is not NULL to avoid fatal exception.\" am: e0e5bfeb3c am: de629f105e\nam: 9e807ea6db\n\n* commit \u00279e807ea6db2c3ea7203844cefb31b1afa06619c3\u0027:\n  Make sure path is not NULL to avoid fatal exception.\n"
    },
    {
      "commit": "20826a1574cd38ca6a31bd71368808154ea19a9f",
      "tree": "5979ba1c8d51592d6906ade0f1367b1a5b51f6b0",
      "parents": [
        "a597d0a4248dded627b2cf71ca5f9f3bcd12f033",
        "a619c191cc06c08fb19e1bdd486a41da65f6c0af"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Dec 05 00:54:22 2015 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Sat Dec 05 00:54:22 2015 +0000"
      },
      "message": "Merge \"vold: fix 64 bit ioctl error\" am: 3e6c59dc16 am: bf6acf44a9\nam: a619c191cc\n\n* commit \u0027a619c191cc06c08fb19e1bdd486a41da65f6c0af\u0027:\n  vold: fix 64 bit ioctl error\n"
    },
    {
      "commit": "7e128fbe212c64492afa98bfd6d7fab6f1956831",
      "tree": "d080aac00a1243a14b6108e6616bb16e063e4bb8",
      "parents": [
        "385ca5d236547a767133abcd44dff12ca7b805be"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 04 15:50:53 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 04 15:50:53 2015 -0800"
      },
      "message": "Track rename from base/ to android-base/.\n\nChange-Id: I3096cfa50afa395d8e9a8043ab69c1e390f86ccb\n"
    },
    {
      "commit": "e0e5bfeb3c49419ceb53d2ea2b7410ddcfab35c5",
      "tree": "d004f6cb1177c7e836048944ea5c3cd916257fd8",
      "parents": [
        "3e6c59dc162ff6b16177e480fdb80c08f24b3700",
        "6440379f1b5508d58d8c0cd43eecd304da10f7f8"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Dec 03 17:39:39 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 03 17:39:39 2015 +0000"
      },
      "message": "Merge \"Make sure path is not NULL to avoid fatal exception.\""
    },
    {
      "commit": "a4f48d0f44d09b6a9a3b16f6c0121ffd5123eef3",
      "tree": "301212d5f9803c194d157bce20eb8b3821f3fed3",
      "parents": [
        "0331d4ae3843f682e98bfa1aba0f8da7fbd9beb0"
      ],
      "author": {
        "name": "Mateusz Nowak",
        "email": "mateusz.nowak@intel.com",
        "time": "Mon Aug 03 18:06:39 2015 +0200"
      },
      "committer": {
        "name": "Zhiquan Liu",
        "email": "zhiquan.liu@intel.com",
        "time": "Wed Oct 21 11:16:19 2015 +0800"
      },
      "message": "vold: fix 64 bit ioctl error\n\nChanging the num_sectors used in ioctl with BLKGETSIZE because\nthe kernel expects an unsigned long type and then changes 64 bits\nwith a 64 bits userspace. This overwrites what\u0027s located close to\nthe parameter location if any.\n\nChange-Id: I78fd61a1084de2741f39b926aa436462518709a0\nSigned-off-by: Mateusz Nowak \u003cmateusz.nowak@intel.com\u003e\nSigned-off-by: Zhiquan Liu \u003czhiquan.liu@intel.com\u003e\n"
    },
    {
      "commit": "6440379f1b5508d58d8c0cd43eecd304da10f7f8",
      "tree": "30bf4b25c557c3d0d799d02d4e4ba98c88a30b28",
      "parents": [
        "0331d4ae3843f682e98bfa1aba0f8da7fbd9beb0"
      ],
      "author": {
        "name": "Mateusz Nowak",
        "email": "mateusz.nowak@intel.com",
        "time": "Mon Aug 03 16:39:19 2015 +0200"
      },
      "committer": {
        "name": "Zhiquan Liu",
        "email": "zhiquan.liu@intel.com",
        "time": "Wed Oct 21 11:15:39 2015 +0800"
      },
      "message": "Make sure path is not NULL to avoid fatal exception.\n\nChange-Id: I75fd5d90cf0f75c28e75582fcae934afa4bf29c4\nSigned-off-by: Mateusz Nowak \u003cmateusz.nowak@intel.com\u003e\nSigned-off-by: Zhiquan Liu \u003czhiquan.liu@intel.com\u003e\n"
    },
    {
      "commit": "228f9509e1edee1573d4a7c32b6b6bb6135c8c25",
      "tree": "5e2992a21ec27991340410ad4413ea9cc64064f6",
      "parents": [
        "a95e66afbac306581f2903e2da5e41db62b6a221",
        "47f0531ec9adf7a29873ccdb11a1ee7b11e76c80"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Aug 06 21:45:56 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Aug 06 21:45:56 2015 +0000"
      },
      "message": "am 47f0531e: am 4fc30636: am 1bd078fa: Protect runtime storage mount points.\n\n* commit \u002747f0531ec9adf7a29873ccdb11a1ee7b11e76c80\u0027:\n  Protect runtime storage mount points.\n"
    },
    {
      "commit": "1bd078fa7b5ca613cb3e793d67ccd86d2602787d",
      "tree": "637546f74c946cfceb57a6805204d0f99c8939dd",
      "parents": [
        "8474ee323131fdadcc17f09eab25003a7ae934e0"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Aug 06 11:40:00 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Aug 06 11:45:50 2015 -0700"
      },
      "message": "Protect runtime storage mount points.\n\nWe have a bunch of magic that mounts the correct view of storage\naccess based on the runtime permissions of an app, but we forgot to\nprotect the real underlying data sources; oops.\n\nThis series of changes just bumps the directory heirarchy one level\nto give us /mnt/runtime which we can mask off as 0700 to prevent\npeople from jumping to the exposed internals.\n\nAlso add CTS tests to verify that we\u0027re protecting access to\ninternal mount points like this.\n\nBug: 22964288\nChange-Id: I83f09f0423f4993e766273c50389dd29b1c50589\n"
    },
    {
      "commit": "16b3ba4bd7e83812ee24909dc24b751bfcfe3315",
      "tree": "9a3039241647886a40bd62adfe148255185211ca",
      "parents": [
        "07897ad4764a665093a2ab98588b1dcce7d530b8",
        "90db4d909a95cb2a9c9143a4b116822dd6cf4707"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jul 24 04:05:26 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jul 24 04:05:26 2015 +0000"
      },
      "message": "am 90db4d90: am 78003caf: am 32679a82: Create user directory on emulated storage.\n\n* commit \u002790db4d909a95cb2a9c9143a4b116822dd6cf4707\u0027:\n  Create user directory on emulated storage.\n"
    },
    {
      "commit": "32679a82d9542ec26ea8b4e32d29dd7b02202611",
      "tree": "566dcfd65cf1d10d0fab8688cdd5818b9b856a8c",
      "parents": [
        "81f55c6dc1a14ed68e404fa3a2c244dd343e4990"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jul 21 14:22:01 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jul 21 14:22:03 2015 -0700"
      },
      "message": "Create user directory on emulated storage.\n\nWhen mounting a primary external storage device that is multi-user\naware, ensure that the user-specific directory actually exists before\nmoving forward.\n\nBug: 22472026\nChange-Id: I33c8eed261a9c0d5acedd5be6133ed9990679d08\n"
    },
    {
      "commit": "5ceafb42caf22000e2b22203d5707364acba0e5c",
      "tree": "a408d5699579f804d9abcb0e68a1c557ba188e11",
      "parents": [
        "bf19f7e389b740fa8d0987e41d0869906acb67c8",
        "3ff337db56fbe4ac84eb9f3907ac4a1029beecb9"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jul 03 13:31:30 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jul 03 13:31:30 2015 -0700"
      },
      "message": "Merge commit \u00273ff337db\u0027 into merge\n\nChange-Id: I3c09d1f888da684b50d79a8e539f47c8bcf85646\n"
    },
    {
      "commit": "c86ab6f538bec63638c168d6c843fe7cf73add3b",
      "tree": "528f2ce9a138356824723f7268cd1191f1666c94",
      "parents": [
        "c7b5b570bd05ed3bc921b0c2dc346416a52b4e3e"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jun 26 14:02:09 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jul 01 15:53:51 2015 -0700"
      },
      "message": "Trim both internal and adopted private storage.\n\nRefactor fstrim code to be encapsulated in unique task object, and\ngive it option of benchmarking when finished.  Trimming now includes\nboth storage from fstab and adopted private volumes.  Cleaner timing\nstats are logged for each unique volume.\n\nAdd wakelock during ongoing async move tasks.  Push disk sysfs path\nto framework so it can parse any SD card registers as desired.\n\nBug: 21831325\nChange-Id: I76577685f5cae4929c251ad314ffdaeb5eb1c8bf\n"
    },
    {
      "commit": "bf19f7e389b740fa8d0987e41d0869906acb67c8",
      "tree": "d5a4b3146f102105259dc69d6350c618a2cc77db",
      "parents": [
        "58ef44be0e78d18ca7fc4e5ed86ab2ff757635ad",
        "1458955fec0a4973b68795b334530578241532a8"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jul 01 00:40:00 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jul 01 00:40:00 2015 +0000"
      },
      "message": "am 1458955f: am c7b5b570: Null-terminate readlink() result, full remount.\n\n* commit \u00271458955fec0a4973b68795b334530578241532a8\u0027:\n  Null-terminate readlink() result, full remount.\n"
    },
    {
      "commit": "c7b5b570bd05ed3bc921b0c2dc346416a52b4e3e",
      "tree": "c965045b40a2f0add98f5994793211bf8411ed84",
      "parents": [
        "63123c067a4e709198d9b8d3279c98561f8c990e"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jun 30 15:54:17 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jun 30 15:54:17 2015 -0700"
      },
      "message": "Null-terminate readlink() result, full remount.\n\nIn order to compare results from readlink() calls, we need to null\nterminate the read value, otherwise we can end up doing an infinitely\nrecursive remount in the root namespace.\n\nWhen remounting inside a namespace, unmount all existing mounts before\nmounting the new storage into place.  This also means we need to mount\nthe user-specific symlinks back into place.\n\nSkip spinning up the FUSE daemon when not visible, otherwise we get\nstuck waiting for a daemon that never shows up.\n\nBug: 22192518, 22204412\nChange-Id: Icc7db822354ab7ffc47c39cd0611f65edecc32e5\n"
    },
    {
      "commit": "c36ffa0010c0634d0ba0a72e89ca0cfbd7b00cd9",
      "tree": "7bf81acb096e0842265b671bb350bf898b530b4a",
      "parents": [
        "2cd283ebf82d60ff1f15a4e53db70a4bec7ec816",
        "0deb385f85b4569d98ed9d1df96de1761b378c17"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jun 26 16:37:15 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jun 26 16:37:15 2015 +0000"
      },
      "message": "am 0deb385f: am 66270a21: Let\\\u0027s reinvent storage, yet again!\n\n* commit \u00270deb385f85b4569d98ed9d1df96de1761b378c17\u0027:\n  Let\u0027s reinvent storage, yet again!\n"
    },
    {
      "commit": "66270a21df1058434e4d63691221f11ff5387a0f",
      "tree": "66f125787af5957b3a8cbaf862c6c1c1b2445b1b",
      "parents": [
        "5d268fdac49bd3174a7f0c6dbb042162ae87a695"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jun 24 11:49:24 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Jun 25 22:40:08 2015 -0700"
      },
      "message": "Let\u0027s reinvent storage, yet again!\n\nNow that we\u0027re treating storage as a runtime permission, we need to\ngrant read/write access without killing the app.  This is really\ntricky, since we had been using GIDs for access control, and they\u0027re\nset in stone once Zygote drops privileges.\n\nThe only thing left that can change dynamically is the filesystem\nitself, so let\u0027s do that.  This means changing the FUSE daemon to\npresent itself as three different views:\n\n/mnt/runtime_default/foo - view for apps with no access\n/mnt/runtime_read/foo - view for apps with read access\n/mnt/runtime_write/foo - view for apps with write access\n\nThere is still a single location for all the backing files, and\nfilesystem permissions are derived the same way for each view, but\nthe file modes are masked off differently for each mountpoint.\n\nDuring Zygote fork, it wires up the appropriate storage access into\nan isolated mount namespace based on the current app permissions.  When\nthe app is granted permissions dynamically at runtime, the system\nasks vold to jump into the existing mount namespace and bind mount\nthe newly granted access model into place.\n\nBug: 21858077\nChange-Id: Iade538e4bc7af979fe20095f74416e8a0f165a4a\n"
    },
    {
      "commit": "83434e37146a3b5de09b03061abd5daa53dff265",
      "tree": "87ad3839ae7dcecb212c69b110a7a5a27c673dfa",
      "parents": [
        "9825e45a33d6dcd41341c308f6fdb7fb2dc05c42",
        "b5e680ac377619286d4b8566a3b736fcf0ee7bb0"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jun 22 21:57:15 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Jun 22 21:57:15 2015 +0000"
      },
      "message": "am b5e680ac: am bc40cc8f: Add method to forget private partition keys.\n\n* commit \u0027b5e680ac377619286d4b8566a3b736fcf0ee7bb0\u0027:\n  Add method to forget private partition keys.\n"
    },
    {
      "commit": "bc40cc8f07f69e0e26fc41516e2a83f0a8becbe0",
      "tree": "5fb6eac9d965ef0d755141d0843d57d5c6870f20",
      "parents": [
        "0417060e8ebfd28171fd0aaef8f4e42d9ddd482e"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Jun 18 14:25:08 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jun 22 14:04:54 2015 -0700"
      },
      "message": "Add method to forget private partition keys.\n\nReport both the disk and the partition GUID for private volumes to\nuserspace, and offer to forget the encryption key for a given\npartition GUID.\n\nBug: 21782268\nChange-Id: Ie77a3a58e47bf3563cdb3e4b0edfab1de4d0e6b4\n"
    },
    {
      "commit": "7744be3ac77b220b222678e0316262ab169cf58d",
      "tree": "d5d03ea76a1ee69d8914c4f845477aba4b03f7c1",
      "parents": [
        "a4c92a4bc25ed6c3118e8db39f9e2567e514a691",
        "b75343ae9968326a7d93b3e8981fb3734a11b81d"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jun 10 17:21:01 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jun 10 17:21:01 2015 +0000"
      },
      "message": "am b75343ae: am 210228a0: Merge \"Start tracking added users with serial numbers.\" into mnc-dev\n\n* commit \u0027b75343ae9968326a7d93b3e8981fb3734a11b81d\u0027:\n  Start tracking added users with serial numbers.\n"
    },
    {
      "commit": "bd3038df74ace540d46c530a11e3145f922e1b42",
      "tree": "0c07ec4ea5a4db8548988e4df60b23b0d6fa8cd9",
      "parents": [
        "34824129de2c4a8bb0d1cb9011beff2c186a87d0"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jun 10 09:42:01 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jun 10 09:42:01 2015 -0700"
      },
      "message": "Start tracking added users with serial numbers.\n\nvold will eventually use the serial numbers to clean up stale user\ndirectories when mounting private storage devices.\n\nBug: 20275572\nChange-Id: Ia29cb5da23e969f3087bb5caa5dc8f4e88f07613\n"
    },
    {
      "commit": "4716ee8af7193202da3d4cc987aafb6999d1dfb1",
      "tree": "f94a7be54d7f50d27b622ee66ee0e0474daea6a4",
      "parents": [
        "c104e34298964e0332d65f8a4a4dea3e732d1d88"
      ],
      "author": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Wed Jun 10 16:33:12 2015 +0100"
      },
      "committer": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Wed Jun 10 16:33:12 2015 +0100"
      },
      "message": "chmod a-x VolumeManager.cpp\n\nChange-Id: Id4aa31efed1753d5c15446d8281f2decea28efca\n"
    },
    {
      "commit": "d0640f6358041f7e2657167560b357078db73526",
      "tree": "7cbd062631c9ab2e8e7f9859028219d352c4fb60",
      "parents": [
        "d0b4295ccc07d0cd715ade415c8c0d7d6945880e"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu May 21 22:35:42 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jun 08 20:21:25 2015 -0700"
      },
      "message": "Add f2fs support for private volumes.\n\nWhen formatting volumes, pass along fsType string which can be \"auto\"\nto let the volume select the best choice.  For now, private volumes\nassume that MMC devices (like SD cards) are best off using f2fs when\nboth kernel support and tools are present, otherwise fall back to\next4.  Use blkid when mounting to pick the right set of tools.\n\nMove filesystem utility methods into namespaces and place in separate\ndirectory to be more organized.\n\nBug: 20275581\nChange-Id: Id5f82d8672dda2e9f68c35b075f28232b0b55ed4\n"
    },
    {
      "commit": "5a6bfca1638760b87cf64c5ffb48ff3557cc0563",
      "tree": "1f5011d7d63c7aa8033878358004bc9f0604b446",
      "parents": [
        "e44a41a17b5c2d488442d7805b08231f4b327aca"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu May 14 20:33:55 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri May 15 10:48:11 2015 -0700"
      },
      "message": "Initial pass at storage benchmarks.\n\nNow that we\u0027re offering to store private app data on adopted storage\ndevices, the performance of those devices is much more important to\noverall user experience.\n\nTo help set user expectations, this change offers to execute a\nreal-world benchmark on a storage device, returning a metric that can\nbe used to compare internal and external storage.  The benchmark is\ngenerated from the strace-instrumented storage access patterns of\ntypical apps.\n\nA typical device completes the benchmark in under two seconds on\ninternal storage, a UHS-3 SD card is even faster (!), but a very slow\nClass 4 SD card takes about 30 seconds to complete, giving us a clear\nsignal.\n\nThe measured benchmark numbers are logged along with information\nabout the storage device, such as manufacturer, model, etc.  Card\nserial numbers are scrubbed from output.\n\nBug: 21172095\nChange-Id: I9b2713dafdfdfcf5d97bf1bc21841f39409a7e54\n"
    },
    {
      "commit": "1bfb375f77c093a8e16bef4ddeab2681ca126d56",
      "tree": "14d923468ef5ad85b804cb9939dd4ee889a4f826",
      "parents": [
        "b0667870ff036c598486a8ec87ad2bbe321b2a20"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Apr 29 15:22:23 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Apr 29 17:22:22 2015 -0700"
      },
      "message": "Update primary symlinks after mounting.\n\nSince otherwise we might have a stale path.\n\nBug: 19993667\nChange-Id: I099e3dc0c5aa9ab6820cded4f2ae7fd6bf18ea40\n"
    },
    {
      "commit": "c98d1f5883ccc0eb7e424b95556fc13af15d2dfe",
      "tree": "a0e8b44a301aecf7fa2dcb1a39116a198d68aaba",
      "parents": [
        "1d6fbcc389ecb9f418076e8ab5f4c93a5d911de9",
        "85c7c08e2511509a306c3a5b202ceda922f5f2b5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Apr 25 17:24:04 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sat Apr 25 17:24:04 2015 +0000"
      },
      "message": "am 85c7c08e: am d5aa67cc: Merge \"Wait for completion of device mapping in mountObb\"\n\n* commit \u002785c7c08e2511509a306c3a5b202ceda922f5f2b5\u0027:\n  Wait for completion of device mapping in mountObb\n"
    },
    {
      "commit": "476a627e5562fbe004300d9243927b77c42aff57",
      "tree": "30e81239f6af783dd9eb966061366a152a71508f",
      "parents": [
        "f8c905e043cbeb76bf0d88dff5b5676f4e00f71c"
      ],
      "author": {
        "name": "yoshiyuki hama",
        "email": "yoshiyuki.hama@sonymobile.com",
        "time": "Wed Jan 28 16:37:23 2015 +0900"
      },
      "committer": {
        "name": "Johan Redestig",
        "email": "johan.redestig@sonymobile.com",
        "time": "Sat Apr 25 12:13:17 2015 +0200"
      },
      "message": "Wait for completion of device mapping in mountObb\n\nThe VolumeManager::mountObb() creates a mapping between\na loopback device and a dm device. However the device-mapper\ncarries it out asynchronously, so there is a possibility that\nVold accesses to the dm device which is being built. Added\nwaiting for completion of the mapping in that function, like\nmountAsec().\n\nTo verify install FrameworksCoreTests.apk and do:\n\n  adb shell am instrument -r -w -e class android.os.storage.\\\n  StorageManagerIntegrationTest#testMountTwoEncryptedObb \\\n  com.android.frameworks.coretests/android.test.\\\n  InstrumentationTestRunner\n\nChange-Id: If42f4b7494bb2f8a8b72d106ad84b3e3bf91fd9b\n"
    },
    {
      "commit": "c8e04c5a8285de07d2c84bfbda8eda2c14a9457d",
      "tree": "480347954da9f246b6f3a4ca0521dc17c60f0c94",
      "parents": [
        "f3ee200303f632d940588926f9d31d1e1d51a5c6"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Apr 21 12:14:17 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Apr 21 12:24:57 2015 -0700"
      },
      "message": "Wider volume mutation lock, move force adoptable.\n\nWe eventually should move back to per-disk locks, but use a giant\nlock to keep development rolling forward.  Also move force adoptable\nflag to framework since, since encrypted devices don\u0027t have persisted\nproperties loaded early during boot.\n\nBug: 19993667\nChange-Id: Ifa3016ef41b038f8f71fc30bc81596cfd21dcd2a\n"
    },
    {
      "commit": "f3ee200303f632d940588926f9d31d1e1d51a5c6",
      "tree": "519bce3df0ed9edaa9f4aaa3ea044c7b2ee5d905",
      "parents": [
        "613b26f8e3f71429945924837e3713dc73ce45d6"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Apr 19 15:55:42 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Apr 19 15:55:42 2015 -0700"
      },
      "message": "Handle *ALL* the SCSI disks!\n\nBug: 19993667\nChange-Id: I47099c262686127f82dd376570d49cf0ad119842\n"
    },
    {
      "commit": "f1b996df6f8283aac6953b22bd9e2496d8c30c86",
      "tree": "24ca29ed7757baa9bf545087dbbf5ba88000b1d3",
      "parents": [
        "7d9d0118658648d85c6ce649a9f8d2893a7b5a78"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Apr 17 17:35:20 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Apr 17 17:43:56 2015 -0700"
      },
      "message": "Volumes know parent disks; unsupported disks.\n\nThis is cleaner and more direct than the reverse of having the disk\npublish child volume membership.  Rename state constants to match\npublic API.  Add state representing bad removal.  Make it clear that\nvolume flags are related to mounting.\n\nSend new unsupported disk event when we finish scanning an entire\ndisk and have no meaningful volumes.\n\nBug: 19993667\nChange-Id: I08a91452ff561171a484d1da5745293ec893aec0\n"
    },
    {
      "commit": "7d9d0118658648d85c6ce649a9f8d2893a7b5a78",
      "tree": "1e1c87e1c9a033a480ade777076328d9bd77d8c3",
      "parents": [
        "ffeb0079782896121785692157804b4cc12daddb"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Apr 14 23:14:23 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Apr 14 23:14:23 2015 -0700"
      },
      "message": "Lock while partitioning.\n\nOtherwise we get really excited and trip over ourselves while\npartitions are still being created.\n\nBug: 19993667\nChange-Id: I034e56b3063a71d73f9311a945c05ea2ae255f7d\n"
    },
    {
      "commit": "3161fb3702830b586b2e36fa9ca4519f59f951b4",
      "tree": "9f4d31d9913019f4a422b3e382fe3b57e16a2c17",
      "parents": [
        "ce6a913aeac7db94a41362c63bab74092767bb3e"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Apr 12 16:03:33 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Apr 12 16:03:40 2015 -0700"
      },
      "message": "Emulated volumes above private volumes.\n\nWhen a private volume is mounted, create an emulated volume above it\nhosted at the /media path on that device.  That emulated volume is\nautomatically torn down when unmounting the private volume.\n\nAdd \"removed\" state for volume, which signals to framework that\nmedia has left the building, send when the volume is destroyed.\n\nBug: 19993667\nChange-Id: I1f82b51de578ac5cfcc5d7b9a6fb44f6f25c775c\n"
    },
    {
      "commit": "ce6a913aeac7db94a41362c63bab74092767bb3e",
      "tree": "43d1bd0f9c02fa38370c84ce57573062f15e0671",
      "parents": [
        "389672737673f9c695ac70464a0f8656908d20fd"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Apr 08 21:07:21 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Apr 11 08:48:13 2015 -0700"
      },
      "message": "Exclusive exec() path, format after partition.\n\nSadly setexeccon() is process global, so we need to carefully ensure\nthat all exec() are mutually exclusive to avoid transitioning into\nunwanted domains.  Also, because we have several threads floating\naround, we need to guard all our FDs with O_CLOEXEC.\n\nFormat all newly created volumes immediately after partitioning,\nbut silence all events emitted from those volumes to prevent the\nframework from getting all excited.  Unify all notify events under a\nsingle codepath to make them easy to silence.\n\nSent SIGINT before escalating to SIGTERM when unmounting.\n\nBug: 19993667\nChange-Id: Idc6c806afc7919a004a93e2240b42884f6b52d6b\n"
    },
    {
      "commit": "9f18fe7807a4e4089778243dbbd08d154ec15540",
      "tree": "fb3c625c47ddd0d7f6d2ba555f73c1c2b52f547e",
      "parents": [
        "f7e86ead9f0217283e547a6fa8e6b3405e91af1d"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Apr 01 23:32:18 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Apr 01 23:33:26 2015 -0700"
      },
      "message": "Remove unused code.\n\nBug: 19993667\nChange-Id: I1f6519655c5a366eca25e2329e1bf95d81b3bf8c\n"
    },
    {
      "commit": "9c48498f4529f623650c56d03e63324c8d813032",
      "tree": "24c7b2caf17e7c1d18ff6f31410ad85a4ee94245",
      "parents": [
        "38cfc028607a6756ac7d37200182724f033375d8"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Mar 31 10:35:33 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Apr 01 10:45:05 2015 -0700"
      },
      "message": "Support for private (adopted) volumes.\n\nThis adds support for private volumes which is just a filesystem\nwrapped in a dm-crypt layer.  For now we\u0027re using the exact same\nconfiguration as internal encryption (aes-cbc-essiv:sha256), but we\ndon\u0027t store any key material on the removable media.  Instead, we\nstore the key on internal storage, and use the GPT partition GUID\nto identify which key should be used.\n\nThis means that private external storage is effectively as secure as\nthe internal storage of the device.  That is, if the internal storage\nis encrypted, then our external storage key is also encrypted.\n\nWhen partitioning disks, we now support a \"private\" mode which has\na PrivateVolume partition, and a currently unused 16MB metadata\npartition reserved for future use.  It also supports a \"mixed\" mode\nwhich creates both a PublicVolume and PrivateVolume on the same\ndisk.  Mixed mode is currently experimental.\n\nFor now, just add ext4 support to PrivateVolume; we\u0027ll look at f2fs\nin a future change.  Add VolumeBase lifecycle for setting up crypto\nmappings, and extract blkid logic into shared method.  Sprinkle some\nmore \"static\" around the cryptfs code to improve invariants.\n\nBug: 19993667\nChange-Id: Ibd1df6250735b706959a1eb9d9f7219ea85912a0\n"
    },
    {
      "commit": "36801cccf27152c9eca5aab6ba3527221525110f",
      "tree": "3020e87ca409ad34255d77cc0b6403b9bc5a0b80",
      "parents": [
        "2a8c10965a8a9e17fb290ac5acba2daf936ff1bb"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Mar 13 16:09:20 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Mar 30 19:46:31 2015 -0700"
      },
      "message": "Progress towards dynamic storage support.\n\nWire up new Disk and VolumeBase objects and events to start replacing\nolder DirectVolume code.  Use filesystem UUID as visible PublicVolume\nname to be more deterministic.\n\nWhen starting, create DiskSource instances based on fstab, and watch\nfor kernel devices to appear.  Turn matching devices into Disk\nobjects, scan for partitions, and create any relevant VolumeBase\nobjects.  Broadcast all of these events towards userspace so the\nframework can decide what to mount.\n\nKeep track of the primary VolumeBase, and update the new per-user\n/storage/self/primary symlink for all started users.\n\nProvide a reset command that framework uses to start from a known\nstate when runtime is restarted.  When vold is unexpectedly killed,\ntry recovering by unmounting everything under /mnt and /storage\nbefore moving forward.\n\nRemove UMS sharing support for now, since no current devices support\nit; MTP is the recommended solution going forward because it offers\nbetter multi-user support.\n\nSwitch killProcessesWithOpenFiles() to directly take signal.  Fix\none SOCK_CLOEXEC bug, but SELinux says there are more lurking.\n\nBug: 19993667\nChange-Id: I2dad1303aa4667ec14c52f774e2a28b3c1c1ff6d\n"
    },
    {
      "commit": "14eab550e8a4f28889cc9ffbb92ddff8f18c4f03",
      "tree": "3e5150c3d7c8a3a3ed63740a8c565ec3aab55b88",
      "parents": [
        "8120c3d1b2a8b4c6570c36bcdaf7c55392f5fa45"
      ],
      "author": {
        "name": "Hiroaki Miyazawa",
        "email": "hiroaki.miyazawa@sonymobile.com",
        "time": "Wed Feb 04 13:29:15 2015 +0900"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 30 11:28:11 2015 -0700"
      },
      "message": "Fixed type mismatch for ioctl(BLKGETSIZE)\n\nioctl(BLKGETSIZE) expects unsigned long\n(8 bytes on 64 bit environment).\n\nThis is fixing fails in android.os.storage.StorageManagerIntegrationTest\n(in FrameworkCoreTests).\n\nTo verify, install FrameworksCoreTests.apk and do:\n\nadb shell am instrument -r -w -e class android.os.storage.\\\nStorageManagerIntegrationTest#testMountSingleEncryptedObb \\\ncom.android.frameworks.coretests/android.test.InstrumentationTestRunner\n\nChange-Id: Ib6d5c7490c02521c93f107c35ad0aac49f6a3f1a\n"
    },
    {
      "commit": "25e581a11c2752a9fe857c4859469f367d53f35e",
      "tree": "22d9c8a6fd90f78dd6f120324085e22ef0969d60",
      "parents": [
        "f805a8b3a917b163c789f1ad4b272560f98eb6f1"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Feb 06 08:55:08 2015 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Feb 06 08:55:08 2015 -0800"
      },
      "message": "VolumeManager: don\u0027t use faccessat(AT_SYMLINK_NOFOLLOW)\n\nDon\u0027t use faccessat(AT_SYMLINK_NOFOLLOW). In Android, AT_SYMLINK_NOFOLLOW\nis ignored. In glibc, it returns counter intuitive results when a\nsymbolic link is encountered, returning true all the time even though\nan open(O_NOFOLLOW) will eventually fail.\n\nInstead, stat the file and check to see if it\u0027s a regular file,\nnot a directory or symlink or some other weirdness.\n\nIn addition, fix a bug where isAsecInDirectory would return\ntrue (\"-1\") if the asec directory didn\u0027t exist. It should return\nfalse.\n\nBug: 18867827\nChange-Id: I33d90e9095fad36ce0f83fde105b70f72e4eaef4\n"
    },
    {
      "commit": "d1104f75a736210a95ba890473d78e8dfc8b8915",
      "tree": "401e8dbd768050c65889e511be8f06391035dd09",
      "parents": [
        "ac2bbd08c61e7412912613605d3e561eb22c41c1"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Jan 02 13:28:28 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Jan 06 09:53:12 2015 -0800"
      },
      "message": "Use getmntent when accessing /proc/mounts.\n\nBug: 18887435\nChange-Id: Ibcb446fac954d9c42ebdfc4b684e6f3503337ab4\n"
    },
    {
      "commit": "8439dc9fd569794b1a31f67cf43d9212de33eecc",
      "tree": "e76ac976d7ffef325c2a5f91e8fdc379a028e3b8",
      "parents": [
        "a20bb17e4c6095a77425418d7eb0c1ceb50d05f7"
      ],
      "author": {
        "name": "Tim Murray",
        "email": "timmurray@google.com",
        "time": "Mon Dec 15 11:56:11 2014 -0800"
      },
      "committer": {
        "name": "Tim Murray",
        "email": "timmurray@google.com",
        "time": "Thu Dec 18 00:21:21 2014 +0000"
      },
      "message": "Make vold compile with -Werror -Wall.\n\n-Wno-missing-field-initializers is used as well, but that is an\noverzealous warning from initializing structs with {0} and not a\nreal warning.\n\nbug 18736778 and 16868177\n\nChange-Id: Iffde89cd7200d9a11193e1614f1819f9fcace30a"
    },
    {
      "commit": "60dec16c5026d29a52791ad790860d247f47f8f2",
      "tree": "ea0cae52b99eefcdd5a97d5df838a72f22a227e0",
      "parents": [
        "74f29f1df7d12c0cc06e9d6685adf15e757d8eda"
      ],
      "author": {
        "name": "Paul Lawrence",
        "email": "paullawrence@google.com",
        "time": "Tue Sep 02 10:52:15 2014 -0700"
      },
      "committer": {
        "name": "JP Abgrall",
        "email": "jpa@google.com",
        "time": "Tue Sep 02 18:25:26 2014 +0000"
      },
      "message": "Correctly remove asecs for full disk encryption\n\nPreviously this would fail if the framework wasn\u0027t stopped. The failure\nwould then stop full disk encryption. The fact that the unmount worked,\nhowever, would then stop the second attempt from achieving anything.\n\nFix in line with current retry philosophy\n\nWe still need to figure out why Devmapper::destroy() fails at first.\n\nBug: 17301843\nChange-Id: I405a36c832ccdebf2d904bef77f15eea174a6bfb"
    },
    {
      "commit": "43ed123d3fc1a3edf3660cd0e2528e971abc399e",
      "tree": "43206673662ffd45662fcf4ae13d5e0e4d8bdf22",
      "parents": [
        "e82df164e8128ec9df0072c4a4f3d92e79a0f5f4"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Aug 22 12:29:05 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Aug 22 15:39:41 2014 -0700"
      },
      "message": "ASEC resize tweaking, allow read-write mounting.\n\nResize is no-op when sector count is unchanged; the caller can\u0027t\nanticipate how vold does its sector calculations.\n\nAfter resizing, we need to mount the container read-write, so allow\nthe caller to request \"ro\" or \"rw\" mode.\n\nHandle ENOTSUP when trying to fallocate() on some filesystems\n\nBug: 16514385\nChange-Id: I0d3a378280d4c36d14f8108ff428102283d583fa\n"
    },
    {
      "commit": "40b64a684124809132e04e3c499aa1e101fe808f",
      "tree": "43ad9ef4f7ba12ba1956629a5f13bc5cd1dde46d",
      "parents": [
        "e068a491c2413aeaf4ffde562dc88dbc32db6067"
      ],
      "author": {
        "name": "JP Abgrall",
        "email": "jpa@google.com",
        "time": "Thu Jul 24 18:02:16 2014 -0700"
      },
      "committer": {
        "name": "Todd Poynor",
        "email": "toddpoynor@google.com",
        "time": "Fri Jul 25 01:46:26 2014 +0000"
      },
      "message": "vold: support \"volume list [broadcast]\" command\n\nSometimes when an sdcard is already mounted,\nsome info like uuid and label are not re-broadcast to new listeners.\nThe extra argument to list allows late listeners to catch up by asking\nvolume list to broadcast that info again.\n\nBug: 16253597\nBug: 16306775\nChange-Id: Ie7d0c1132c22d307a5b2a0e50075a3716138d00b\nSigned-off-by: Benson Huang \u003cbenson.huang@mediatek.com\u003e\n(cherry picked from commit 85f4700f44170b772697e627b3075dcb9137e1b7)\n"
    },
    {
      "commit": "e9196fecbb08ead0b5dcdf1b38b81a0419c24bf4",
      "tree": "5928eeb99594bcdc8a22a5e0d87c8653f9f5e507",
      "parents": [
        "fcd34a0ddd45db83b7bc71ff47cba9b789089fdd"
      ],
      "author": {
        "name": "Daniel Rosenberg",
        "email": "drosen@google.com",
        "time": "Tue Jun 10 17:16:03 2014 -0700"
      },
      "committer": {
        "name": "Daniel Rosenberg",
        "email": "drosen@google.com",
        "time": "Wed Jun 11 00:50:53 2014 +0000"
      },
      "message": "Increase asec image size for reflecting ext4 reserved clusters\n\nFrom Shawn Heo\u0027s patch:\n\nExt4 introduced reserved clusters to prevent costly zeroout, or\nunexpected ENOSPC. The size is 2% or 4096 clusters, whichever\nis smaller (http://lwn.net/Articles/546473/).\n\nSo, we need to allocate additionally this amount of free space\nto asecs when vold create asec images. This is required when\nAndroid runs on Linux kernel 3.10 or later.\n\nsee: https://android-review.git.corp.google.com/#/c/96160\n\nChange-Id: Iacff16b8cf0314493c355fa741bcfa519f744d6c\nSigned-off-by: Daniel Rosenberg \u003cdrosen@google.com\u003e\n"
    },
    {
      "commit": "fcd34a0ddd45db83b7bc71ff47cba9b789089fdd",
      "tree": "ce4cdd3cb92093f88d2ffec6e3dcc7c06f28bc43",
      "parents": [
        "73d7a02dc6e18b4c0a6f29e8f89b432c1b6cc808"
      ],
      "author": {
        "name": "Daniel Rosenberg",
        "email": "drosen@google.com",
        "time": "Thu May 22 11:23:56 2014 -0700"
      },
      "committer": {
        "name": "Daniel Rosenberg",
        "email": "drosen@google.com",
        "time": "Tue Jun 10 22:15:33 2014 +0000"
      },
      "message": "Added support for ext4 ASEC resizing.\n\nASECs formatted as ext4 can now be resized using vdc asec resize.\nRefactored some common code.\nRequires resize2fs.\n\nChange-Id: Ie78bb6015114a7bc4af42b16d1f299322ffc1e2a\nSigned-off-by: Daniel Rosenberg \u003cdrosen@google.com\u003e\n"
    },
    {
      "commit": "6a74dcaa6e646fea8e00b7c04332fc60fe7e017c",
      "tree": "0edaa03570cab9d3fdc7c35e4658b25bc3349bef",
      "parents": [
        "12e36398b5ec3596b2a310fe594981a86a56c818"
      ],
      "author": {
        "name": "Daniel Rosenberg",
        "email": "drosen@google.com",
        "time": "Fri May 23 13:47:00 2014 -0700"
      },
      "committer": {
        "name": "Daniel Rosenberg",
        "email": "drosen@google.com",
        "time": "Wed May 28 23:23:47 2014 +0000"
      },
      "message": "Fixed bugs with ASEC filesystem.\n\nChanged ext4 to be 4kb aligned, and fat to be 32kb aligned.\nFixed issue that could potentially cause unencrypted ext4\nASECS to overwrite the ASEC super block when filled.\n\nChange-Id: I890426c82ac9cbc65add85a8e3f5063504193c31\nSigned-off-by: Daniel Rosenberg \u003cdrosen@google.com\u003e\n"
    },
    {
      "commit": "27cfee3fa4e44d3a542312938df12cadfad3425e",
      "tree": "77460df468273419556c412b8c2e28cc78c17ce3",
      "parents": [
        "8c008397141bf9a7d619eb2c53452bf3e397da39"
      ],
      "author": {
        "name": "Cylen Yao",
        "email": "cylen.yao@mediatek.com",
        "time": "Fri May 02 19:23:42 2014 +0800"
      },
      "committer": {
        "name": "Todd Poynor",
        "email": "toddpoynor@google.com",
        "time": "Wed May 14 20:42:13 2014 -0700"
      },
      "message": "avoid fs_mkdirs when SD card removed\n\nMust limit vold calls to fs_mkdirs() only when the volume is mounted.\nIf NOT, it will trigger selinux warning as follows.\naudit(1398835637.785:8): avc:  denied  { write } for  pid\u003d137 comm\u003d\"vold\" name\u003d\"sdcard0\" dev\u003d\"rootfs\" ino\u003d3191 scontext\u003du:r:vold:s0 tcontext\u003du:object_r:rootfs:s0 tclass\u003ddir\n\nChange-Id: I1113fc961cbdd8bbd2fcbf740c2f504628c8399d\nSigned-off-by: Cylen Yao \u003ccylen.yao@mediatek.com\u003e\n"
    },
    {
      "commit": "3214d1f5a4dbece12e00f1c122e4c2e291715706",
      "tree": "33ea3bcdeab263b4e707d20c983173760d5159cd",
      "parents": [
        "49dd24c238e86c57e97f919af7fbf8ee3d79b737",
        "3c0d02aa03118713e6e770b54d1c530ff866f156"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Feb 12 23:19:02 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Feb 12 23:19:02 2014 +0000"
      },
      "message": "am 3c0d02aa: Merge \"Convert all selinux_android_restorecon and _setfilecon calls to new API.\"\n\n* commit \u00273c0d02aa03118713e6e770b54d1c530ff866f156\u0027:\n  Convert all selinux_android_restorecon and _setfilecon calls to new API.\n"
    },
    {
      "commit": "5093e6187da9c237c88383540f544c8dbaf37754",
      "tree": "417f330c31d8666a935e06f0c508285552fbce67",
      "parents": [
        "311edc8cb2dd5c86bad49f9696333874b400f9c4"
      ],
      "author": {
        "name": "Stephen Smalley",
        "email": "sds@tycho.nsa.gov",
        "time": "Wed Feb 12 09:43:08 2014 -0500"
      },
      "committer": {
        "name": "Stephen Smalley",
        "email": "sds@tycho.nsa.gov",
        "time": "Wed Feb 12 09:43:08 2014 -0500"
      },
      "message": "Convert all selinux_android_restorecon and _setfilecon calls to new API.\n\nlibselinux selinux_android_restorecon API is changing to the more\ngeneral interface with flags and dropping the older variants.\n\nAlso get rid of the old, no longer used selinux_android_setfilecon API\nand rename selinux_android_setfilecon2 to it as it is the only API in use.\n\nChange-Id: I1e71ec398ccdc24cac4ec76f1b858d0f680f4925\nSigned-off-by: Stephen Smalley \u003csds@tycho.nsa.gov\u003e\n"
    },
    {
      "commit": "ca3593df3d48cb4b51acf89e6df4872b922fd51d",
      "tree": "291e409a67c60f8ca4eed3c4b930279d46fb445c",
      "parents": [
        "e985c9ab10fed452b97138170b4d69288d076b06",
        "311edc8cb2dd5c86bad49f9696333874b400f9c4"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Feb 11 17:20:39 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Feb 11 17:20:39 2014 +0000"
      },
      "message": "am 311edc8c: Merge \"Add SELinux restorecon calls on ASEC containers.\"\n\n* commit \u0027311edc8cb2dd5c86bad49f9696333874b400f9c4\u0027:\n  Add SELinux restorecon calls on ASEC containers.\n"
    },
    {
      "commit": "311edc8cb2dd5c86bad49f9696333874b400f9c4",
      "tree": "c236db10247375777c326f531052e4689cc07266",
      "parents": [
        "1d8e3ce8da962e5ff98d36e75f6b02873fdddb70",
        "b9e3ba56cb4075f894a73b02ee70571456494ac1"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Feb 11 17:13:46 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Feb 11 17:13:46 2014 +0000"
      },
      "message": "Merge \"Add SELinux restorecon calls on ASEC containers.\""
    },
    {
      "commit": "e985c9ab10fed452b97138170b4d69288d076b06",
      "tree": "4aa1732d9fcb8ac175b8bb8a1bdc163f4e4c7d59",
      "parents": [
        "e8e1d80c64db85526a003e88c3dba36ff33dac74",
        "1d8e3ce8da962e5ff98d36e75f6b02873fdddb70"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Feb 07 21:31:53 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Feb 07 21:31:53 2014 +0000"
      },
      "message": "am 1d8e3ce8: Merge \"vold: fix errors inside ALOGV\"\n\n* commit \u00271d8e3ce8da962e5ff98d36e75f6b02873fdddb70\u0027:\n  vold: fix errors inside ALOGV\n"
    },
    {
      "commit": "59846b654e8b4a22a1be11cd21d6c5b81375abd2",
      "tree": "26d5b1f514f8dd0ede70265cbbf2d85300386ee7",
      "parents": [
        "353b45f84fa0bde76c91d338f843ff27c6f646ad"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Feb 06 20:34:29 2014 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Feb 06 20:34:29 2014 -0800"
      },
      "message": "vold: fix errors inside ALOGV\n\nFix errors exposed by adding compile-time checking to disabled ALOGVs.\n\nChange-Id: I29bd6e9a7648ccca02e0e9a96b79ee0ea7b5cfc6\n"
    },
    {
      "commit": "b9e3ba56cb4075f894a73b02ee70571456494ac1",
      "tree": "fb17215150bdf77bba0553b2fe88dfc9898d922b",
      "parents": [
        "353b45f84fa0bde76c91d338f843ff27c6f646ad"
      ],
      "author": {
        "name": "Robert Craig",
        "email": "rpcraig@tycho.ncsc.mil",
        "time": "Tue Feb 04 10:53:00 2014 -0500"
      },
      "committer": {
        "name": "Robert Craig",
        "email": "rpcraig@tycho.ncsc.mil",
        "time": "Thu Feb 06 07:10:43 2014 -0500"
      },
      "message": "Add SELinux restorecon calls on ASEC containers.\n\nThis will allow fine-grained labeling of the\ncontents of ASEC containers. Some of the contents\nneed to be world readable and thus should be\ndistinguishable in policy.\n\nChange-Id: Iefee74214d664acd262edecbb4f981d633ff96ce\nSigned-off-by: rpcraig \u003crpcraig@tycho.ncsc.mil\u003e\n"
    },
    {
      "commit": "e8e1d80c64db85526a003e88c3dba36ff33dac74",
      "tree": "8f180c32b48f92c939737247e35d577e4e7902da",
      "parents": [
        "353b45f84fa0bde76c91d338f843ff27c6f646ad",
        "4d5d99ce39b5edd0b78c47a93563aed6b3d56356"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Jan 28 14:11:06 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jan 28 14:11:06 2014 +0000"
      },
      "message": "am 4d5d99ce: am 7cf05b15: am 2f0a1d66: am 7f6932df: am 35ab6119: am 3e03bf8a: am fd2dcf90: am f4770dcf: am 0de7c611: Validate asec names.\n\n* commit \u00274d5d99ce39b5edd0b78c47a93563aed6b3d56356\u0027:\n  Validate asec names.\n"
    },
    {
      "commit": "4d5d99ce39b5edd0b78c47a93563aed6b3d56356",
      "tree": "410668855addac1bc22af3a4ea01ac2db20209ac",
      "parents": [
        "7bdfa52d934465e2182e2f1c200c4d8581ad5da6",
        "7cf05b15b76b91aa07182e86a730d7552b23130c"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Jan 28 14:06:00 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jan 28 14:06:00 2014 +0000"
      },
      "message": "am 7cf05b15: am 2f0a1d66: am 7f6932df: am 35ab6119: am 3e03bf8a: am fd2dcf90: am f4770dcf: am 0de7c611: Validate asec names.\n\n* commit \u00277cf05b15b76b91aa07182e86a730d7552b23130c\u0027:\n  Validate asec names.\n"
    },
    {
      "commit": "7f6932df89756f796c3a1f04f748db39a0564561",
      "tree": "9224576834b3c9740052732371bb7e5d359bbe86",
      "parents": [
        "c004cfd80c5b54c971b8854fa1d10ee23be1c868",
        "35ab611925aea29fc4088b5c3de7c8c77d956b8b"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Jan 27 19:25:27 2014 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Jan 27 19:25:27 2014 -0800"
      },
      "message": "am 35ab6119: am 3e03bf8a: am fd2dcf90: am f4770dcf: am 0de7c611: Validate asec names.\n\n* commit \u002735ab611925aea29fc4088b5c3de7c8c77d956b8b\u0027:\n  Validate asec names.\n"
    },
    {
      "commit": "fd2dcf905abd3dc76738fd864e3979bd6e5ce183",
      "tree": "034cf54129f5916fc42a771d14934987bc9dbb21",
      "parents": [
        "3c73fdaad106c2bd5e9d9349aae13f07ec40a547",
        "f4770dcf6ffe2baba16cbb290aba16f735c51962"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Jan 27 19:17:13 2014 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Jan 27 19:17:13 2014 -0800"
      },
      "message": "am f4770dcf: am 0de7c611: Validate asec names.\n\n* commit \u0027f4770dcf6ffe2baba16cbb290aba16f735c51962\u0027:\n  Validate asec names.\n"
    },
    {
      "commit": "0de7c61102611ccd5df1ca48cb733bf037512c6b",
      "tree": "d6b62aff7b3a21d6de7eda7fb245d856b073af85",
      "parents": [
        "eacf7e03d60a2b33ac6cdaa0e01bd6a6fdd9455a"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Jan 27 14:58:06 2014 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Jan 27 15:21:17 2014 -0800"
      },
      "message": "Validate asec names.\n\nMake sure asec names only contain alphanumeric, underscores,\ndots, or dashes. Don\u0027t allow double dots.\n\nBug: 12504045\n\n(cherry picked from commit 669626096513cf741646cf18a9e8ba246d359596)\n\nChange-Id: Ia9d04f373aa95878b2e81584c4167dc2d4aa0c78\n"
    },
    {
      "commit": "346c5b20cbbced7edacf240015c4a89e5b2ca44f",
      "tree": "a23ebe0cf909eda18a210b4c3ceed186564c0a8a",
      "parents": [
        "8328e8150f4e7b785785754f2d44794e7bab3577"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Jan 22 23:59:41 2014 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Jan 24 10:42:27 2014 -0800"
      },
      "message": "vold: fix warnings for 64-bit\n\nReplace MINOR(dev_t) and MAJOR(dev_t) with minor and major,\nwhich cast to int.\nCast int to uintptr_t before casting to pointer\n\nChange-Id: I59375518f15d27f400fcd4f8a8dfe5ebdd8350e6\n"
    },
    {
      "commit": "8c2c15b1c611708c85b3f1ba86b6db79c5c004d5",
      "tree": "e154243f38a5a86c9d49d55189540c2ea1f62369",
      "parents": [
        "0de365fc0af30ae48c2037e1057f2a813029a618"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Oct 17 15:17:19 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Oct 17 15:30:30 2013 -0700"
      },
      "message": "Clean up ASEC unmounting on physical storage.\n\nWhen physical devices are unsafely removed, unmountAllAsecsInDir()\nfails to find any ASECs, and leaves them all mounted, preventing the\nrest of volume from going down.\n\nNow we examine all ASEC containers, and remove when on external\nstorage, or when the storage media is no longer found.\n\nBug: 11175082\nChange-Id: Iffa38ea43f7e5ad78b598374ebeb60a8727d99fd\n"
    },
    {
      "commit": "5ab02e787a05eda1d3382654d5496d6c763c2474",
      "tree": "db2149bde46520d37ff45ef0ad522528742ddb1a",
      "parents": [
        "3a941d6812ccf52fd4fe1c1891041c14f25d0b91"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Oct 15 15:22:28 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Oct 16 10:52:29 2013 -0700"
      },
      "message": "DO NOT MERGE. Fix crash in vold\n\nb/11239345\n\nChange-Id: I46a8d6b38e3c093e20e1e5c4f01efc13d1960ad4\n"
    }
  ],
  "next": "ba6ae8db137d012c9b8e11f9f8321c7771698e92"
}
