#include <uci.h>
#include <uci_blob.h>
+#include <libubox/ulog.h>
#include <libubox/list.h>
#include <libubox/vlist.h>
#include <libubox/blobmsg_json.h>
#include "libubi/libubi.h"
#endif
-static int kmsg = 0;
-
-static void klog(int prio, const char *fmt, ...)
-{
- va_list ap;
- FILE *f = fopen("/dev/kmsg", "w");
-
- if (f) {
- fprintf(f, "<%d>", prio);
-
- va_start(ap, fmt);
- vfprintf(f, fmt, ap);
- va_end(ap);
-
- fclose(f);
- }
-}
-
-#define KINFO(fmt, ...) do { \
- if (kmsg) klog(LOG_INFO, "block: " fmt, ## __VA_ARGS__); \
- } while (0)
-
-#define ERROR(fmt, ...) do { \
- if (kmsg) \
- klog(LOG_ERR, "block: " fmt, ## __VA_ARGS__); \
- else { \
- syslog(LOG_ERR, fmt, ## __VA_ARGS__); \
- fprintf(stderr, "block: "fmt, ## __VA_ARGS__); \
- } \
- } while (0)
-
enum {
TYPE_MOUNT,
TYPE_SWAP,
struct uci_package *pkg;
uci_set_confdir(ctx, dir);
- KINFO("attempting to load %s/%s\n", dir, file);
+ ULOG_INFO("attempting to load %s/%s\n", dir, file);
if (uci_load(ctx, file, &pkg)) {
uci_get_errorstr(ctx, &err, file);
- ERROR("unable to load configuration (%s)\n", err);
+ ULOG_ERR("unable to load configuration (%s)\n", err);
free(err);
return NULL;
}
if (!pkg) {
- ERROR("no usable configuration\n");
+ ULOG_ERR("no usable configuration\n");
return -1;
}
return;
if (strncmp(pr->id->name, "ext", 3)) {
- ERROR("check_filesystem: %s is not supported\n", pr->id->name);
+ ULOG_ERR("check_filesystem: %s is not supported\n", pr->id->name);
return;
}
if (stat(e2fsck, &statbuf) < 0) {
- ERROR("check_filesystem: %s not found\n", e2fsck);
+ ULOG_ERR("check_filesystem: %s not found\n", e2fsck);
return;
}
waitpid(pid, &status, 0);
if (WEXITSTATUS(status))
- ERROR("check_filesystem: %s returned %d\n", e2fsck, WEXITSTATUS(status));
+ ULOG_ERR("check_filesystem: %s returned %d\n", e2fsck, WEXITSTATUS(status));
}
}
return -1;
if (find_mount_point(pr->dev)) {
- ERROR("%s is already mounted\n", pr->dev);
+ ULOG_ERR("%s is already mounted\n", pr->dev);
return -1;
}
err = mount(pr->dev, target, pr->id->name, m->flags,
(m->options) ? (m->options) : (""));
if (err)
- ERROR("mounting %s (%s) as %s failed (%d) - %s\n",
- pr->dev, pr->id->name, target, err, strerror(err));
+ ULOG_ERR("mounting %s (%s) as %s failed (%d) - %s\n",
+ pr->dev, pr->id->name, target, err, strerror(err));
else
handle_swapfiles(true);
return err;
err = mount(pr->dev, target, pr->id->name, 0, "");
if (err)
- ERROR("mounting %s (%s) as %s failed (%d) - %s\n",
- pr->dev, pr->id->name, target, err, strerror(err));
+ ULOG_ERR("mounting %s (%s) as %s failed (%d) - %s\n",
+ pr->dev, pr->id->name, target, err, strerror(err));
else
handle_swapfiles(true);
return err;
err = umount2(mp, MNT_DETACH);
if (err)
- ERROR("unmounting %s (%s) failed (%d) - %s\n",
- pr->dev, mp, err, strerror(err));
+ ULOG_ERR("unmounting %s (%s) failed (%d) - %s\n",
+ pr->dev, mp, err, strerror(err));
else
- ERROR("unmounted %s (%s)\n",
- pr->dev, mp);
+ ULOG_INFO("unmounted %s (%s)\n",
+ pr->dev, mp);
return err;
}
err = umount2(mount_point, MNT_DETACH);
if (err)
- ERROR("umount of %s failed (%d) - %s\n",
- mount_point, err, strerror(err));
+ ULOG_ERR("umount of %s failed (%d) - %s\n",
+ mount_point, err, strerror(err));
return 0;
} else if (strcmp(action, "add")) {
- ERROR("Unkown action %s\n", action);
+ ULOG_ERR("Unkown action %s\n", action);
return -1;
}
#else
if (find_block_mtd("rootfs", devpath, sizeof(devpath))) {
if (find_root_dev(devpath, sizeof(devpath))) {
- ERROR("extroot: unable to determine root device\n");
+ ULOG_ERR("extroot: unable to determine root device\n");
return -1;
}
}
if (stat(tag, &s)) {
fp = fopen(tag, "w+");
if (!fp) {
- ERROR("extroot: failed to write UUID to %s: %d (%s)\n",
- tag, errno, strerror(errno));
+ ULOG_ERR("extroot: failed to write UUID to %s: %d (%s)\n",
+ tag, errno, strerror(errno));
/* return 0 to continue boot regardless of error */
return 0;
}
fp = fopen(tag, "r");
if (!fp) {
- ERROR("extroot: failed to read UUID from %s: %d (%s)\n",
- tag, errno, strerror(errno));
+ ULOG_ERR("extroot: failed to read UUID from %s: %d (%s)\n",
+ tag, errno, strerror(errno));
return -1;
}
if (!strcasecmp(uuid, pr->uuid))
return 0;
- ERROR("extroot: UUID mismatch (root: %s, %s: %s)\n",
- pr->uuid, basename(path), uuid);
+ ULOG_ERR("extroot: UUID mismatch (root: %s, %s: %s)\n",
+ pr->uuid, basename(path), uuid);
return -1;
}
}
- ERROR("extroot: unable to lookup root device %s\n", devpath);
+ ULOG_ERR("extroot: unable to lookup root device %s\n", devpath);
return -1;
}
if (!m || !m->extroot)
{
- KINFO("extroot: not configured\n");
+ ULOG_INFO("extroot: not configured\n");
return -1;
}
pr = find_block_info(m->uuid, m->label, m->device);
if (!pr && delay_root){
- KINFO("extroot: device not present, retrying in %u seconds\n", delay_root);
+ ULOG_INFO("extroot: device not present, retrying in %u seconds\n", delay_root);
sleep(delay_root);
mkblkdev();
cache_load(0);
if (pr) {
if (strncmp(pr->id->name, "ext", 3) &&
strncmp(pr->id->name, "ubifs", 5)) {
- ERROR("extroot: unsupported filesystem %s, try ext4\n", pr->id->name);
+ ULOG_ERR("extroot: unsupported filesystem %s, try ext4\n", pr->id->name);
return -1;
}
if (test_fs_support(pr->id->name)) {
- ERROR("extroot: filesystem %s not supported by kernel\n", pr->id->name);
+ ULOG_ERR("extroot: filesystem %s not supported by kernel\n", pr->id->name);
return -1;
}
err = mount(pr->dev, path, pr->id->name, 0, (m->options) ? (m->options) : (""));
if (err) {
- ERROR("extroot: mounting %s (%s) on %s failed: %d (%s)\n",
- pr->dev, pr->id->name, path, err, strerror(err));
+ ULOG_ERR("extroot: mounting %s (%s) on %s failed: %d (%s)\n",
+ pr->dev, pr->id->name, path, err, strerror(err));
} else if (m->overlay) {
err = check_extroot(path);
if (err)
umount(path);
}
} else {
- ERROR("extroot: cannot find device %s%s\n",
- (m->uuid ? "with UUID " : (m->label ? "with label " : "")),
- (m->uuid ? m->uuid : (m->label ? m->label : m->device)));
+ ULOG_ERR("extroot: cannot find device %s%s\n",
+ (m->uuid ? "with UUID " : (m->label ? "with label " : "")),
+ (m->uuid ? m->uuid : (m->label ? m->label : m->device)));
}
return err;
return -1;
if (argc != 2) {
- fprintf(stderr, "Usage: block extroot\n");
+ ULOG_ERR("Usage: block extroot\n");
return -1;
}
- kmsg = 1;
-
mkblkdev();
cache_load(1);
+ /* enable LOG_INFO messages */
+ ulog_threshold(LOG_INFO);
+
/*
* Look for "rootfs_data". We will want to mount it and check for
* extroot configuration.
struct stat s;
if (stat(argv[i], &s)) {
- ERROR("failed to stat %s\n", argv[i]);
+ ULOG_ERR("failed to stat %s\n", argv[i]);
continue;
}
if (!S_ISBLK(s.st_mode)) {
- ERROR("%s is not a block device\n", argv[i]);
+ ULOG_ERR("%s is not a block device\n", argv[i]);
continue;
}
pr = find_block_info(NULL, NULL, argv[i]);
lineptr = NULL;
if (!fp) {
- ERROR("failed to open /proc/swaps\n");
+ ULOG_ERR("failed to open /proc/swaps\n");
return -1;
}
while (getline(&lineptr, &s, fp) > 0)
if (strcmp(pr->id->name, "swap"))
continue;
if (swapon(pr->dev, 0))
- ERROR("failed to swapon %s\n", pr->dev);
+ ULOG_ERR("failed to swapon %s\n", pr->dev);
}
return 0;
case 'p':
return swapon_usage();
if (stat(argv[optind], &st) || (!S_ISBLK(st.st_mode) && !S_ISREG(st.st_mode))) {
- ERROR("%s is not a block device or file\n", argv[optind]);
+ ULOG_ERR("%s is not a block device or file\n", argv[optind]);
return -1;
}
err = swapon(argv[optind], flags);
if (err) {
- ERROR("failed to swapon %s (%d)\n", argv[optind], err);
+ ULOG_ERR("failed to swapon %s (%d)\n", argv[optind], err);
return err;
}
static int main_swapoff(int argc, char **argv)
{
if (argc != 2) {
- ERROR("Usage: swapoff [-a] [DEVICE]\n\n"
+ ULOG_ERR("Usage: swapoff [-a] [DEVICE]\n\n"
"\tStop swapping on DEVICE\n"
" -a\tStop swapping on all swap devices\n");
return -1;
char line[256];
if (!fp) {
- ERROR("failed to open /proc/swaps\n");
+ ULOG_ERR("failed to open /proc/swaps\n");
return -1;
}
fgets(line, sizeof(line), fp);
*end = '\0';
err = swapoff(line);
if (err)
- ERROR("failed to swapoff %s (%d)\n", line, err);
+ ULOG_ERR("failed to swapoff %s (%d)\n", line, err);
}
fclose(fp);
} else {
int err;
if (stat(argv[1], &s) || (!S_ISBLK(s.st_mode) && !S_ISREG(s.st_mode))) {
- ERROR("%s is not a block device or file\n", argv[1]);
+ ULOG_ERR("%s is not a block device or file\n", argv[1]);
return -1;
}
err = swapoff(argv[1]);
if (err) {
- ERROR("fsiled to swapoff %s (%d)\n", argv[1], err);
+ ULOG_ERR("failed to swapoff %s (%d)\n", argv[1], err);
return err;
}
}
umask(0);
+ ulog_open(-1, -1, "block");
+ ulog_threshold(LOG_NOTICE);
+
if (!strcmp(base, "swapon"))
return main_swapon(argc, argv);
return main_umount(argc, argv);
}
- fprintf(stderr, "Usage: block <info|mount|umount|detect>\n");
+ ULOG_ERR("Usage: block <info|mount|umount|detect>\n");
return -1;
}