Retry unmounts in ext4 encryption

Bug: 18151196
Change-Id: I52ca23b2ce3adcff44bd003d4a12243a0bd6ac34
This commit is contained in:
Paul Lawrence 2015-05-05 14:28:25 -07:00
parent 4571383cbf
commit 29b54aab8e
3 changed files with 6 additions and 5 deletions

View file

@ -381,16 +381,14 @@ int e4crypt_restart(const char* path)
std::string tmp_path = std::string() + path + "/tmp_mnt";
// ext4enc:TODO add retry logic
rc = umount(tmp_path.c_str());
rc = wait_and_unmount(tmp_path.c_str(), true);
if (rc) {
SLOGE("umount %s failed with rc %d, msg %s",
tmp_path.c_str(), rc, strerror(errno));
return rc;
}
// ext4enc:TODO add retry logic
rc = umount(path);
rc = wait_and_unmount(path, true);
if (rc) {
SLOGE("umount %s failed with rc %d, msg %s",
path, rc, strerror(errno));

View file

@ -1446,7 +1446,7 @@ static int create_encrypted_random_key(char *passwd, unsigned char *master_key,
return encrypt_master_key(passwd, salt, key_buf, master_key, crypt_ftr);
}
static int wait_and_unmount(char *mountpoint, bool kill)
int wait_and_unmount(const char *mountpoint, bool kill)
{
int i, err, rc;
#define WAIT_UNMOUNT_COUNT 20

View file

@ -26,6 +26,7 @@
* partition.
*/
#include <stdbool.h>
#include <cutils/properties.h>
/* The current cryptfs version */
@ -225,6 +226,8 @@ struct volume_info {
extern "C" {
#endif
int wait_and_unmount(const char *mountpoint, bool kill);
typedef int (*kdf_func)(const char *passwd, const unsigned char *salt,
unsigned char *ikey, void *params);