_cache_load("/dev/sd*");
_cache_load("/dev/hd*");
_cache_load("/dev/md*");
+ _cache_load("/dev/nvme*");
_cache_load("/dev/vd*");
_cache_load("/dev/xvd*");
_cache_load("/dev/mapper/*");
const char *f2fsck = "/usr/sbin/fsck.f2fs";
const char *dosfsck = "/usr/sbin/dosfsck";
const char *btrfsck = "/usr/bin/btrfsck";
+ const char *ntfsck = "/usr/bin/ntfsfix";
const char *ckfs;
/* UBIFS does not need stuff like fsck */
ckfs = e2fsck;
} else if (!strncmp(pr->type, "btrfs", 5)) {
ckfs = btrfsck;
+ } else if (!strncmp(pr->type, "ntfs", 4)) {
+ ckfs = ntfsck;
} else {
ULOG_ERR("check_filesystem: %s is not supported\n", pr->type);
return;
if (!pid) {
if(!strncmp(pr->type, "f2fs", 4)) {
execl(ckfs, ckfs, "-f", pr->dev, NULL);
- exit(-1);
+ exit(EXIT_FAILURE);
} else if(!strncmp(pr->type, "btrfs", 5)) {
execl(ckfs, ckfs, "--repair", pr->dev, NULL);
- exit(-1);
+ exit(EXIT_FAILURE);
+ } else if(!strncmp(pr->type, "ntfs", 4)) {
+ execl(ckfs, ckfs, "-b", pr->dev, NULL);
+ exit(EXIT_FAILURE);
} else {
execl(ckfs, ckfs, "-p", pr->dev, NULL);
- exit(-1);
+ exit(EXIT_FAILURE);
}
} else if (pid > 0) {
int status;
waitpid(pid, &status, 0);
- if (WEXITSTATUS(status))
+ if (WIFEXITED(status) && WEXITSTATUS(status))
ULOG_ERR("check_filesystem: %s returned %d\n", ckfs, WEXITSTATUS(status));
+ if (WIFSIGNALED(status))
+ ULOG_ERR("check_filesystem: %s terminated by %s\n", ckfs, strsignal(WTERMSIG(status)));
}
}
if (m && m->extroot)
return -1;
- if (m) switch (type) {
- case TYPE_HOTPLUG:
+ if (type == TYPE_HOTPLUG)
blockd_notify(device, m, pr);
- if (m->autofs)
- return 0;
- if (!auto_mount)
- return -1;
- break;
- case TYPE_AUTOFS:
- if (!m->autofs)
- return -1;
- break;
- case TYPE_DEV:
- if (m->autofs)
- return -1;
- break;
- } else if (type == TYPE_HOTPLUG) {
- blockd_notify(device, NULL, pr);
- }
if (m) {
- char *target = m->target;
char _target[32];
+ char *target;
int err = 0;
+ switch (type) {
+ case TYPE_HOTPLUG:
+ if (m->autofs)
+ return 0;
+ if (!auto_mount)
+ return -1;
+ break;
+ case TYPE_AUTOFS:
+ if (!m->autofs)
+ return -1;
+ break;
+ case TYPE_DEV:
+ if (m->autofs)
+ return -1;
+ break;
+ }
+
if (m->autofs) {
snprintf(_target, sizeof(_target), "/tmp/run/blockd/%s", device);
target = _target;
- }
- if (!target) {
+ } else if (m->target) {
+ target = m->target;
+ } else {
snprintf(_target, sizeof(_target), "/mnt/%s", device);
target = _target;
}
if (strncmp(pr->type, "ext", 3) &&
strncmp(pr->type, "f2fs", 4) &&
strncmp(pr->type, "btrfs", 5) &&
+ strncmp(pr->type, "ntfs", 4) &&
strncmp(pr->type, "ubifs", 5)) {
- ULOG_ERR("extroot: unsupported filesystem %s, try ext4, f2fs, btrfs or ubifs\n", pr->type);
+ ULOG_ERR("extroot: unsupported filesystem %s, try ext4, f2fs, btrfs, ntfs or ubifs\n", pr->type);
return -1;
}