dss_msg("%d\n", (int)pid);
return 0;
}
+ DSS_NOTICE_LOG(("sending signal %d to pid %d\n", sig, (int)pid));
ret = kill(pid, sig);
if (ret < 0)
return -ERRNO_TO_DSS_ERROR(errno);
struct snapshot *s;
int i;
- DSS_DEBUG_LOG(("looking for orphaned snapshots\n"));
+ DSS_DEBUG_LOG(("looking for old incomplete snapshots\n"));
FOR_EACH_SNAPSHOT(s, i, sl) {
if (snapshot_is_being_created(s))
continue;
if (!low_disk_space)
goto out;
DSS_WARNING_LOG(("disk space low and nothing obvious to remove\n"));
+ why = "oldest";
victim = find_oldest_removable_snapshot(&sl);
if (victim)
goto remove;
return -E_BUG;
}
+/* also checks if . is a mountpoint, if --mountpoint was given */
static int change_to_dest_dir(void)
{
int ret;
const char *dd = OPT_STRING_VAL(DSS, DEST_DIR);
+ struct stat dot, dotdot;
DSS_INFO_LOG(("changing cwd to %s\n", dd));
- if (chdir(dd) >= 0)
- return 1;
- ret = -ERRNO_TO_DSS_ERROR(errno);
- DSS_ERROR_LOG(("could not change cwd to %s\n", dd));
- return ret;
+ if (chdir(dd) < 0) {
+ ret = -ERRNO_TO_DSS_ERROR(errno);
+ DSS_ERROR_LOG(("could not change cwd to %s\n", dd));
+ return ret;
+ }
+ if (!OPT_GIVEN(DSS, MOUNTPOINT))
+ return 0;
+ if (stat(".", &dot) < 0) {
+ ret = -ERRNO_TO_DSS_ERROR(errno);
+ DSS_ERROR_LOG(("could not stat .\n"));
+ return ret;
+ }
+ if (stat("..", &dotdot) < 0) {
+ ret = -ERRNO_TO_DSS_ERROR(errno);
+ DSS_ERROR_LOG(("could not stat ..\n"));
+ return ret;
+ }
+ if (dot.st_dev == dotdot.st_dev && dot.st_ino != dotdot.st_ino) {
+ DSS_ERROR_LOG(("mountpoint check failed for %s\n", dd));
+ return -E_MOUNTPOINT;
+ }
+ return 1;
}
static int check_config(void)
}
EXPORT_CMD_HANDLER(ls);
+static int com_configtest(void)
+{
+ printf("Syntax Ok\n");
+ return 0;
+}
+EXPORT_CMD_HANDLER(configtest);
+
static int setup_signal_handling(void)
{
int ret;
for (i = 1; (cmd = lls_cmd(i, dss_suite)); i++) {
const char *name = lls_command_name(cmd);
const char *purpose = lls_purpose(cmd);
- printf("%-10s%s\n", name, purpose);
+ printf("%-11s%s\n", name, purpose);
}
exit(EXIT_SUCCESS);
}