auto import from //branches/cupcake/...@131421

This commit is contained in:
The Android Open Source Project 2009-02-13 12:57:54 -08:00
parent 13f797da7f
commit 1b8e5a6b14
25 changed files with 674 additions and 267 deletions

View File

@ -22,7 +22,7 @@
#include <fcntl.h>
#include <errno.h>
#include <sys/socket.h>
#include <utils/logger.h>
#include <cutils/logger.h>
#include "sysdeps.h"
#include "adb.h"

46
include/cutils/logger.h Normal file
View File

@ -0,0 +1,46 @@
/* utils/logger.h
**
** Copyright 2007, The Android Open Source Project
**
** This file is dual licensed. It may be redistributed and/or modified
** under the terms of the Apache 2.0 License OR version 2 of the GNU
** General Public License.
*/
#ifndef _UTILS_LOGGER_H
#define _UTILS_LOGGER_H
#include <stdint.h>
struct logger_entry {
uint16_t len; /* length of the payload */
uint16_t __pad; /* no matter what, we get 2 bytes of padding */
int32_t pid; /* generating process's pid */
int32_t tid; /* generating process's tid */
int32_t sec; /* seconds since Epoch */
int32_t nsec; /* nanoseconds */
char msg[0]; /* the entry's payload */
};
#define LOGGER_LOG_MAIN "log/main"
#define LOGGER_LOG_RADIO "log/radio"
#define LOGGER_LOG_EVENTS "log/events"
#define LOGGER_ENTRY_MAX_LEN (4*1024)
#define LOGGER_ENTRY_MAX_PAYLOAD \
(LOGGER_ENTRY_MAX_LEN - sizeof(struct logger_entry))
#ifdef HAVE_IOCTL
#include <sys/ioctl.h>
#define __LOGGERIO 0xAE
#define LOGGER_GET_LOG_BUF_SIZE _IO(__LOGGERIO, 1) /* size of log */
#define LOGGER_GET_LOG_LEN _IO(__LOGGERIO, 2) /* used log len */
#define LOGGER_GET_NEXT_ENTRY_LEN _IO(__LOGGERIO, 3) /* next entry len */
#define LOGGER_FLUSH_LOG _IO(__LOGGERIO, 4) /* flush log */
#endif // HAVE_IOCTL
#endif /* _UTILS_LOGGER_H */

View File

@ -17,8 +17,8 @@
#ifndef _LOGPRINT_H
#define _LOGPRINT_H
#include <utils/Log.h>
#include <utils/logger.h>
#include <cutils/log.h>
#include <cutils/logger.h>
#include <cutils/event_tag_map.h>
#include <pthread.h>

View File

@ -25,7 +25,7 @@
#include <stdlib.h>
#include <stdarg.h>
#include <utils/logger.h>
#include <cutils/logger.h>
#include <cutils/logd.h>
#define LOG_BUF_SIZE 1024

View File

@ -170,14 +170,19 @@ int dhcp_do_request(const char *interface,
*/
int dhcp_stop(const char *interface)
{
char result_prop_name[PROPERTY_KEY_MAX];
const char *ctrl_prop = "ctl.stop";
const char *desired_status = "stopped";
snprintf(result_prop_name, sizeof(result_prop_name), "%s.%s.result",
DHCP_PROP_NAME_PREFIX,
interface);
/* Stop the daemon and wait until it's reported to be stopped */
property_set(ctrl_prop, DAEMON_NAME);
if (wait_for_property(DAEMON_PROP_NAME, desired_status, 5) < 0) {
return -1;
}
property_set(result_prop_name, "failed");
return 0;
}

View File

@ -191,10 +191,23 @@
30030 am_create_service (Service Record|1|5),(Name|3),(Intent|3),(PID|1|5)
# A service is being destroyed
30031 am_destroy_service (Service Record|1|5),(Name|3),(PID|1|5)
# A process has crashed too many times, it is being cleared
30032 am_process_crashed_too_much (Name|3),(PID|1|5)
# An unknown process is trying to attach to the activity manager
30033 am_drop_process (PID|1|5)
# A service has crashed too many times, it is being stopped
30034 am_service_crashed_too_much (Crash Count|1|1),(Component Name|3),(PID|1|5)
# A service is going to be restarted after its process went away
30035 am_schedule_service_restart (Component Name|3),(Time|2|3)
# A client was waiting for a content provider, but its process was lost
30036 am_provider_lost_process (Package Name|3),(UID|1|5),(Name|3)
# Out of memory for surfaces.
31000 wm_no_surface_memory (Window|3),(PID|1|5),(Operation|3)
# Re-connecting to input method service because we haven't received its interface
32000 imf_force_reconnect_ime (IME|4),(Time Since Connect|2|3),(Showing|1|1)
# dvm_gc_info: LIST (LONG, LONG, LONG)
#
# First LONG:

View File

@ -1,7 +1,6 @@
// Copyright 2006 The Android Open Source Project
#include <utils/misc.h>
#include <utils/logger.h>
#include <cutils/logger.h>
#include <cutils/logd.h>
#include <cutils/sockets.h>
#include <cutils/logprint.h>

View File

@ -112,7 +112,7 @@ static boolean CheckFileDescriptorSymLinks(int pid, const char* mountPoint)
{
char name[PATH_MAX];
GetProcessName(pid, name);
LOG_ERROR("process %s (%d) has open file %s\n", name, pid, link);
LOG_ERROR("process %s (%d) has open file %s", name, pid, link);
fileOpen = true;
}
}
@ -140,7 +140,7 @@ static boolean CheckFileMaps(int pid, const char* mountPoint)
{
char name[PATH_MAX];
GetProcessName(pid, name);
LOG_ERROR("process %s (%d) has open file map for %s\n", name, pid, path);
LOG_ERROR("process %s (%d) has open file map for %s", name, pid, path);
mapOpen = true;
}
}
@ -159,7 +159,7 @@ static boolean CheckSymLink(int pid, const char* mountPoint, const char* name, c
{
char name[PATH_MAX];
GetProcessName(pid, name);
LOG_ERROR("process %s (%d) has %s in %s\n", name, pid, message, mountPoint);
LOG_ERROR("process %s (%d) has %s in %s", name, pid, message, mountPoint);
return true;
}
else
@ -182,7 +182,7 @@ void KillProcessesWithOpenFiles(const char* mountPoint, boolean sigkill, int *ex
DIR* dir;
struct dirent* de;
LOG_ERROR("KillProcessesWithOpenFiles %s\n", mountPoint);
LOG_ERROR("KillProcessesWithOpenFiles %s", mountPoint);
dir = opendir("/proc");
if (!dir) return;
@ -205,14 +205,14 @@ void KillProcessesWithOpenFiles(const char* mountPoint, boolean sigkill, int *ex
for (i = 0; i < num_excluded; i++) {
if (pid == excluded[i]) {
LOG_ERROR("I just need a little more TIME captain!\n");
LOG_ERROR("I just need a little more TIME captain!");
hit = true;
break;
}
}
if (!hit) {
LOG_ERROR("Killing process %d\n", pid);
LOG_ERROR("Killing process %d", pid);
kill(pid, (sigkill ? SIGKILL : SIGTERM));
}
}

View File

@ -68,12 +68,12 @@ int blkdev_refresh(blkdev_t *blk)
devpath = blkdev_get_devpath(blk);
if ((fd = open(devpath, O_RDONLY)) < 0) {
LOGE("Unable to open device '%s' (%s)\n", devpath, strerror(errno));
LOGE("Unable to open device '%s' (%s)", devpath, strerror(errno));
return -errno;
}
if (ioctl(fd, BLKGETSIZE, &blk->nr_sec)) {
LOGE("Unable to get device size (%m)\n");
LOGE("Unable to get device size (%m)");
return -errno;
}
close(fd);
@ -84,7 +84,7 @@ int blkdev_refresh(blkdev_t *blk)
*/
devpath = blkdev_get_devpath(blk->disk);
if ((fd = open(devpath, O_RDONLY)) < 0) {
LOGE("Unable to open device '%s' (%s)\n", devpath,
LOGE("Unable to open device '%s' (%s)", devpath,
strerror(errno));
free(devpath);
return -errno;
@ -93,7 +93,7 @@ int blkdev_refresh(blkdev_t *blk)
free(devpath);
if ((rc = read(fd, block, 512)) != 512) {
LOGE("Unable to read device partition table (%d, %s)\n",
LOGE("Unable to read device partition table (%d, %s)",
rc, strerror(errno));
goto out;
}
@ -107,7 +107,7 @@ int blkdev_refresh(blkdev_t *blk)
blk->nr_parts = 0;
if ((block[0x1fe] != 0x55) || (block[0x1ff] != 0xAA)) {
LOG_VOL("Disk %d:%d does not contain a partition table\n",
LOG_VOL("Disk %d:%d does not contain a partition table",
blk->major, blk->minor);
goto out;
}
@ -120,10 +120,10 @@ int blkdev_refresh(blkdev_t *blk)
struct fat_boot_sector *fb = (struct fat_boot_sector *) &block[0];
if (!i && fb->reserved && fb->fats && fat_valid_media(fb->media)) {
LOG_VOL("Detected FAT filesystem in partition table\n");
LOG_VOL("Detected FAT filesystem in partition table");
break;
} else {
LOG_VOL("Partition table looks corrupt\n");
LOG_VOL("Partition table looks corrupt");
break;
}
}
@ -152,9 +152,9 @@ int blkdev_refresh(blkdev_t *blk)
((blk->nr_sec * 512) / 1024) / 1024);
if (blk->type == blkdev_disk)
sprintf(tmp2, " %d partitions\n", blk->nr_parts);
sprintf(tmp2, " %d partitions", blk->nr_parts);
else
sprintf(tmp2, " type 0x%x\n", blk->part_type);
sprintf(tmp2, " type 0x%x", blk->part_type);
strcat(tmp, tmp2);
LOG_VOL(tmp);
@ -176,7 +176,7 @@ static blkdev_t *_blkdev_create(blkdev_t *disk, char *devpath, int major,
struct blkdev_list *list_entry;
if (disk && disk->type != blkdev_disk) {
LOGE("Non disk parent specified for blkdev!\n");
LOGE("Non disk parent specified for blkdev!");
return NULL;
}
@ -220,7 +220,7 @@ static blkdev_t *_blkdev_create(blkdev_t *disk, char *devpath, int major,
sprintf(nodepath, "%s/vold/%d:%d", DEVPATH, major, minor);
if (mknod(nodepath, mode, dev) < 0) {
LOGE("Error making device nodes for '%s' (%s)\n",
LOGE("Error making device nodes for '%s' (%s)",
nodepath, strerror(errno));
}
@ -229,7 +229,7 @@ static blkdev_t *_blkdev_create(blkdev_t *disk, char *devpath, int major,
else if (!strcmp(type, "partition"))
new->type = blkdev_partition;
else {
LOGE("Unknown block device type '%s'\n", type);
LOGE("Unknown block device type '%s'", type);
new->type = blkdev_unknown;
}

View File

@ -51,7 +51,7 @@ int process_framework_command(int socket)
char buffer[101];
if ((rc = read(socket, buffer, sizeof(buffer) -1)) < 0) {
LOGE("Unable to read framework command (%s)\n", strerror(errno));
LOGE("Unable to read framework command (%s)", strerror(errno));
return -errno;
} else if (!rc)
return -ECONNRESET;
@ -74,7 +74,7 @@ static void dispatch_cmd(char *cmd)
{
struct cmd_dispatch *c;
LOG_VOL("dispatch_cmd(%s):\n", cmd);
LOG_VOL("dispatch_cmd(%s):", cmd);
for (c = dispatch_table; c->cmd != NULL; c++) {
if (!strncmp(c->cmd, cmd, strlen(c->cmd))) {
@ -83,7 +83,7 @@ static void dispatch_cmd(char *cmd)
}
}
LOGE("No cmd handlers defined for '%s'\n", cmd);
LOGE("No cmd handlers defined for '%s'", cmd);
}
static int do_send_ums_status(char *cmd)

View File

@ -26,6 +26,7 @@
#include <sys/mount.h>
#include <linux/loop.h>
#include <linux/dm-ioctl.h>
#include <cutils/config_utils.h>
#include <cutils/properties.h>
@ -35,6 +36,167 @@
#define DEBUG_DEVMAPPER 1
static void *_align(void *ptr, unsigned int a)
{
register unsigned long agn = --a;
return (void *) (((unsigned long) ptr + agn) & ~agn);
}
static struct dm_ioctl *_dm_ioctl_setup(struct devmapping *dm, int flags)
{
void *buffer;
void *p;
const size_t min_size = 16 * 1024;
size_t len = sizeof(struct dm_ioctl);
struct dm_ioctl *io;
struct dm_target_spec *tgt;
int i;
char params[1024];
char key[80];
key[0] = '\0';
for (i = 0; i < (int) sizeof(dm->key); i++) {
char tmp[8];
sprintf(tmp, "%02x", dm->key[i]);
strcat(key, tmp);
}
char srcdev[128];
// XXX: Handle non crypt targets and non twofish (use param)
if (dm->src_type == dmsrc_loopback)
strcpy(srcdev, dm->type_data.loop.loop_dev);
else if (dm->src_type == dmsrc_partition)
strcpy(srcdev, dm->type_data.part.part_dev);
sprintf(params, "twofish %s 0 %s 0", key, srcdev);
LOG_VOL("Params = '%s'", params);
if (len < min_size)
len = min_size;
if (!(buffer = malloc(len))) {
LOGE("out of memory");
return NULL;
}
memset(buffer, 0, len);
io = buffer;
tgt = (struct dm_target_spec *) &buffer[sizeof(struct dm_ioctl)];
io->version[0] = 4;
io->version[1] = 0;
io->version[2] = 0;
io->data_size = len;
io->data_start = sizeof(struct dm_ioctl);
io->flags = flags;
io->dev = 0;
io->target_count = 1;
io->event_nr = 1;
strncpy(io->name, dm->target, sizeof(io->name));
tgt->status = 0;
tgt->sector_start = 0;
tgt->length = (dm->size_mb * (1024 * 1024)) / 512;
strncpy(tgt->target_type, "crypt", sizeof(tgt->target_type));
p = buffer + sizeof(struct dm_ioctl) + sizeof(struct dm_target_spec);
strcpy((char *) p, params);
p+= strlen(params) + 1;
p = _align(p, 8);
tgt->next = p - buffer;
return io;
}
static int get_next_available_dm()
{
int i;
for (i = 0; i < 8; i++) {
char path[255];
sprintf(path, "/dev/block/dm-%d", i);
if ((access(path, F_OK) < 0) && (errno == ENOENT))
return i;
}
LOGE("Out of device mapper numbers");
return -1;
}
static int create_devmapping(struct devmapping *dm)
{
struct dm_ioctl *io;
int rc, fd;
#if DEBUG_DEVMAPPER
LOG_VOL("create_devmapping():");
#endif
if (dm->dm_no < 0) {
LOGE("Invalid dm_no set");
return -EINVAL;
}
if ((fd = open("/dev/device-mapper", O_RDWR)) < 0) {
LOGE("Error opening device mapper (%d)", errno);
return -errno;
}
if (!(io = _dm_ioctl_setup(dm, 0))) {
LOGE("Unable to setup ioctl (out of memory)");
close(fd);
return -ENOMEM;
}
if ((rc = ioctl(fd, DM_DEV_CREATE, io)) < 0) {
LOGE("device-mapper create ioctl failed (%d)", errno);
rc = -errno;
goto out_free;
}
free(io);
if (!(io = _dm_ioctl_setup(dm, DM_STATUS_TABLE_FLAG))) {
LOGE("Unable to setup ioctl (out of memory)");
rc = -ENOMEM;
goto out_nofree;
}
if ((rc = ioctl(fd, DM_TABLE_LOAD, io)) < 0) {
LOGE("device-mapper load ioctl failed (%d)", errno);
rc = -errno;
goto out_free;
}
free(io);
if (!(io = _dm_ioctl_setup(dm, 0))) {
LOGE("Unable to setup ioctl (out of memory)");
rc = -ENOMEM;
goto out_nofree;
}
if ((rc = ioctl(fd, DM_DEV_SUSPEND, io)) < 0) {
LOGE("device-mapper resume ioctl failed (%d)", errno);
rc = -errno;
goto out_free;
}
out_free:
free (io);
out_nofree:
close (fd);
return rc;
}
static int loopback_start(struct devmapping *dm)
{
int i;
@ -52,7 +214,7 @@ static int loopback_start(struct devmapping *dm)
sprintf(filename, "/dev/block/loop%d", i);
if ((fd = open(filename, O_RDWR)) < 0) {
LOGE("Unable to open %s (%s)\n", filename, strerror(errno));
LOGE("Unable to open %s (%s)", filename, strerror(errno));
return -errno;
}
@ -63,27 +225,27 @@ static int loopback_start(struct devmapping *dm)
close(fd);
if (rc < 0) {
LOGE("Unable to get loop status for %s (%s)\n", filename,
LOGE("Unable to get loop status for %s (%s)", filename,
strerror(errno));
return -errno;
}
}
if (i == MAX_LOOP) {
LOGE("Out of loop devices\n");
LOGE("Out of loop devices");
return -ENOSPC;
}
int file_fd;
if ((file_fd = open(dm->type_data.loop.loop_src, O_RDWR)) < 0) {
LOGE("Unable to open %s (%s)\n", dm->type_data.loop.loop_src,
LOGE("Unable to open %s (%s)", dm->type_data.loop.loop_src,
strerror(errno));
return -errno;
}
if (ioctl(fd, LOOP_SET_FD, file_fd) < 0) {
LOGE("Error setting up loopback interface (%s)\n", strerror(errno));
LOGE("Error setting up loopback interface (%s)", strerror(errno));
return -errno;
}
@ -94,7 +256,7 @@ static int loopback_start(struct devmapping *dm)
close(file_fd);
#if DEBUG_DEVMAPPER
LOG_VOL("Loop setup on %s for %s\n", dm->type_data.loop.loop_dev,
LOG_VOL("Loop setup on %s for %s", dm->type_data.loop.loop_dev,
dm->type_data.loop.loop_src);
#endif
@ -124,12 +286,17 @@ int devmapper_start(struct devmapping *dm)
/*
* Configure the device mapper
*/
if ((rc = create_devmapping(dm)) < 0) {
LOGE("Failed to create devmapping (%d)", rc);
// XXX: if loopback then tear down
return rc;
}
return 0;
}
struct devmapping *devmapper_init(char *src, char *src_type, uint32_t size_mb,
char *target, char *params, char *tgt_fs)
char *target, char *params, char *tgt_fs, char *mediapath)
{
struct devmapping *dm;
@ -161,8 +328,136 @@ struct devmapping *devmapper_init(char *src, char *src_type, uint32_t size_mb,
dm->target = strdup(target);
dm->params = strdup(params);
dm->tgt_fs = strdup(tgt_fs);
if ((dm->dm_no = get_next_available_dm()) < 0)
goto out_free;
sprintf(mediapath, "/devices/virtual/block/dm-%d", dm->dm_no);
if (!(dm->media = media_create(mediapath,
"unknown",
"unknown",
media_devmapper))) {
LOGE("Unable to create media");
goto out_free;
}
return dm;
out_free:
if (dm->target)
free(dm->target);
if (dm->params)
free(dm->params);
if (dm->tgt_fs)
free(dm->tgt_fs);
free(dm);
return NULL;
}
int devmapper_genesis(struct devmapping *dm)
{
if (dm->src_type == dmsrc_loopback) {
int fd;
LOG_VOL("devmapper_genesis(): Working on %s",
dm->type_data.loop.loop_src);
unlink(dm->type_data.loop.loop_src);
LOG_VOL("devmapper_genesis(): Creating imagefile (%u MB)",
dm->size_mb);
if ((fd = creat(dm->type_data.loop.loop_src, 0600)) < 0) {
LOGE("Error creating imagefile (%s)", strerror(errno));
return -errno;
}
if (ftruncate(fd, (dm->size_mb * (1024 * 1024))) < 0) {
LOGE("Error truncating imagefile (%s)", strerror(errno));
close(fd);
return -errno;
}
close(fd);
} else if (dm->src_type == dmsrc_partition) {
LOGE("partition maps not yet supported");
return -ENOSYS;
}
return devmapper_start(dm);
}
static int destroy_devmapping(struct devmapping *dm)
{
struct dm_ioctl *io;
int dmFd;
int rc = 0;
LOG_VOL("destroy_devmapping():");
if ((dmFd = open("/dev/device-mapper", O_RDWR)) < 0) {
LOGE("Error opening device mapper (%d)", errno);
return -errno;
}
if (!(io = _dm_ioctl_setup(dm, DM_PERSISTENT_DEV_FLAG))) {
LOGE("Unable to setup ioctl (out of memory)");
rc = -ENOMEM;
goto out_nofree;
}
if ((rc = ioctl(dmFd, DM_DEV_REMOVE, io)) < 0) {
LOGE("device-mapper remove ioctl failed (%d)", errno);
rc = -errno;
goto out_free;
}
out_free:
free (io);
out_nofree:
close (dmFd);
return rc;
}
static int loopback_stop(struct devmapping *dm)
{
char devname[255];
int device_fd;
int rc = 0;
LOG_VOL("loopback_stop():");
device_fd = open(dm->type_data.loop.loop_dev, O_RDONLY);
if (device_fd < 0) {
LOG_ERROR("Failed to open loop (%d)", errno);
return -errno;
}
if (ioctl(device_fd, LOOP_CLR_FD, 0) < 0) {
LOG_ERROR("Failed to destroy loop (%d)", errno);
rc = -errno;
}
close(device_fd);
return rc;
}
int devmapper_stop(struct devmapping *dm)
{
int rc;
LOG_VOL("devmapper_stop():");
if ((rc = destroy_devmapping(dm)))
return rc;
if (dm->src_type == dmsrc_loopback) {
if ((rc = loopback_stop(dm)))
return rc;
} else if (dm->src_type == dmsrc_partition) {
LOGE("partition maps not yet supported");
return -ENOSYS;
}
return 0;
}

View File

@ -56,9 +56,15 @@ struct devmapping {
char *target;
char *params;
char *tgt_fs;
unsigned char key[16];
int dm_no;
media_t *media;
};
struct devmapping *devmapper_init(char *, char *, unsigned int, char *, char *, char*);
struct devmapping *devmapper_init(char *, char *, unsigned int, char *, char *, char *, char *);
int devmapper_start(struct devmapping *);
int devmapper_stop(struct devmapping *);
int devmapper_genesis(struct devmapping *);
#endif

View File

@ -27,31 +27,44 @@
#include "logwrapper.h"
static char MKDOSFS_PATH[] = "/system/bin/mkdosfs";
static char MKE2FS_PATH[] = "/system/bin/mke2fs";
int format_partition(blkdev_t *part)
int format_partition(blkdev_t *part, char *type)
{
char *devpath;
char *args[7];
int rc = -EINVAL;
devpath = blkdev_get_devpath(part);
args[0] = MKDOSFS_PATH;
args[1] = "-F 32";
args[2] = "-c 32";
args[3] = "-n 2";
args[4] = "-O android";
args[5] = devpath;
args[6] = NULL;
int rc = logwrap(6, args);
if (!strcmp(type, FORMAT_TYPE_FAT32)) {
char *args[7];
args[0] = MKDOSFS_PATH;
args[1] = "-F 32";
args[2] = "-c 32";
args[3] = "-n 2";
args[4] = "-O android";
args[5] = devpath;
args[6] = NULL;
rc = logwrap(6, args);
} else {
char *args[7];
args[0] = MKE2FS_PATH;
args[1] = "-b 4096";
args[2] = "-m 1";
args[3] = "-L android";
args[4] = "-v";
args[5] = devpath;
args[6] = NULL;
rc = logwrap(6, args);
}
free(devpath);
if (rc == 0) {
LOG_VOL("Filesystem formatted OK\n");
LOG_VOL("Filesystem formatted OK");
return 0;
} else {
LOGE("Format failed (unknokwn exit code %d)\n", rc);
LOGE("Format failed (unknokwn exit code %d)", rc);
return -EIO;
}
return 0;
@ -79,19 +92,19 @@ int initialize_mbr(blkdev_t *disk)
dos_partition_enc(block + DOSPARTOFF, &part);
if ((fd = open(devpath, O_RDWR)) < 0) {
LOGE("Error opening disk file (%s)\n", strerror(errno));
LOGE("Error opening disk file (%s)", strerror(errno));
return -errno;
}
free(devpath);
if (write(fd, block, sizeof(block)) < 0) {
LOGE("Error writing MBR (%s)\n", strerror(errno));
LOGE("Error writing MBR (%s)", strerror(errno));
close(fd);
return -errno;
}
if (ioctl(fd, BLKRRPART, NULL) < 0) {
LOGE("Error re-reading partition table (%s)\n", strerror(errno));
LOGE("Error re-reading partition table (%s)", strerror(errno));
close(fd);
return -errno;
}

View File

@ -18,6 +18,9 @@
#ifndef _FORMAT_H
#define _FORMAT_H
int format_partition(blkdev_t *part);
#define FORMAT_TYPE_EXT2 "ext2"
#define FORMAT_TYPE_FAT32 "fat32"
int format_partition(blkdev_t *part, char *type);
int initialize_mbr(blkdev_t *disk);
#endif

View File

@ -95,7 +95,7 @@ void child(int argc, char* argv[]) {
// XXX: PROTECT FROM VIKING KILLER
if (execvp(argv_child[0], argv_child)) {
LOG(LOG_ERROR, "logwrapper",
"executing %s failed: %s\n", argv_child[0], strerror(errno));
"executing %s failed: %s", argv_child[0], strerror(errno));
exit(-1);
}
}
@ -111,24 +111,24 @@ int logwrap(int argc, char* argv[], pid_t *childPid)
/* Use ptty instead of socketpair so that STDOUT is not buffered */
parent_ptty = open("/dev/ptmx", O_RDWR);
if (parent_ptty < 0) {
LOG(LOG_ERROR, "logwrapper", "Cannot create parent ptty\n");
LOG(LOG_ERROR, "logwrapper", "Cannot create parent ptty");
return -errno;
}
if (grantpt(parent_ptty) || unlockpt(parent_ptty) ||
((child_devname = (char*)ptsname(parent_ptty)) == 0)) {
LOG(LOG_ERROR, "logwrapper", "Problem with /dev/ptmx\n");
LOG(LOG_ERROR, "logwrapper", "Problem with /dev/ptmx");
return -1;
}
pid = fork();
if (pid < 0) {
LOG(LOG_ERROR, "logwrapper", "Failed to fork\n");
LOG(LOG_ERROR, "logwrapper", "Failed to fork");
return -errno;
} else if (pid == 0) {
child_ptty = open(child_devname, O_RDWR);
if (child_ptty < 0) {
LOG(LOG_ERROR, "logwrapper", "Problem with child ptty\n");
LOG(LOG_ERROR, "logwrapper", "Problem with child ptty");
return -errno;
}

View File

@ -105,7 +105,7 @@ media_t *media_lookup_by_path(char *devpath, boolean fuzzy_match)
list_scan = list_scan->next;
}
#if DEBUG_MEDIA
LOG_VOL("media_lookup_by_path(): No media found @ %s\n", devpath);
LOG_VOL("media_lookup_by_path(): No media found @ %s", devpath);
#endif
return NULL;
}
@ -115,7 +115,7 @@ int media_add_blkdev(media_t *card, blkdev_t *dev)
blkdev_list_t *list_entry;
if (!(list_entry = malloc(sizeof(blkdev_list_t)))) {
LOGE("Out of memory\n");
LOGE("Out of memory");
return -ENOMEM;
}

View File

@ -43,7 +43,7 @@ int mmc_bootstrap()
struct dirent *de;
if (!(d = opendir(SYSFS_CLASS_MMC_PATH))) {
LOG_ERROR("Unable to open '%s' (%m)\n", SYSFS_CLASS_MMC_PATH);
LOG_ERROR("Unable to open '%s' (%m)", SYSFS_CLASS_MMC_PATH);
return -errno;
}
@ -55,7 +55,7 @@ int mmc_bootstrap()
sprintf(tmp, "%s/%s", SYSFS_CLASS_MMC_PATH, de->d_name);
if (mmc_bootstrap_controller(tmp))
LOG_ERROR("Error bootstrapping controller '%s' (%m)\n", tmp);
LOG_ERROR("Error bootstrapping controller '%s' (%m)", tmp);
}
closedir(d);
@ -69,10 +69,10 @@ static int mmc_bootstrap_controller(char *sysfs_path)
struct dirent *de;
#if DEBUG_BOOTSTRAP
LOG_VOL("bootstrap_controller(%s):\n", sysfs_path);
LOG_VOL("bootstrap_controller(%s):", sysfs_path);
#endif
if (!(d = opendir(sysfs_path))) {
LOG_ERROR("Unable to open '%s' (%m)\n", sysfs_path);
LOG_ERROR("Unable to open '%s' (%m)", sysfs_path);
return -errno;
}
@ -92,7 +92,7 @@ static int mmc_bootstrap_controller(char *sysfs_path)
sprintf(tmp, "%s/%s", sysfs_path, de->d_name);
if (mmc_bootstrap_card(tmp) < 0)
LOG_ERROR("Error bootstrapping card '%s' (%m)\n", tmp);
LOG_ERROR("Error bootstrapping card '%s' (%m)", tmp);
} // while
closedir(d);
@ -111,29 +111,29 @@ static int mmc_bootstrap_card(char *sysfs_path)
ssize_t sz;
#if DEBUG_BOOTSTRAP
LOG_VOL("bootstrap_card(%s):\n", sysfs_path);
LOG_VOL("bootstrap_card(%s):", sysfs_path);
#endif
/*
* sysfs_path is based on /sys/class, but we want the actual device class
*/
if (!getcwd(saved_cwd, sizeof(saved_cwd))) {
LOGE("Error getting working dir path\n");
LOGE("Error getting working dir path");
return -errno;
}
if (chdir(sysfs_path) < 0) {
LOGE("Unable to chdir to %s (%m)\n", sysfs_path);
LOGE("Unable to chdir to %s (%m)", sysfs_path);
return -errno;
}
if (!getcwd(new_cwd, sizeof(new_cwd))) {
LOGE("Buffer too small for device path\n");
LOGE("Buffer too small for device path");
return -errno;
}
if (chdir(saved_cwd) < 0) {
LOGE("Unable to restore working dir\n");
LOGE("Unable to restore working dir");
return -errno;
}
@ -162,7 +162,7 @@ static int mmc_bootstrap_card(char *sysfs_path)
uevent_params[3] = (char *) NULL;
if (simulate_uevent("mmc", devpath, "add", uevent_params) < 0) {
LOGE("Error simulating uevent (%m)\n");
LOGE("Error simulating uevent (%m)");
return -errno;
}
@ -174,7 +174,7 @@ static int mmc_bootstrap_card(char *sysfs_path)
sprintf(filename, "/sys%s/block", devpath);
if (!access(filename, F_OK)) {
if (mmc_bootstrap_block(tmp)) {
LOGE("Error bootstrapping block @ %s\n", tmp);
LOGE("Error bootstrapping block @ %s", tmp);
}
}
@ -188,13 +188,13 @@ static int mmc_bootstrap_block(char *devpath)
struct dirent *de;
#if DEBUG_BOOTSTRAP
LOG_VOL("mmc_bootstrap_block(%s):\n", devpath);
LOG_VOL("mmc_bootstrap_block(%s):", devpath);
#endif
sprintf(blockdir_path, "/sys%s", devpath);
if (!(d = opendir(blockdir_path))) {
LOGE("Failed to opendir %s\n", devpath);
LOGE("Failed to opendir %s", devpath);
return -errno;
}
@ -205,7 +205,7 @@ static int mmc_bootstrap_block(char *devpath)
continue;
sprintf(tmp, "%s/%s", devpath, de->d_name);
if (mmc_bootstrap_mmcblk(tmp))
LOGE("Error bootstraping mmcblk @ %s\n", tmp);
LOGE("Error bootstraping mmcblk @ %s", tmp);
}
closedir(d);
return 0;
@ -218,11 +218,11 @@ static int mmc_bootstrap_mmcblk(char *devpath)
int rc;
#if DEBUG_BOOTSTRAP
LOG_VOL("mmc_bootstrap_mmcblk(%s):\n", devpath);
LOG_VOL("mmc_bootstrap_mmcblk(%s):", devpath);
#endif
if ((rc = mmc_bootstrap_mmcblk_partition(devpath))) {
LOGE("Error bootstrapping mmcblk partition '%s'\n", devpath);
LOGE("Error bootstrapping mmcblk partition '%s'", devpath);
return rc;
}
@ -238,7 +238,7 @@ static int mmc_bootstrap_mmcblk(char *devpath)
sprintf(part_devpath, "%s/%sp%d", devpath, mmcblk_devname, part_no);
if (mmc_bootstrap_mmcblk_partition(part_devpath))
LOGE("Error bootstrapping mmcblk partition '%s'\n", part_devpath);
LOGE("Error bootstrapping mmcblk partition '%s'", part_devpath);
}
}
@ -256,7 +256,7 @@ static int mmc_bootstrap_mmcblk_partition(char *devpath)
char line[255];
#if DEBUG_BOOTSTRAP
LOG_VOL("mmc_bootstrap_mmcblk_partition(%s):\n", devpath);
LOG_VOL("mmc_bootstrap_mmcblk_partition(%s):", devpath);
#endif
sprintf(tmp, "DEVPATH=%s", devpath);
@ -264,7 +264,7 @@ static int mmc_bootstrap_mmcblk_partition(char *devpath)
sprintf(filename, "/sys%s/uevent", devpath);
if (!(fp = fopen(filename, "r"))) {
LOGE("Unable to open '%s' (%m)\n", filename);
LOGE("Unable to open '%s' (%m)", filename);
return -errno;
}
@ -280,13 +280,13 @@ static int mmc_bootstrap_mmcblk_partition(char *devpath)
fclose(fp);
if (!uevent_params[1] || !uevent_params[2] || !uevent_params[3]) {
LOGE("mmcblk uevent missing required params\n");
LOGE("mmcblk uevent missing required params");
return -1;
}
uevent_params[4] = '\0';
if (simulate_uevent("block", devpath, "add", uevent_params) < 0) {
LOGE("Error simulating uevent (%m)\n");
LOGE("Error simulating uevent (%m)");
return -errno;
}
return 0;

View File

@ -35,7 +35,7 @@ int switch_bootstrap()
struct dirent *de;
if (!(d = opendir(SYSFS_CLASS_SWITCH_PATH))) {
LOG_ERROR("Unable to open '%s' (%m)\n", SYSFS_CLASS_SWITCH_PATH);
LOG_ERROR("Unable to open '%s' (%m)", SYSFS_CLASS_SWITCH_PATH);
return -errno;
}
@ -47,7 +47,7 @@ int switch_bootstrap()
sprintf(tmp, "%s/%s", SYSFS_CLASS_SWITCH_PATH, de->d_name);
if (mmc_bootstrap_switch(tmp))
LOG_ERROR("Error bootstrapping switch '%s' (%m)\n", tmp);
LOG_ERROR("Error bootstrapping switch '%s' (%m)", tmp);
}
closedir(d);
@ -58,7 +58,7 @@ int switch_bootstrap()
static int mmc_bootstrap_switch(char *sysfs_path)
{
#if DEBUG_BOOTSTRAP
LOG_VOL("bootstrap_switch(%s):\n", sysfs_path);
LOG_VOL("bootstrap_switch(%s):", sysfs_path);
#endif
char filename[255];
@ -74,12 +74,12 @@ static int mmc_bootstrap_switch(char *sysfs_path)
*/
sprintf(filename, "%s/name", sysfs_path);
if (!(fp = fopen(filename, "r"))) {
LOGE("Error opening switch name path '%s' (%s)\n",
LOGE("Error opening switch name path '%s' (%s)",
sysfs_path, strerror(errno));
return -errno;
}
if (!fgets(name, sizeof(name), fp)) {
LOGE("Unable to read switch name\n");
LOGE("Unable to read switch name");
fclose(fp);
return -EIO;
}
@ -95,12 +95,12 @@ static int mmc_bootstrap_switch(char *sysfs_path)
*/
sprintf(filename, "%s/state", sysfs_path);
if (!(fp = fopen(filename, "r"))) {
LOGE("Error opening switch state path '%s' (%s)\n",
LOGE("Error opening switch state path '%s' (%s)",
sysfs_path, strerror(errno));
return -errno;
}
if (!fgets(state, sizeof(state), fp)) {
LOGE("Unable to read switch state\n");
LOGE("Unable to read switch state");
fclose(fp);
return -EIO;
}
@ -113,7 +113,7 @@ static int mmc_bootstrap_switch(char *sysfs_path)
uevent_params[2] = (char *) NULL;
if (simulate_uevent("switch", devpath, "add", uevent_params) < 0) {
LOGE("Error simulating uevent (%s)\n", strerror(errno));
LOGE("Error simulating uevent (%s)", strerror(errno));
return -errno;
}

View File

@ -87,12 +87,12 @@ int process_uevent_message(int socket)
int rc = 0;
if ((count = recv(socket, buffer, sizeof(buffer), 0)) < 0) {
LOGE("Error receiving uevent (%s)\n", strerror(errno));
LOGE("Error receiving uevent (%s)", strerror(errno));
return -errno;
}
if (!(event = malloc(sizeof(struct uevent)))) {
LOGE("Error allocating memory (%s)\n", strerror(errno));
LOGE("Error allocating memory (%s)", strerror(errno));
return -errno;
}
@ -139,7 +139,7 @@ int simulate_uevent(char *subsys, char *path, char *action, char **params)
int i, rc;
if (!(event = malloc(sizeof(struct uevent)))) {
LOGE("Error allocating memory (%s)\n", strerror(errno));
LOGE("Error allocating memory (%s)", strerror(errno));
return -errno;
}
@ -154,7 +154,7 @@ int simulate_uevent(char *subsys, char *path, char *action, char **params)
else if (!strcmp(action, "remove"))
event->action = action_remove;
else {
LOGE("Invalid action '%s'\n", action);
LOGE("Invalid action '%s'", action);
return -1;
}
@ -184,7 +184,7 @@ static int dispatch_uevent(struct uevent *event)
}
#if DEBUG_UEVENT
LOG_VOL("No uevent handlers registered for '%s' subsystem\n", event->subsystem);
LOG_VOL("No uevent handlers registered for '%s' subsystem", event->subsystem);
#endif
return 0;
}
@ -193,12 +193,12 @@ static void dump_uevent(struct uevent *event)
{
int i;
LOG_VOL("[UEVENT] Sq: %u S: %s A: %d P: %s\n",
LOG_VOL("[UEVENT] Sq: %u S: %s A: %d P: %s",
event->seqnum, event->subsystem, event->action, event->path);
for (i = 0; i < UEVENT_PARAMS_MAX; i++) {
if (!event->param[i])
break;
LOG_VOL("%s\n", event->param[i]);
LOG_VOL("%s", event->param[i]);
}
}
@ -226,7 +226,7 @@ static char *get_uevent_param(struct uevent *event, char *param_name)
return &event->param[i][strlen(param_name) + 1];
}
LOGE("get_uevent_param(): No parameter '%s' found\n", param_name);
LOGE("get_uevent_param(): No parameter '%s' found", param_name);
return NULL;
}
@ -248,7 +248,7 @@ static int handle_powersupply_event(struct uevent *event)
low_batt = true;
else
low_batt = false;
LOG_VOL("handle_powersupply_event(): low_batt = %d, door_open = %d\n", low_batt, door_open);
LOG_VOL("handle_powersupply_event(): low_batt = %d, door_open = %d", low_batt, door_open);
volmgr_safe_mode(low_batt || door_open);
}
return 0;
@ -272,10 +272,10 @@ static int handle_switch_event(struct uevent *event)
door_open = true;
else
door_open = false;
LOG_VOL("handle_powersupply_event(): low_batt = %d, door_open = %d\n", low_batt, door_open);
LOG_VOL("handle_powersupply_event(): low_batt = %d, door_open = %d", low_batt, door_open);
volmgr_safe_mode(low_batt || door_open);
} else
LOG_VOL("handle_switch_event(): Ignoring switch '%s'\n", name);
LOG_VOL("handle_switch_event(): Ignoring switch '%s'", name);
return 0;
}
@ -296,12 +296,16 @@ static int handle_block_event(struct uevent *event)
/*
* Look for backing media for this block device
*/
if (!strcmp(get_uevent_param(event, "DEVTYPE"), "disk"))
if (!strncmp(get_uevent_param(event, "DEVPATH"),
"/devices/virtual/",
strlen("/devices/virtual/"))) {
n = 0;
} else if (!strcmp(get_uevent_param(event, "DEVTYPE"), "disk"))
n = 2;
else if (!strcmp(get_uevent_param(event, "DEVTYPE"), "partition"))
n = 3;
else {
LOGE("Bad blockdev type '%s'\n", get_uevent_param(event, "DEVTYPE"));
LOGE("Bad blockdev type '%s'", get_uevent_param(event, "DEVTYPE"));
return -EINVAL;
}
@ -309,7 +313,7 @@ static int handle_block_event(struct uevent *event)
if (!(media = media_lookup_by_path(mediapath, false))) {
#if DEBUG_UEVENT
LOG_VOL("No backend media found @ device path '%s'\n", mediapath);
LOG_VOL("No backend media found @ device path '%s'", mediapath);
#endif
return 0;
}
@ -332,7 +336,7 @@ static int handle_block_event(struct uevent *event)
min,
media,
get_uevent_param(event, "DEVTYPE")))) {
LOGE("Unable to allocate new blkdev (%m)\n");
LOGE("Unable to allocate new blkdev (%m)");
return -1;
}
@ -343,17 +347,17 @@ static int handle_block_event(struct uevent *event)
*/
int rc;
if ((rc = media_add_blkdev(media, blkdev)) < 0) {
LOGE("Unable to add blkdev to card (%d)\n", rc);
LOGE("Unable to add blkdev to card (%d)", rc);
return rc;
}
LOG_VOL("New blkdev %d.%d on media %s, media path %s, Dpp %d\n",
LOG_VOL("New blkdev %d.%d on media %s, media path %s, Dpp %d",
blkdev->major, blkdev->minor, media->name, mediapath,
blkdev_get_num_pending_partitions(blkdev->disk));
if (blkdev_get_num_pending_partitions(blkdev->disk) == 0) {
if ((rc = volmgr_consider_disk(blkdev->disk)) < 0) {
LOGE("Volmgr failed to handle device (%d)\n", rc);
LOGE("Volmgr failed to handle device (%d)", rc);
return rc;
}
}
@ -361,7 +365,7 @@ static int handle_block_event(struct uevent *event)
if (!(blkdev = blkdev_lookup_by_devno(maj, min)))
return 0;
LOG_VOL("Destroying blkdev %d.%d @ %s on media %s\n", blkdev->major,
LOG_VOL("Destroying blkdev %d.%d @ %s on media %s", blkdev->major,
blkdev->minor, blkdev->devpath, media->name);
volmgr_notify_eject(blkdev, _cb_blkdev_ok_to_destroy);
@ -369,13 +373,13 @@ static int handle_block_event(struct uevent *event)
if (!(blkdev = blkdev_lookup_by_devno(maj, min)))
return 0;
LOG_VOL("Modified blkdev %d.%d @ %s on media %s\n", blkdev->major,
LOG_VOL("Modified blkdev %d.%d @ %s on media %s", blkdev->major,
blkdev->minor, blkdev->devpath, media->name);
blkdev_refresh(blkdev);
} else {
#if DEBUG_UEVENT
LOG_VOL("No handler implemented for action %d\n", event->action);
LOG_VOL("No handler implemented for action %d", event->action);
#endif
}
return 0;
@ -413,25 +417,25 @@ static int handle_mmc_event(struct uevent *event)
get_uevent_param(event, "MMC_NAME"),
serial,
media_mmc))) {
LOGE("Unable to allocate new media (%m)\n");
LOGE("Unable to allocate new media (%m)");
return -1;
}
LOG_VOL("New MMC card '%s' (serial %u) added @ %s\n", media->name,
LOG_VOL("New MMC card '%s' (serial %u) added @ %s", media->name,
media->serial, media->devpath);
} else if (event->action == action_remove) {
media_t *media;
if (!(media = media_lookup_by_path(event->path, false))) {
LOGE("Unable to lookup media '%s'\n", event->path);
LOGE("Unable to lookup media '%s'", event->path);
return -1;
}
LOG_VOL("MMC card '%s' (serial %u) @ %s removed\n", media->name,
LOG_VOL("MMC card '%s' (serial %u) @ %s removed", media->name,
media->serial, media->devpath);
media_destroy(media);
} else {
#if DEBUG_UEVENT
LOG_VOL("No handler implemented for action %d\n", event->action);
LOG_VOL("No handler implemented for action %d", event->action);
#endif
}

View File

@ -45,7 +45,7 @@ boolean ums_enabled_get()
void ums_hostconnected_set(boolean connected)
{
#if DEBUG_UMS
LOG_VOL("ums_hostconnected_set(%d):\n", connected);
LOG_VOL("ums_hostconnected_set(%d):", connected);
#endif
host_connected = connected;
@ -56,19 +56,19 @@ void ums_hostconnected_set(boolean connected)
int ums_enable(char *dev_fspath, char *lun_syspath)
{
LOG_VOL("ums_enable(%s, %s):\n", dev_fspath, lun_syspath);
LOG_VOL("ums_enable(%s, %s):", dev_fspath, lun_syspath);
int fd;
char filename[255];
sprintf(filename, "/sys/%s/file", lun_syspath);
if ((fd = open(filename, O_WRONLY)) < 0) {
LOGE("Unable to open '%s' (%s)\n", filename, strerror(errno));
LOGE("Unable to open '%s' (%s)", filename, strerror(errno));
return -errno;
}
if (write(fd, dev_fspath, strlen(dev_fspath)) < 0) {
LOGE("Unable to write to ums lunfile (%s)\n", strerror(errno));
LOGE("Unable to write to ums lunfile (%s)", strerror(errno));
close(fd);
return -errno;
}
@ -80,7 +80,7 @@ int ums_enable(char *dev_fspath, char *lun_syspath)
int ums_disable(char *lun_syspath)
{
#if DEBUG_UMS
LOG_VOL("ums_disable(%s):\n", lun_syspath);
LOG_VOL("ums_disable(%s):", lun_syspath);
#endif
int fd;
@ -88,14 +88,14 @@ int ums_disable(char *lun_syspath)
sprintf(filename, "/sys/%s/file", lun_syspath);
if ((fd = open(filename, O_WRONLY)) < 0) {
LOGE("Unable to open '%s' (%s)\n", filename, strerror(errno));
LOGE("Unable to open '%s' (%s)", filename, strerror(errno));
return -errno;
}
char ch = 0;
if (write(fd, &ch, 1) < 0) {
LOGE("Unable to write to ums lunfile (%s)\n", strerror(errno));
LOGE("Unable to write to ums lunfile (%s)", strerror(errno));
close(fd);
return -errno;
}
@ -114,7 +114,7 @@ int ums_send_status(void)
int rc;
#if DEBUG_UMS
LOG_VOL("ums_send_status():\n");
LOG_VOL("ums_send_status():");
#endif
rc = send_msg(ums_enabled_get() ? VOLD_EVT_UMS_ENABLED :

View File

@ -60,7 +60,7 @@ int main(int argc, char **argv)
struct sockaddr_nl nladdr;
int uevent_sz = 64 * 1024;
LOG_VOL("Android Volume Daemon version %d.%d\n", ver_major, ver_minor);
LOG_VOL("Android Volume Daemon version %d.%d", ver_major, ver_minor);
/*
* Create all the various sockets we'll need
@ -68,13 +68,13 @@ int main(int argc, char **argv)
// Socket to listen on for incomming framework connections
if ((door_sock = android_get_control_socket(VOLD_SOCKET)) < 0) {
LOGE("Obtaining file descriptor socket '%s' failed: %s\n",
LOGE("Obtaining file descriptor socket '%s' failed: %s",
VOLD_SOCKET, strerror(errno));
exit(1);
}
if (listen(door_sock, 4) < 0) {
LOGE("Unable to listen on fd '%d' for socket '%s': %s\n",
LOGE("Unable to listen on fd '%d' for socket '%s': %s",
door_sock, VOLD_SOCKET, strerror(errno));
exit(1);
}
@ -89,18 +89,18 @@ int main(int argc, char **argv)
if ((uevent_sock = socket(PF_NETLINK,
SOCK_DGRAM,NETLINK_KOBJECT_UEVENT)) < 0) {
LOGE("Unable to create uevent socket: %s\n", strerror(errno));
LOGE("Unable to create uevent socket: %s", strerror(errno));
exit(1);
}
if (setsockopt(uevent_sock, SOL_SOCKET, SO_RCVBUFFORCE, &uevent_sz,
sizeof(uevent_sz)) < 0) {
LOGE("Unable to set uevent socket options: %s\n", strerror(errno));
LOGE("Unable to set uevent socket options: %s", strerror(errno));
exit(1);
}
if (bind(uevent_sock, (struct sockaddr *) &nladdr, sizeof(nladdr)) < 0) {
LOGE("Unable to bind uevent socket: %s\n", strerror(errno));
LOGE("Unable to bind uevent socket: %s", strerror(errno));
exit(1);
}
@ -123,7 +123,7 @@ int main(int argc, char **argv)
/*
* Main loop
*/
LOG_VOL("Bootstrapping complete\n");
LOG_VOL("Bootstrapping complete");
while(1) {
fd_set read_fds;
struct timeval to;
@ -148,7 +148,7 @@ int main(int argc, char **argv)
}
if ((rc = select(max + 1, &read_fds, NULL, NULL, &to)) < 0) {
LOGE("select() failed (%s)\n", strerror(errno));
LOGE("select() failed (%s)", strerror(errno));
sleep(1);
continue;
}
@ -164,30 +164,30 @@ int main(int argc, char **argv)
alen = sizeof(addr);
if (fw_sock != -1) {
LOGE("Dropping duplicate framework connection\n");
LOGE("Dropping duplicate framework connection");
int tmp = accept(door_sock, &addr, &alen);
close(tmp);
continue;
}
if ((fw_sock = accept(door_sock, &addr, &alen)) < 0) {
LOGE("Unable to accept framework connection (%s)\n",
LOGE("Unable to accept framework connection (%s)",
strerror(errno));
}
LOG_VOL("Accepted connection from framework\n");
LOG_VOL("Accepted connection from framework");
if ((rc = volmgr_send_states()) < 0) {
LOGE("Unable to send volmgr status to framework (%d)\n", rc);
LOGE("Unable to send volmgr status to framework (%d)", rc);
}
}
if (FD_ISSET(fw_sock, &read_fds)) {
if ((rc = process_framework_command(fw_sock)) < 0) {
if (rc == -ECONNRESET) {
LOGE("Framework disconnected\n");
LOGE("Framework disconnected");
close(fw_sock);
fw_sock = -1;
} else {
LOGE("Error processing framework command (%s)\n",
LOGE("Error processing framework command (%s)",
strerror(errno));
}
}
@ -195,7 +195,7 @@ int main(int argc, char **argv)
if (FD_ISSET(uevent_sock, &read_fds)) {
if ((rc = process_uevent_message(uevent_sock)) < 0) {
LOGE("Error processing uevent msg (%s)\n", strerror(errno));
LOGE("Error processing uevent msg (%s)", strerror(errno));
}
}
} // while
@ -208,7 +208,7 @@ int send_msg(char* message)
pthread_mutex_lock(&write_mutex);
LOG_VOL("send_msg(%s):\n", message);
LOG_VOL("send_msg(%s):", message);
if (fw_sock >= 0)
result = write(fw_sock, message, strlen(message) + 1);
@ -224,7 +224,7 @@ int send_msg_with_data(char *message, char *data)
char* buffer = (char *)alloca(strlen(message) + strlen(data) + 1);
if (!buffer) {
LOGE("alloca failed in send_msg_with_data\n");
LOGE("alloca failed in send_msg_with_data");
return -1;
}

View File

@ -103,7 +103,7 @@ static boolean _mountpoint_mounted(char *mp)
char line[1024];
if (!(fp = fopen("/proc/mounts", "r"))) {
LOGE("Error opening /proc/mounts (%s)\n", strerror(errno));
LOGE("Error opening /proc/mounts (%s)", strerror(errno));
return false;
}
@ -125,22 +125,20 @@ static boolean _mountpoint_mounted(char *mp)
* Public functions
*/
int volmgr_set_volume_key(char *mount_point, unsigned char *key, unsigned int keysize)
int volmgr_set_volume_key(char *mount_point, unsigned char *key)
{
volume_t *v = volmgr_lookup_volume_by_mountpoint(mount_point, true);
if (!v)
return -ENOENT;
if (v->key)
free(v->key);
if (!(v->key = malloc(keysize))) {
if (v->media_type != media_devmapper) {
LOGE("Cannot set key on a non devmapper volume");
pthread_mutex_unlock(&v->lock);
return -ENOMEM;
return -EINVAL;
}
memcpy(v->key, key, keysize);
memcpy(v->dm->key, key, sizeof(v->dm->key));
pthread_mutex_unlock(&v->lock);
return 0;
}
@ -150,31 +148,41 @@ int volmgr_format_volume(char *mount_point)
int rc;
volume_t *v;
LOG_VOL("volmgr_format_volume(%s):\n", mount_point);
LOG_VOL("volmgr_format_volume(%s):", mount_point);
v = volmgr_lookup_volume_by_mountpoint(mount_point, true);
if (!v)
return -ENOENT;
if (v->state == volstate_mounted ||
v->state == volstate_mounted_ro ||
v->state == volstate_ums ||
v->state == volstate_checking) {
LOGE("Can't format '%s', currently in state %d\n", mount_point, v->state);
LOGE("Can't format '%s', currently in state %d", mount_point, v->state);
pthread_mutex_unlock(&v->lock);
return -EBUSY;
} else if (v->state == volstate_nomedia) {
LOGE("Can't format '%s', (no media)\n", mount_point);
} else if (v->state == volstate_nomedia &&
v->media_type != media_devmapper) {
LOGE("Can't format '%s', (no media)", mount_point);
pthread_mutex_unlock(&v->lock);
return -ENOMEDIUM;
}
if ((rc = initialize_mbr(v->dev->disk)) < 0) {
LOGE("MBR init failed for %s (%d)\n", mount_point, rc);
pthread_mutex_unlock(&v->lock);
return rc;
// XXX:Reject if the underlying source media is not present
if (v->media_type == media_devmapper) {
if ((rc = devmapper_genesis(v->dm)) < 0) {
LOGE("devmapper genesis failed for %s (%d)", mount_point, rc);
pthread_mutex_unlock(&v->lock);
return rc;
}
} else {
if ((rc = initialize_mbr(v->dev->disk)) < 0) {
LOGE("MBR init failed for %s (%d)", mount_point, rc);
pthread_mutex_unlock(&v->lock);
return rc;
}
}
volume_setstate(v, volstate_formatting);
@ -187,7 +195,7 @@ int volmgr_bootstrap(void)
int rc;
if ((rc = volmgr_readconfig("/system/etc/vold.conf")) < 0) {
LOGE("Unable to process config\n");
LOGE("Unable to process config");
return rc;
}
@ -197,7 +205,7 @@ int volmgr_bootstrap(void)
volume_t *v = vol_root;
while (v) {
if (_mountpoint_mounted(v->mount_point)) {
LOG_VOL("Volume '%s' already mounted at startup\n", v->mount_point);
LOG_VOL("Volume '%s' already mounted at startup", v->mount_point);
v->state = volstate_mounted;
}
v = v->next;
@ -221,9 +229,9 @@ int volmgr_safe_mode(boolean enable)
if (v->state == volstate_mounted && v->fs) {
rc = v->fs->mount_fn(v->dev, v, safe_mode);
if (!rc) {
LOG_VOL("Safe mode %s on %s\n", (enable ? "enabled" : "disabled"), v->mount_point);
LOG_VOL("Safe mode %s on %s", (enable ? "enabled" : "disabled"), v->mount_point);
} else {
LOGE("Failed to %s safe-mode on %s (%s)\n",
LOGE("Failed to %s safe-mode on %s (%s)",
(enable ? "enable" : "disable" ), v->mount_point, strerror(-rc));
}
}
@ -243,7 +251,7 @@ int volmgr_send_states(void)
while (vol_scan) {
pthread_mutex_lock(&vol_scan->lock);
if ((rc = volume_send_state(vol_scan)) < 0) {
LOGE("Error sending state to framework (%d)\n", rc);
LOGE("Error sending state to framework (%d)", rc);
}
pthread_mutex_unlock(&vol_scan->lock);
vol_scan = vol_scan->next;
@ -267,7 +275,7 @@ int volmgr_consider_disk(blkdev_t *dev)
pthread_mutex_lock(&vol->lock);
if (vol->state == volstate_mounted) {
LOGE("Volume %s already mounted (did we just crash?)\n", vol->mount_point);
LOGE("Volume %s already mounted (did we just crash?)", vol->mount_point);
pthread_mutex_unlock(&vol->lock);
return 0;
}
@ -281,26 +289,24 @@ int volmgr_start_volume_by_mountpoint(char *mount_point)
{
volume_t *v;
LOG_VOL("volmgr_start_volume_by_mountpoint(%s):", mount_point);
v = volmgr_lookup_volume_by_mountpoint(mount_point, true);
if (!v)
return -ENOENT;
LOG_VOL("volmgr_start_volume_by_mountpoint(%s): got %p", mount_point, v);
if (v->media_type == media_devmapper) {
if (devmapper_start(v->dm) < 0) {
LOGE("volmgr failed to start devmapper volume '%s'\n",
LOGE("volmgr failed to start devmapper volume '%s'",
v->mount_point);
}
} else if (v->media_type == media_mmc) {
if (!v->dev) {
LOGE("Cannot start volume '%s' (volume is not bound)\n", mount_point);
LOGE("Cannot start volume '%s' (volume is not bound)", mount_point);
pthread_mutex_unlock(&v->lock);
return -ENOENT;
}
if (_volmgr_consider_disk_and_vol(v, v->dev->disk) < 0) {
LOGE("volmgr failed to start volume '%s'\n", v->mount_point);
LOGE("volmgr failed to start volume '%s'", v->mount_point);
}
}
@ -308,6 +314,13 @@ LOG_VOL("volmgr_start_volume_by_mountpoint(%s): got %p", mount_point, v);
return 0;
}
static void _cb_volstopped_for_devmapper_teardown(volume_t *v, void *arg)
{
devmapper_stop(v->dm);
volume_setstate(v, volstate_nomedia);
pthread_mutex_unlock(&v->lock);
}
int volmgr_stop_volume_by_mountpoint(char *mount_point)
{
int rc;
@ -320,7 +333,10 @@ int volmgr_stop_volume_by_mountpoint(char *mount_point)
if (v->state == volstate_mounted)
volmgr_send_eject_request(v);
rc = volmgr_shutdown_volume(v, NULL, true);
if (v->media_type == media_devmapper)
rc = volmgr_shutdown_volume(v, _cb_volstopped_for_devmapper_teardown, false);
else
rc = volmgr_shutdown_volume(v, NULL, true);
/*
* If shutdown returns -EINPROGRESS,
@ -329,7 +345,7 @@ int volmgr_stop_volume_by_mountpoint(char *mount_point)
*/
if (rc != -EINPROGRESS) {
if (rc)
LOGE("unable to shutdown volume '%s'\n", v->mount_point);
LOGE("unable to shutdown volume '%s'", v->mount_point);
pthread_mutex_unlock(&v->lock);
}
return 0;
@ -337,7 +353,7 @@ int volmgr_stop_volume_by_mountpoint(char *mount_point)
int volmgr_notify_eject(blkdev_t *dev, void (* cb) (blkdev_t *))
{
LOG_VOL("Volmgr notified of %d:%d eject\n", dev->major, dev->minor);
LOG_VOL("Volmgr notified of %d:%d eject", dev->major, dev->minor);
volume_t *v;
@ -362,7 +378,7 @@ int volmgr_notify_eject(blkdev_t *dev, void (* cb) (blkdev_t *))
* The device is being ejected due to
* kernel disk revalidation.
*/
LOG_VOL("Volmgr ignoring eject of %d:%d (volume formatting)\n",
LOG_VOL("Volmgr ignoring eject of %d:%d (volume formatting)",
dev->major, dev->minor);
if (cb)
cb(dev);
@ -378,7 +394,7 @@ int volmgr_notify_eject(blkdev_t *dev, void (* cb) (blkdev_t *))
int rc = volmgr_stop_volume(v, _cb_volume_stopped_for_eject, cb, false);
if (rc != -EINPROGRESS) {
if (rc)
LOGE("unable to shutdown volume '%s'\n", v->mount_point);
LOGE("unable to shutdown volume '%s'", v->mount_point);
pthread_mutex_unlock(&v->lock);
}
}
@ -390,7 +406,7 @@ static void _cb_volume_stopped_for_eject(volume_t *v, void *arg)
void (* eject_cb) (blkdev_t *) = arg;
#if DEBUG_VOLMGR
LOG_VOL("Volume %s has been stopped for eject\n", v->mount_point);
LOG_VOL("Volume %s has been stopped for eject", v->mount_point);
#endif
eject_cb(v->dev);
@ -422,7 +438,7 @@ int volmgr_enable_ums(boolean enable)
rc = volmgr_shutdown_volume(v, _cb_volstopped_for_ums_enable, false);
if (rc != -EINPROGRESS) {
if (rc)
LOGE("unable to shutdown volume '%s'\n", v->mount_point);
LOGE("unable to shutdown volume '%s'", v->mount_point);
pthread_mutex_unlock(&v->lock);
}
} else {
@ -434,16 +450,16 @@ int volmgr_enable_ums(boolean enable)
}
if ((rc = ums_disable(v->ums_path)) < 0) {
LOGE("unable to disable ums on '%s'\n", v->mount_point);
LOGE("unable to disable ums on '%s'", v->mount_point);
pthread_mutex_unlock(&v->lock);
continue;
}
LOG_VOL("Kick-starting volume %d:%d after UMS disable\n",
LOG_VOL("Kick-starting volume %d:%d after UMS disable",
v->dev->disk->major, v->dev->disk->minor);
// Start volume
if ((rc = _volmgr_consider_disk_and_vol(v, v->dev->disk)) < 0) {
LOGE("volmgr failed to consider disk %d:%d\n",
LOGE("volmgr failed to consider disk %d:%d",
v->dev->disk->major, v->dev->disk->minor);
}
pthread_mutex_unlock(&v->lock);
@ -470,7 +486,7 @@ static int _volmgr_consider_disk_and_vol(volume_t *vol, blkdev_t *dev)
int rc = 0;
#if DEBUG_VOLMGR
LOG_VOL("volmgr_consider_disk_and_vol(%s, %d:%d):\n", vol->mount_point,
LOG_VOL("volmgr_consider_disk_and_vol(%s, %d:%d):", vol->mount_point,
dev->major, dev->minor);
#endif
@ -478,13 +494,13 @@ static int _volmgr_consider_disk_and_vol(volume_t *vol, blkdev_t *dev)
vol->state == volstate_mounted ||
vol->state == volstate_mounted_ro ||
vol->state == volstate_damaged) {
LOGE("Cannot consider volume '%s' because it is in state '%d\n",
LOGE("Cannot consider volume '%s' because it is in state '%d",
vol->mount_point, vol->state);
return -EADDRINUSE;
}
if (vol->state == volstate_formatting) {
LOG_VOL("Evaluating dev '%s' for formattable filesystems for '%s'\n",
LOG_VOL("Evaluating dev '%s' for formattable filesystems for '%s'",
dev->devpath, vol->mount_point);
/*
* Since we only support creating 1 partition (right now),
@ -492,24 +508,29 @@ static int _volmgr_consider_disk_and_vol(volume_t *vol, blkdev_t *dev)
*/
blkdev_t *part = blkdev_lookup_by_devno(dev->major, 1);
if (!part) {
LOGE("Can't find partition to format!\n");
return -ENOENT;
part = blkdev_lookup_by_devno(dev->major, 0);
if (!part) {
LOGE("Unable to find device to format");
return -ENODEV;
}
}
if ((rc = format_partition(part)) < 0) {
LOGE("format failed (%d)\n", rc);
if ((rc = format_partition(part,
vol->media_type == media_devmapper ?
FORMAT_TYPE_EXT2 : FORMAT_TYPE_FAT32)) < 0) {
LOGE("format failed (%d)", rc);
return rc;
}
}
LOG_VOL("Evaluating dev '%s' for mountable filesystems for '%s'\n",
LOG_VOL("Evaluating dev '%s' for mountable filesystems for '%s'",
dev->devpath, vol->mount_point);
if (dev->nr_parts == 0) {
rc = _volmgr_start(vol, dev);
#if DEBUG_VOLMGR
LOG_VOL("_volmgr_start(%s, %d:%d) rc = %d\n", vol->mount_point,
LOG_VOL("_volmgr_start(%s, %d:%d) rc = %d", vol->mount_point,
dev->major, dev->minor, rc);
#endif
} else {
@ -524,12 +545,12 @@ static int _volmgr_consider_disk_and_vol(volume_t *vol, blkdev_t *dev)
for (i = 0; i < dev->nr_parts; i++) {
blkdev_t *part = blkdev_lookup_by_devno(dev->major, (i+1));
if (!part) {
LOGE("Error - unable to lookup partition for blkdev %d:%d\n", dev->major, (i+1));
LOGE("Error - unable to lookup partition for blkdev %d:%d", dev->major, (i+1));
continue;
}
rc = _volmgr_start(vol, part);
#if DEBUG_VOLMGR
LOG_VOL("_volmgr_start(%s, %d:%d) rc = %d\n",
LOG_VOL("_volmgr_start(%s, %d:%d) rc = %d",
vol->mount_point, part->major, part->minor, rc);
#endif
if (!rc)
@ -538,13 +559,13 @@ static int _volmgr_consider_disk_and_vol(volume_t *vol, blkdev_t *dev)
if (rc == -ENODEV) {
// Assert to make sure each partition had a backing blkdev
LOGE("Internal consistency error\n");
LOGE("Internal consistency error");
return 0;
}
}
if (rc == -ENODATA) {
LOGE("Device %d:%d contains no usable filesystems\n",
LOGE("Device %d:%d contains no usable filesystems",
dev->major, dev->minor);
rc = 0;
}
@ -554,7 +575,7 @@ static int _volmgr_consider_disk_and_vol(volume_t *vol, blkdev_t *dev)
static void volmgr_reaper_thread_sighandler(int signo)
{
LOGE("Volume reaper thread got signal %d\n", signo);
LOGE("Volume reaper thread got signal %d", signo);
}
static void __reaper_cleanup(void *arg)
@ -590,7 +611,7 @@ static void *volmgr_reaper_thread(void *arg)
actions.sa_handler = volmgr_reaper_thread_sighandler;
sigaction(SIGUSR1, &actions, NULL);
LOG_VOL("Reaper here - working on %s\n", vol->mount_point);
LOG_VOL("Reaper here - working on %s", vol->mount_point);
boolean send_sig_kill = false;
int i, rc;
@ -598,7 +619,7 @@ static void *volmgr_reaper_thread(void *arg)
for (i = 0; i < 10; i++) {
errno = 0;
rc = umount(vol->mount_point);
LOG_VOL("volmngr reaper umount(%s) attempt %d (%s)\n",
LOG_VOL("volmngr reaper umount(%s) attempt %d (%s)",
vol->mount_point, i + 1, strerror(errno));
if (!rc)
break;
@ -615,11 +636,11 @@ static void *volmgr_reaper_thread(void *arg)
}
if (!rc) {
LOG_VOL("Reaper sucessfully unmounted %s\n", vol->mount_point);
LOG_VOL("Reaper sucessfully unmounted %s", vol->mount_point);
vol->fs = NULL;
volume_setstate(vol, volstate_unmounted);
} else {
LOGE("Unable to unmount!! (%d)\n", rc);
LOGE("Unable to unmount!! (%d)", rc);
}
out:
@ -633,9 +654,9 @@ static void volmgr_uncage_reaper(volume_t *vol, void (* cb) (volume_t *, void *a
{
if (vol->worker_running) {
LOGE("Worker thread is currently running.. waiting..\n");
LOGE("Worker thread is currently running.. waiting..");
pthread_mutex_lock(&vol->worker_sem);
LOG_VOL("Worker thread now available\n");
LOG_VOL("Worker thread now available");
}
vol->worker_args.reaper_args.cb = cb;
@ -664,7 +685,7 @@ static int volmgr_stop_volume(volume_t *v, void (*cb) (volume_t *, void *), void
break;
}
LOG_VOL("volmngr quick stop umount(%s) attempt %d (%s)\n",
LOG_VOL("volmngr quick stop umount(%s) attempt %d (%s)",
v->mount_point, i + 1, strerror(errno));
if (i == 0)
@ -674,7 +695,7 @@ static int volmgr_stop_volume(volume_t *v, void (*cb) (volume_t *, void *), void
}
if (!rc) {
LOG_VOL("volmgr_stop_volume(%s): Volume unmounted sucessfully\n",
LOG_VOL("volmgr_stop_volume(%s): Volume unmounted sucessfully",
v->mount_point);
if (emit_statechange)
volume_setstate(v, volstate_unmounted);
@ -686,16 +707,16 @@ static int volmgr_stop_volume(volume_t *v, void (*cb) (volume_t *, void *), void
* Since the volume is still in use, dispatch the stopping to
* a thread
*/
LOG_VOL("Volume %s is busy (%d) - uncaging the reaper\n", v->mount_point, rc);
LOG_VOL("Volume %s is busy (%d) - uncaging the reaper", v->mount_point, rc);
volmgr_uncage_reaper(v, cb, arg);
return -EINPROGRESS;
} else if (v->state == volstate_checking) {
volume_setstate(v, volstate_unmounted);
if (v->worker_running) {
LOG_VOL("Cancelling worker thread\n");
LOG_VOL("Cancelling worker thread");
pthread_kill(v->worker_thread, SIGUSR1);
} else
LOGE("Strange... we were in checking state but worker thread wasn't running..\n");
LOGE("Strange... we were in checking state but worker thread wasn't running..");
goto out_cb_immed;
}
@ -722,11 +743,12 @@ static void _cb_volume_stopped_for_shutdown(volume_t *v, void *arg)
void (* shutdown_cb) (volume_t *) = arg;
#if DEBUG_VOLMGR
LOG_VOL("Volume %s has been stopped for shutdown\n", v->mount_point);
LOG_VOL("Volume %s has been stopped for shutdown", v->mount_point);
#endif
shutdown_cb(v);
}
/*
* Called when a volume is sucessfully unmounted for UMS enable
*/
@ -736,13 +758,13 @@ static void _cb_volstopped_for_ums_enable(volume_t *v, void *arg)
char *devdir_path;
#if DEBUG_VOLMGR
LOG_VOL("_cb_volstopped_for_ums_enable(%s):\n", v->mount_point);
LOG_VOL("_cb_volstopped_for_ums_enable(%s):", v->mount_point);
#endif
devdir_path = blkdev_get_devpath(v->dev->disk);
if ((rc = ums_enable(devdir_path, v->ums_path)) < 0) {
free(devdir_path);
LOGE("Error enabling ums (%d)\n", rc);
LOGE("Error enabling ums (%d)", rc);
return;
}
free(devdir_path);
@ -762,7 +784,7 @@ static int volmgr_readconfig(char *cfg_path)
if (!strncmp(node->name, "volume_", 7))
volmgr_config_volume(node);
else
LOGE("Skipping unknown configuration node '%s'\n", node->name);
LOGE("Skipping unknown configuration node '%s'", node->name);
node = node->next;
}
return 0;
@ -773,7 +795,7 @@ static void volmgr_add_mediapath_to_volume(volume_t *v, char *media_path)
int i;
#if DEBUG_VOLMGR
LOG_VOL("volmgr_add_mediapath_to_volume(%p, %s):\n", v, media_path);
LOG_VOL("volmgr_add_mediapath_to_volume(%p, %s):", v, media_path);
#endif
for (i = 0; i < VOLMGR_MAX_MEDIAPATHS_PER_VOLUME; i++) {
if (!v->media_paths[i]) {
@ -781,7 +803,7 @@ static void volmgr_add_mediapath_to_volume(volume_t *v, char *media_path)
return;
}
}
LOGE("Unable to add media path '%s' to volume (out of media slots)\n", media_path);
LOGE("Unable to add media path '%s' to volume (out of media slots)", media_path);
}
static int volmgr_config_volume(cnode *node)
@ -794,7 +816,7 @@ static int volmgr_config_volume(cnode *node)
dm_src = dm_src_type = dm_tgt = dm_param = dm_tgtfs = NULL;
#if DEBUG_VOLMGR
LOG_VOL("volmgr_configure_volume(%s):\n", node->name);
LOG_VOL("volmgr_configure_volume(%s):", node->name);
#endif
if (!(new = malloc(sizeof(volume_t))))
return -ENOMEM;
@ -817,7 +839,7 @@ static int volmgr_config_volume(cnode *node)
else if (!strcmp(child->value, "devmapper"))
new->media_type = media_devmapper;
else {
LOGE("Invalid media type '%s'\n", child->value);
LOGE("Invalid media type '%s'", child->value);
rc = -EINVAL;
goto out_free;
}
@ -838,29 +860,32 @@ static int volmgr_config_volume(cnode *node)
else if (!strcmp(child->name, "dm_target_fs"))
dm_tgtfs = strdup(child->value);
else
LOGE("Ignoring unknown config entry '%s'\n", child->name);
LOGE("Ignoring unknown config entry '%s'", child->name);
child = child->next;
}
if (new->media_type == media_mmc) {
if (!new->media_paths[0] || !new->mount_point || new->media_type == media_unknown) {
LOGE("Required configuration parameter missing for mmc volume\n");
LOGE("Required configuration parameter missing for mmc volume");
rc = -EINVAL;
goto out_free;
}
} else if (new->media_type == media_devmapper) {
if (!dm_src || !dm_src_type || !dm_tgt ||
!dm_param || !dm_tgtfs || !dm_size_mb) {
LOGE("Required configuration parameter missing for devmapper volume\n");
LOGE("Required configuration parameter missing for devmapper volume");
rc = -EINVAL;
goto out_free;
}
char dm_mediapath[255];
if (!(new->dm = devmapper_init(dm_src, dm_src_type, dm_size_mb,
dm_tgt, dm_param, dm_tgtfs))) {
dm_tgt, dm_param, dm_tgtfs, dm_mediapath))) {
LOGE("Unable to initialize devmapping");
goto out_free;
goto out_free;
}
LOG_VOL("media path for devmapper volume = '%s'", dm_mediapath);
volmgr_add_mediapath_to_volume(new, dm_mediapath);
}
if (!vol_root)
@ -932,6 +957,7 @@ static volume_t *volmgr_lookup_volume_by_mountpoint(char *mount_point, boolean l
pthread_mutex_unlock(&v->lock);
return v;
}
pthread_mutex_unlock(&v->lock);
v = v->next;
}
return NULL;
@ -971,12 +997,12 @@ static int _volmgr_start(volume_t *vol, blkdev_t *dev)
int rc = ENODATA;
#if DEBUG_VOLMGR
LOG_VOL("_volmgr_start(%s, %d:%d):\n", vol->mount_point,
LOG_VOL("_volmgr_start(%s, %d:%d):", vol->mount_point,
dev->major, dev->minor);
#endif
if (vol->state == volstate_mounted) {
LOGE("Unable to start volume '%s' (already mounted)\n", vol->mount_point);
LOGE("Unable to start volume '%s' (already mounted)", vol->mount_point);
return -EBUSY;
}
@ -986,7 +1012,7 @@ static int _volmgr_start(volume_t *vol, blkdev_t *dev)
}
if (!fs) {
LOGE("No supported filesystems on %d:%d\n", dev->major, dev->minor);
LOGE("No supported filesystems on %d:%d", dev->major, dev->minor);
volume_setstate(vol, volstate_nofs);
return -ENODATA;
}
@ -1002,9 +1028,9 @@ static int volmgr_start_fs(struct volmgr_fstable_entry *fs, volume_t *vol, blkde
*/
if (vol->worker_running) {
LOGE("Worker thread is currently running.. waiting..\n");
LOGE("Worker thread is currently running.. waiting..");
pthread_mutex_lock(&vol->worker_sem);
LOG_VOL("Worker thread now available\n");
LOG_VOL("Worker thread now available");
}
vol->dev = dev;
@ -1026,7 +1052,7 @@ static void __start_fs_thread_lock_cleanup(void *arg)
volume_t *vol = (volume_t *) arg;
#if DEBUG_VOLMGR
LOG_VOL("__start_fs_thread_lock_cleanup(%s):\n", vol->mount_point);
LOG_VOL("__start_fs_thread_lock_cleanup(%s):", vol->mount_point);
#endif
vol->worker_running = false;
@ -1061,13 +1087,13 @@ static void *volmgr_start_fs_thread(void *arg)
int rc;
#if DEBUG_VOLMGR
LOG_VOL("Worker thread pid %d starting %s fs %d:%d on %s\n", getpid(),
LOG_VOL("Worker thread pid %d starting %s fs %d:%d on %s", getpid(),
fs->name, dev->major, dev->minor, vol->mount_point);
#endif
if (fs->check_fn) {
#if DEBUG_VOLMGR
LOG_VOL("Starting %s filesystem check on %d:%d\n", fs->name,
LOG_VOL("Starting %s filesystem check on %d:%d", fs->name,
dev->major, dev->minor);
#endif
volume_setstate(vol, volstate_checking);
@ -1075,12 +1101,12 @@ static void *volmgr_start_fs_thread(void *arg)
rc = fs->check_fn(dev);
pthread_mutex_lock(&vol->lock);
if (vol->state != volstate_checking) {
LOG_VOL("filesystem check aborted\n");
LOG_VOL("filesystem check aborted");
goto out;
}
if (rc < 0) {
LOGE("%s filesystem check failed on %d:%d (%s)\n", fs->name,
LOGE("%s filesystem check failed on %d:%d (%s)", fs->name,
dev->major, dev->minor, strerror(-rc));
if (rc == -ENODATA) {
volume_setstate(vol, volstate_nofs);
@ -1089,14 +1115,14 @@ static void *volmgr_start_fs_thread(void *arg)
goto out_unmountable;
}
#if DEBUG_VOLMGR
LOG_VOL("%s filesystem check of %d:%d OK\n", fs->name,
LOG_VOL("%s filesystem check of %d:%d OK", fs->name,
dev->major, dev->minor);
#endif
}
rc = fs->mount_fn(dev, vol, safe_mode);
if (!rc) {
LOG_VOL("Sucessfully mounted %s filesystem %d:%d on %s (safe-mode %s)\n",
LOG_VOL("Sucessfully mounted %s filesystem %d:%d on %s (safe-mode %s)",
fs->name, dev->major, dev->minor, vol->mount_point,
(safe_mode ? "on" : "off"));
vol->fs = fs;
@ -1104,7 +1130,7 @@ static void *volmgr_start_fs_thread(void *arg)
goto out;
}
LOGE("%s filesystem mount of %d:%d failed (%d)\n", fs->name, dev->major,
LOGE("%s filesystem mount of %d:%d failed (%d)", fs->name, dev->major,
dev->minor, rc);
out_unmountable:
@ -1117,7 +1143,7 @@ static void *volmgr_start_fs_thread(void *arg)
static void volmgr_start_fs_thread_sighandler(int signo)
{
LOGE("Volume startup thread got signal %d\n", signo);
LOGE("Volume startup thread got signal %d", signo);
}
static void volume_setstate(volume_t *vol, volume_state_t state)
@ -1126,7 +1152,7 @@ static void volume_setstate(volume_t *vol, volume_state_t state)
return;
#if DEBUG_VOLMGR
LOG_VOL("Volume %s state change from %d -> %d\n", vol->mount_point, vol->state, state);
LOG_VOL("Volume %s state change from %d -> %d", vol->mount_point, vol->state, state);
#endif
vol->state = state;

View File

@ -119,9 +119,6 @@ typedef struct volume {
struct volmgr_fstable_entry *fs;
unsigned char *key;
unsigned int keysize;
struct volume *next;
} volume_t;
@ -133,6 +130,6 @@ int volmgr_stop_volume_by_mountpoint(char *mount_point);
int volmgr_start_volume_by_mountpoint(char *mount_point);
int volmgr_safe_mode(boolean enable);
int volmgr_format_volume(char *mount_point);
int volmgr_set_volume_key(char *mount_point, unsigned char *key, unsigned int keysize);
int volmgr_set_volume_key(char *mount_point, unsigned char *key);
void KillProcessesWithOpenFiles(const char* mountPoint, boolean sigkill, int *excluded, int num_excluded);
#endif

View File

@ -43,26 +43,26 @@ int ext_identify(blkdev_t *dev)
char *devpath;
#if EXT_DEBUG
LOG_VOL("ext_identify(%d:%d):\n", dev-major, dev->minor);
LOG_VOL("ext_identify(%d:%d):", dev-major, dev->minor);
#endif
devpath = blkdev_get_devpath(dev);
if ((fd = open(devpath, O_RDWR)) < 0) {
LOGE("Unable to open device '%s' (%s)\n", devpath,
LOGE("Unable to open device '%s' (%s)", devpath,
strerror(errno));
free(devpath);
return -errno;
}
if (lseek(fd, 1024, SEEK_SET) < 0) {
LOGE("Unable to lseek to get superblock (%s)\n", strerror(errno));
LOGE("Unable to lseek to get superblock (%s)", strerror(errno));
rc = -errno;
goto out;
}
if (read(fd, &sb, sizeof(sb)) != sizeof(sb)) {
LOGE("Unable to read superblock (%s)\n", strerror(errno));
LOGE("Unable to read superblock (%s)", strerror(errno));
rc = -errno;
goto out;
}
@ -75,7 +75,7 @@ int ext_identify(blkdev_t *dev)
out:
#if EXT_DEBUG
LOG_VOL("ext_identify(%s): rc = %d\n", devpath, rc);
LOG_VOL("ext_identify(%s): rc = %d", devpath, rc);
#endif
free(devpath);
close(fd);
@ -87,13 +87,13 @@ int ext_check(blkdev_t *dev)
char *devpath;
#if EXT_DEBUG
LOG_VOL("ext_check(%s):\n", dev->dev_fspath);
LOG_VOL("ext_check(%s):", dev->dev_fspath);
#endif
devpath = blkdev_get_devpath(dev);
if (access(E2FSCK_PATH, X_OK)) {
LOGE("ext_check(%s): %s not found (skipping checks)\n",
LOGE("ext_check(%s): %s not found (skipping checks)",
devpath, E2FSCK_PATH);
free(devpath);
return 0;
@ -110,21 +110,21 @@ int ext_check(blkdev_t *dev)
int rc = logwrap(4, args);
if (rc == 0) {
LOG_VOL("filesystem '%s' had no errors\n", devpath);
LOG_VOL("filesystem '%s' had no errors", devpath);
} else if (rc == 1) {
LOG_VOL("filesystem '%s' had corrected errors\n", devpath);
LOG_VOL("filesystem '%s' had corrected errors", devpath);
rc = 0;
} else if (rc == 2) {
LOGE("VOL volume '%s' had corrected errors (system should be rebooted)\n", devpath);
LOGE("VOL volume '%s' had corrected errors (system should be rebooted)", devpath);
rc = -EIO;
} else if (rc == 4) {
LOGE("VOL volume '%s' had uncorrectable errors\n", devpath);
LOGE("VOL volume '%s' had uncorrectable errors", devpath);
rc = -EIO;
} else if (rc == 8) {
LOGE("Operational error while checking volume '%s'\n", devpath);
LOGE("Operational error while checking volume '%s'", devpath);
rc = -EIO;
} else {
LOGE("Unknown e2fsck exit code (%d)\n", rc);
LOGE("Unknown e2fsck exit code (%d)", rc);
rc = -EIO;
}
free(devpath);
@ -134,7 +134,7 @@ int ext_check(blkdev_t *dev)
int ext_mount(blkdev_t *dev, volume_t *vol, boolean safe_mode)
{
#if EXT_DEBUG
LOG_VOL("ext_mount(%s, %s, %d):\n", dev->dev_fspath, vol->mount_point, safe_mode);
LOG_VOL("ext_mount(%s, %s, %d):", dev->dev_fspath, vol->mount_point, safe_mode);
#endif
char *fs[] = { "ext3", "ext2", NULL };
@ -150,7 +150,7 @@ int ext_mount(blkdev_t *dev, volume_t *vol, boolean safe_mode)
flags |= MS_SYNCHRONOUS;
if (vol->state == volstate_mounted) {
LOG_VOL("Remounting %s on %s, safe mode %d\n", devpath,
LOG_VOL("Remounting %s on %s, safe mode %d", devpath,
vol->mount_point, safe_mode);
flags |= MS_REMOUNT;
}
@ -159,13 +159,13 @@ int ext_mount(blkdev_t *dev, volume_t *vol, boolean safe_mode)
for (f = fs; *f != NULL; f++) {
rc = mount(devpath, vol->mount_point, *f, flags, NULL);
if (rc && errno == EROFS) {
LOGE("ext_mount(%s, %s): Read only filesystem - retrying mount RO\n",
LOGE("ext_mount(%s, %s): Read only filesystem - retrying mount RO",
devpath, vol->mount_point);
flags |= MS_RDONLY;
rc = mount(devpath, vol->mount_point, *f, flags, NULL);
}
#if EXT_DEBUG
LOG_VOL("ext_mount(%s, %s): %s mount rc = %d\n", devpath, *f,
LOG_VOL("ext_mount(%s, %s): %s mount rc = %d", devpath, *f,
vol->mount_point, rc);
#endif
if (!rc)
@ -176,7 +176,7 @@ int ext_mount(blkdev_t *dev, volume_t *vol, boolean safe_mode)
// Chmod the mount point so that its a free-for-all.
// (required for consistency with VFAT.. sigh)
if (chmod(vol->mount_point, 0777) < 0) {
LOGE("Failed to chmod %s (%s)\n", vol->mount_point, strerror(errno));
LOGE("Failed to chmod %s (%s)", vol->mount_point, strerror(errno));
return -errno;
}

View File

@ -31,7 +31,7 @@ static char FSCK_MSDOS_PATH[] = "/system/bin/dosfsck";
int vfat_identify(blkdev_t *dev)
{
#if VFAT_DEBUG
LOG_VOL("vfat_identify(%d:%d):\n", dev->major, dev->minor);
LOG_VOL("vfat_identify(%d:%d):", dev->major, dev->minor);
#endif
return 0; // XXX: Implement
}
@ -41,11 +41,11 @@ int vfat_check(blkdev_t *dev)
int rc;
#if VFAT_DEBUG
LOG_VOL("vfat_check(%d:%d):\n", dev->major, dev->minor);
LOG_VOL("vfat_check(%d:%d):", dev->major, dev->minor);
#endif
if (access(FSCK_MSDOS_PATH, X_OK)) {
LOGE("vfat_check(%d:%d): %s not found (skipping checks)\n",
LOGE("vfat_check(%d:%d): %s not found (skipping checks)",
dev->major, dev->minor, FSCK_MSDOS_PATH);
return 0;
}
@ -74,21 +74,21 @@ int vfat_check(blkdev_t *dev)
#endif
if (rc == 0) {
LOG_VOL("Filesystem check completed OK\n");
LOG_VOL("Filesystem check completed OK");
return 0;
} else if (rc == 1) {
LOG_VOL("Filesystem check failed (general failure)\n");
LOG_VOL("Filesystem check failed (general failure)");
return -EINVAL;
} else if (rc == 2) {
LOG_VOL("Filesystem check failed (invalid usage)\n");
LOG_VOL("Filesystem check failed (invalid usage)");
return -EIO;
} else if (rc == 4) {
LOG_VOL("Filesystem check completed (errors fixed)\n");
LOG_VOL("Filesystem check completed (errors fixed)");
} else if (rc == 8) {
LOG_VOL("Filesystem check failed (not a FAT filesystem)\n");
LOG_VOL("Filesystem check failed (not a FAT filesystem)");
return -ENODATA;
} else {
LOG_VOL("Filesystem check failed (unknown exit code %d)\n", rc);
LOG_VOL("Filesystem check failed (unknown exit code %d)", rc);
return -EIO;
}
return 0;
@ -102,7 +102,7 @@ int vfat_mount(blkdev_t *dev, volume_t *vol, boolean safe_mode)
devpath = blkdev_get_devpath(dev);
#if VFAT_DEBUG
LOG_VOL("vfat_mount(%d:%d, %s, %d):\n", dev->major, dev->minor, vol->mount_point, safe_mode);
LOG_VOL("vfat_mount(%d:%d, %s, %d):", dev->major, dev->minor, vol->mount_point, safe_mode);
#endif
flags = MS_NODEV | MS_NOEXEC | MS_NOSUID | MS_DIRSYNC;
@ -110,7 +110,7 @@ int vfat_mount(blkdev_t *dev, volume_t *vol, boolean safe_mode)
if (safe_mode)
flags |= MS_SYNCHRONOUS;
if (vol->state == volstate_mounted) {
LOG_VOL("Remounting %d:%d on %s, safe mode %d\n", dev->major,
LOG_VOL("Remounting %d:%d on %s, safe mode %d", dev->major,
dev->minor, vol->mount_point, safe_mode);
flags |= MS_REMOUNT;
}
@ -119,7 +119,7 @@ int vfat_mount(blkdev_t *dev, volume_t *vol, boolean safe_mode)
"utf8,uid=1000,gid=1000,fmask=711,dmask=700");
if (rc && errno == EROFS) {
LOGE("vfat_mount(%d:%d, %s): Read only filesystem - retrying mount RO\n",
LOGE("vfat_mount(%d:%d, %s): Read only filesystem - retrying mount RO",
dev->major, dev->minor, vol->mount_point);
flags |= MS_RDONLY;
rc = mount(devpath, vol->mount_point, "vfat", flags,
@ -127,7 +127,7 @@ int vfat_mount(blkdev_t *dev, volume_t *vol, boolean safe_mode)
}
#if VFAT_DEBUG
LOG_VOL("vfat_mount(%s, %d:%d): mount rc = %d\n", dev->major,k dev->minor,
LOG_VOL("vfat_mount(%s, %d:%d): mount rc = %d", dev->major,k dev->minor,
vol->mount_point, rc);
#endif
free (devpath);